前言

1、前面写过一篇 阿里云免费ssl证书申请与部署,大家可以去看下

2、建议大家看完本篇博客,可以再去了解 openssel 命令 openssl系列,写的很详细

在这里插入图片描述

一、openssl 安装说明

1、这部分就不再说了,我使用centos7.9,是自带 openssl的,window的话,要去下载安装

二、CA机构

CA机构,全称为Certificate Authority,即电子认证服务机构,也称作证书授权机构。以下是关于CA机构的详细解释:

2.1、定义与性质

CA机构是具有权威公信力的第三方安全认证机构,负责数字证书的申请、审核申请人身份、签发证书及证书的生命周期管理等工作。作为独立第三方,CA机构为用户提供电子认证服务,确保网上传递信息的机密性、完整性,以及交易实体身份的真实性、信息的不可否认性,从而保障网络应用的可靠性。

2.2、功能与职责

  • 发放数字证书:CA机构验证用户的身份信息后,发放包含用户公钥、身份信息及CA签名的数字证书,证明用户合法拥有其公钥。
  • 公钥管理:承担公钥体系中公钥的合法性检验责任,确保公钥的合法性和有效性。
  • 证书管理:负责数字证书的签发、更新、撤销和查询等全生命周期管理。
  • 身份认证:通过数字证书实现用户身份的在线验证,确保网络通信双方的身份真实可靠。

2.3、类型与分类

根据功能和服务范围的不同,CA机构可分为根CA、中间CA、终端CA、域名CA和代码CA等。不同类型的CA机构在数字证书服务中扮演着不同的角色。

2.4、数字证书的内容与作用

数字证书是互联网通讯中标志通讯各方身份信息的一串数字,也称为公开密钥证书。它包含证书持有者的公钥、证书的有效期、颁发证书的CA的标识等信息,并附有CA的数字签名以验证证书的真实性和完整性。数字证书的作用包括:

  • 网络上单位的身份证:每个证书只能被唯一地签发给一个机构,不存在多个机构共用一个CA证书。
  • 信息保密性:交易中的信息均有保密的要求,因此在信息传递时需进行加密。
  • 交易者身份的确定性:网上交易的双方需要确认对方的身份以确保交易成功。
  • 不可否认性:交易一旦达成是不能被否认或抵赖的。
  • 不可修改性:交易的文件是不可被修改的,以保障交易的顺利进行。

2.5、window 本地自带已经安装的CA证书

1、win10系统里,右键工具栏左下角windows图标,选择“运行”,然后输入certmgr.msc,回车,这时就会弹出一个窗口就可以查看到了,如下图所示:

在这里插入图片描述

2.6、浏览器本地自带已经安装的CA证书

1、这里以chrome为例

在这里插入图片描述

在这里插入图片描述

三、流程说明

3.1、标准的CA签发流程

假设需要证书的是你的服务器,这里假设就命名为 server。

  1. 服务器 创建私钥(.key)
  2. 基于 服务器 私钥创建证书签名请求(.csr)
  3. 服务器 证书申请请求(.csr)提交给CA认证机构申请证书(.crt)
  4. CA机构生成CA证书链

此刻你的服务器上面就会得到,如下三个文件。

  1. server.key
  2. server.csr
  3. server.crt

如果你的服务器web是nginx,那么只需要将 server.key 和 server.crt 部署到Nginx上面就行了。

3.2、生成私有CA签发的证书

  1. 生成CA私钥(ca.key)和CA自签名证书(ca.crt)

自己假扮CA机构,当然,这种网络是不会认可的,所以,我们本地测试是没啥问题的

  1. 生成Server端私钥(server.key)和证书签名请求(server.csr)
  2. 使用CA证书(ca.crt)与密钥(ca.key)签署服务器的证书签名请求(server.csr),生成私有CA签名的服务器证书(server.crt)

此刻你的服务器上面就会得到,如下五个文件。

  1. server.key
  2. server.csr
  3. server.crt
  4. ca.key
  5. ca.crt

四、生成私有CA签发的证书的实操

1、在centos 中创建一个 ssl 文件夹,后续操作都在这

在这里插入图片描述

4.1、生成CA私钥(ca.key)和CA自签名证书(ca.crt)

1、生成密钥对,该命令随即会提示您输入密钥保护密码,后续在生成、签发、验证证书时均需要此密码。请妥善相关密钥及密码

如果使用 openssl genrsa -out rootCA.key 2048,即不使用参数 -des3 就可以生成无需密码管理的密钥对

其实 生成的 ca.key 里面包含了公钥和私钥,因为公钥就是从私钥里面提取出来的,我们也可以使用相关命令得到 ca.key 的指定私钥和指定公钥

openssl genrsa -des3 -out ca.key 2048

在这里插入图片描述

2、我们可以看下 这个 ca.key 文件内容

在这里插入图片描述

3、可以将ca.key转为pem文件,或者你在之前生成的时候就换成 .pem文件,也行

openssl rsa -in ca.key -out ca-key.pem

4、生成 CA 证书,证书有效期 1 年

# 简化的命令
openssl req -x509 -key ca.key -sha256 -days 365 -out ca.crt


# 复杂的命令: openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.pem
与之前的命令相比,这个命令增加了 -new-nodes 选项:

- new: 在复杂的命令中,这个选项表示创建一个新的证书请求或证书。
       然而,在简化的命令中,由于 -x509 已经指示要生成一个新的自签名证书,所以 -new 实际上是隐含的,因此可以省略。
 
- nodes: 这个选项用于防止对私钥进行加密(我们之前的ca.key是需要输入密码的,使用了-des3参数)。
		 在复杂的命令中,增加这个参数来保证 省略加密 是为了方便在脚本或自动化环境中使用私钥。
		 然而,在这个复杂的命令中,如果 ca.key 私钥文件已经是没有加密的,或者您不介意在生成证书时手动输入密码来解密私钥
		 (尽管这通常不是生成自签名证书时的常见做法),那么 -nodes 也可以省略。
		 
- sha256 : 这个参数指定了用于签名证书的哈希算法。具体来说,加上 -sha256 参数会指示 OpenSSL 使用 SHA-256 算法对证书进行签名。
           如果不加这个参数,OpenSSL 可能会使用默认的哈希算法,这个默认算法可能会根据 OpenSSL 的版本和配置而有所不同。

在这里插入图片描述

5、查看我们的ca证书,以文本形式输出,

openssl x509 -in ca.crt -text -noout

命令 openssl x509 -in ca.crt -text -noout 用于查看和解析 X.509 证书(在这个例子中是 ca.crt 文件)的详细信息,并以文本格式输出,但不输出证书本身。下面是该命令各部分的解释:
x509: 这是 OpenSSL 中用于处理 X.509 证书的命令。X.509 是一种广泛使用的公钥证书标准,用于在公钥基础设施(PKI)中分发公钥。
-in ca.crt: 指定输入文件,即要查看的 X.509 证书文件。在这个例子中,证书文件名为 ca.crt。
-text: 指示 OpenSSL 以文本格式输出证书的详细信息。这包括证书的版本、序列号、签名算法、颁发者(Issuer)和主题(Subject)信息、公钥、扩展等。
-noout: 阻止 OpenSSL 输出证书本身。由于使用了 -text 选项来查看证书的详细信息,因此 -noout 确保只输出这些详细信息,而不包括证书的 PEM 或 DER 编码表示。

该命令的作用是读取 ca.crt 文件中的 X.509 证书,并以文本格式输出其详细信息,但不包括证书本身的编码数据。
请注意,ca.crt 通常是一个包含 X.509 证书的文件,该文件可能以 .crt、.pem、.cer 或 .der 作为文件扩展名。在这个上下文中,.crt 扩展名仅表示该文件包含一个证书,而不涉及文件的编码格式(尽管 .crt 和 .pem 通常用于表示基于文本的 PEM 编码证书)。

[root@localjt01 ssl]# openssl x509 -in ca.crt -text -noout


Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            e0:94:6c:61:6a:9f:5e:bc
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=cn, ST=gz, L=sz, O=gxm, OU=gxm, CN=gxm_ca/emailAddress=gxm@foxmail.com   # 发布者,CA机构信息,就是我们刚刚填写的
        Validity														# 有效期,就是我们刚刚填写的,1年
            Not Before: Dec  3 03:24:49 2024 GMT
            Not After : Dec  3 03:24:49 2025 GMT
        Subject: C=cn, ST=gz, L=sz, O=gxm, OU=gxm, CN=gxm_ca/emailAddress=gxm@foxmail.com  #颁发者(Issuer)CA机构信息,就是我们刚刚填写的
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)                     # ca.key 里面的公钥
                Modulus:
                    00:cc:1e:f4:cf:dc:c7:6c:e7:81:e3:46:e0:11:fc:
                    5f:92:f2:e4:44:2a:5f:4a:af:17:3a:62:1b:db:06:
                    79:d2:86:df:67:fb:a1:bb:12:a0:33:9e:1f:da:34:
                    e6:4e:93:da:6a:b0:68:fc:62:63:b7:a0:89:68:7a:
                    6c:81:52:01:1f:2e:b1:ea:1d:32:dc:b2:61:d0:09:
                    a0:f6:a6:b7:c4:58:a4:c5:b3:80:54:f8:ae:ae:2c:
                    62:5b:39:41:12:0b:24:5f:28:96:13:af:76:a4:71:
                    79:3b:2b:18:e7:12:59:09:a1:74:00:f4:5b:b4:69:
                    8a:7f:4d:04:85:e9:21:48:7b:45:3b:bb:dc:03:59:
                    e6:03:ae:d0:39:59:83:1e:6f:43:e7:be:cd:1e:60:
                    21:65:20:02:d8:1c:21:1b:b7:18:ae:b4:cc:11:fd:
                    ff:b9:84:21:16:2d:06:f0:ca:19:be:c1:77:d9:59:
                    16:43:cf:c7:1c:50:d6:36:be:03:d8:42:ed:4b:7c:
                    ae:97:33:6d:ba:7e:d8:fb:ef:86:3d:95:ee:7d:c7:
                    9e:c9:f5:03:0a:ca:e0:90:0f:83:28:87:96:6e:ae:
                    f0:28:dc:95:a9:00:d3:fc:a1:7b:13:71:57:67:42:
                    bf:84:1c:7a:e4:4f:fa:7f:4b:ce:51:48:49:0a:d3:
                    4d:c3
                Exponent: 65537 (0x10001)
        X509v3 extensions:											# 扩展信息
            X509v3 Subject Key Identifier: 
                0E:0B:87:6B:E0:76:15:B5:7A:E6:49:CC:D8:06:AB:00:30:B6:C9:B1
            X509v3 Authority Key Identifier: 
                keyid:0E:0B:87:6B:E0:76:15:B5:7A:E6:49:CC:D8:06:AB:00:30:B6:C9:B1

            X509v3 Basic Constraints: 
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption                               # 签名算法 使用的是sha256,我们前面指定的参数
         1f:e1:cb:08:b7:79:18:ed:f7:85:3f:cd:e0:d7:66:bf:a4:86:
         31:c4:63:7c:3d:96:93:fd:6f:63:a5:51:dd:b8:3a:ff:3d:0d:
         3b:2e:3e:7d:d7:ff:56:65:bb:83:3c:2f:7d:f5:b5:66:a7:11:
         4d:fe:88:38:4b:26:0e:85:75:35:b8:39:07:af:05:5f:38:6c:
         ef:92:25:d6:c1:44:60:3b:27:45:8e:02:5f:b1:33:b9:8f:c6:
         31:c5:9e:f0:46:fe:20:b1:00:60:96:96:25:d4:b3:03:a4:a1:
         f1:b8:49:09:f3:c8:c8:25:c4:95:e3:44:2a:ee:a8:83:a0:28:
         1f:1a:06:2a:7c:ef:ff:97:6f:a6:a6:09:54:c5:33:03:7f:75:
         35:91:5a:b3:7c:2b:46:cc:10:2b:0d:49:34:4c:e0:09:67:74:
         64:37:60:f5:9b:10:0c:9d:b3:c6:75:12:c9:36:53:e6:71:a0:
         e2:93:58:d0:44:45:79:37:dc:6e:ea:7c:b7:80:bd:fb:f5:a0:
         65:99:17:ab:ba:35:c1:da:77:5c:d6:24:73:b6:3c:fb:83:e3:
         8d:54:24:b4:b0:96:dc:65:6e:8a:e8:ed:9d:84:ff:a6:50:47:
         d4:d1:16:ac:96:c4:92:65:12:1b:55:b2:41:58:96:c2:61:89:
         81:89:cd:af

4.2、生成Server端私钥(server.key)和证书签名请求(server.csr)

1、这里不使用 参数 -des3

openssl genrsa -out server.key 2048

在这里插入图片描述
2、使用CA证书(ca.crt)与密钥(ca.key)签署服务器的证书签名请求(server.csr)

注意这⾥的common name必须是需要访问的域名或者ip

openssl req -new  -key server.key -out server.csr

在这里插入图片描述

3、多出了 服务端证书签名请求文件 server.csr
在这里插入图片描述
4、查看下这个 签名请求文件的内容,如下

openssl req -text -noout -verify -in server.csr
[root@localjt01 ssl]# openssl req -text -noout -verify -in server.csr
verify OK
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=cn, ST=gz, L=sz, O=gxm, OU=gxm, CN=192.168.173.129/emailAddress=gxmto@foxmail.com  # 服务器的信息,就是我们之前填写的
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption       # 服务器的公钥内容,以及算法是rsa
                Public-Key: (2048 bit)
                Modulus:
                    00:c3:98:2f:78:19:9b:cc:6c:72:ff:d0:75:b1:6e:
                    bd:45:5e:46:ef:7c:e0:56:c2:6c:0a:23:1a:02:a9:
                    7f:23:44:0a:2b:fc:28:ec:de:3b:05:07:b0:d2:fb:
                    21:e9:48:fa:e5:9e:f6:f1:d0:34:7b:d8:06:a6:ea:
                    e4:8d:64:d3:ce:2a:0d:20:90:51:56:ff:a4:91:e3:
                    3a:7f:68:5f:7c:6b:c4:c2:68:b3:f5:7d:74:98:72:
                    74:14:d7:39:bc:58:53:7d:77:71:31:7a:57:76:23:
                    d0:6d:8a:b9:03:ec:87:6b:99:5e:5f:5e:46:6f:51:
                    a8:2f:c4:76:16:0b:a7:91:4a:9a:52:d1:71:64:a6:
                    1a:3a:28:db:63:9a:48:70:90:ce:e5:f0:8e:4d:49:
                    3a:e4:08:29:66:c6:8d:f2:30:22:59:50:61:e3:e4:
                    04:e4:3e:7c:f7:73:e2:62:ab:5f:55:45:ab:54:5b:
                    23:fe:82:a7:a4:9a:1a:28:64:cd:70:31:84:aa:ef:
                    ed:7e:b9:80:3a:80:b0:07:9d:06:e3:48:41:e7:7c:
                    17:76:8b:16:9f:63:67:1a:5b:32:7e:bb:bf:02:7b:
                    e8:f6:62:d8:aa:f6:4e:d3:e5:4c:d0:5c:db:1b:ac:
                    98:87:11:9b:fb:49:fe:37:84:c0:27:86:26:47:15:
                    31:51
                Exponent: 65537 (0x10001)
        Attributes:
            a0:00
    Signature Algorithm: sha256WithRSAEncryption
         53:79:c3:c9:4e:81:62:b3:44:e1:d3:40:eb:bf:56:d8:22:8a:
         b1:18:45:c2:3d:a5:c2:bd:f3:8b:b6:a7:29:9f:97:a5:56:9a:
         4e:c9:c0:90:7a:e2:7d:9e:18:7b:ab:0e:ec:a3:61:54:ad:62:
         4b:78:f4:c0:db:a3:1d:9b:7f:73:e7:fc:5c:76:a2:17:56:7c:
         b9:89:69:21:81:c0:11:89:98:81:a6:65:5d:9b:bf:db:aa:5d:
         9e:3b:e0:b8:c0:d3:7e:c6:f7:60:af:9c:4b:69:9a:fc:49:4c:
         5e:12:dc:d4:cb:3c:c5:b9:e8:71:e7:b4:fc:ef:02:16:35:6f:
         b2:3e:99:33:99:5c:56:f5:ae:4c:96:e6:e5:97:82:04:1f:09:
         43:a3:9b:fc:77:cf:ea:4d:d7:32:39:40:5d:33:0a:1a:69:a1:
         12:aa:0e:c8:e9:a1:8d:2e:5b:fe:26:83:5d:2c:d7:65:09:01:
         6c:6e:82:57:bd:a5:81:64:5f:e3:5c:77:7f:74:af:a4:b5:b9:
         8e:c2:fb:1c:d0:ad:ef:41:cf:01:63:22:92:b2:7a:5d:c1:ce:
         fc:3e:3d:12:64:85:15:83:6c:39:cb:57:15:9b:2d:62:3c:2b:
         ac:5c:d6:9a:fe:3d:05:14:0b:3b:69:8d:d3:2f:03:25:fc:77:
         31:5c:bd:64
[root@localjt01 ssl]#

4.3、生成私有CA签名的服务器证书(server.crt)

1、签发这个服务器的证书给1年

因为我们的ca需要密码,所以需要你输入前面你设置的CA密码

openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -out server.crt

在这里插入图片描述

2、查看这个 server.crt 证书内容

[root@localjt01 ssl]# openssl x509 -in server.crt -text -noout
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            cc:d9:62:c5:84:84:f3:e8
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=cn, ST=gz, L=sz, O=gxm, OU=gxm, CN=gxm_ca/emailAddress=gxm@foxmail.com  # 签发者信息,就是我们前面自己填写的ca机构信息
        Validity                                                    #有效期一年
            Not Before: Dec  3 03:55:53 2024 GMT
            Not After : Dec  3 03:55:53 2025 GMT
        Subject: C=cn, ST=gz, L=sz, O=gxm, OU=gxm, CN=192.168.173.129/emailAddress=gxmto@foxmail.com  # 服务器信息,就是我们自己前面填写的服务器信息
        Subject Public Key Info:              # 服务器的公钥信息
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c3:98:2f:78:19:9b:cc:6c:72:ff:d0:75:b1:6e:
                    bd:45:5e:46:ef:7c:e0:56:c2:6c:0a:23:1a:02:a9:
                    7f:23:44:0a:2b:fc:28:ec:de:3b:05:07:b0:d2:fb:
                    21:e9:48:fa:e5:9e:f6:f1:d0:34:7b:d8:06:a6:ea:
                    e4:8d:64:d3:ce:2a:0d:20:90:51:56:ff:a4:91:e3:
                    3a:7f:68:5f:7c:6b:c4:c2:68:b3:f5:7d:74:98:72:
                    74:14:d7:39:bc:58:53:7d:77:71:31:7a:57:76:23:
                    d0:6d:8a:b9:03:ec:87:6b:99:5e:5f:5e:46:6f:51:
                    a8:2f:c4:76:16:0b:a7:91:4a:9a:52:d1:71:64:a6:
                    1a:3a:28:db:63:9a:48:70:90:ce:e5:f0:8e:4d:49:
                    3a:e4:08:29:66:c6:8d:f2:30:22:59:50:61:e3:e4:
                    04:e4:3e:7c:f7:73:e2:62:ab:5f:55:45:ab:54:5b:
                    23:fe:82:a7:a4:9a:1a:28:64:cd:70:31:84:aa:ef:
                    ed:7e:b9:80:3a:80:b0:07:9d:06:e3:48:41:e7:7c:
                    17:76:8b:16:9f:63:67:1a:5b:32:7e:bb:bf:02:7b:
                    e8:f6:62:d8:aa:f6:4e:d3:e5:4c:d0:5c:db:1b:ac:
                    98:87:11:9b:fb:49:fe:37:84:c0:27:86:26:47:15:
                    31:51
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha256WithRSAEncryption
         8e:99:59:55:98:b5:f8:1e:25:6b:35:c8:8d:2a:35:9a:ee:71:
         db:f3:0e:17:06:e0:b9:2e:74:d6:4c:eb:d6:d1:bd:7e:b6:1f:
         78:da:f0:1d:55:5a:8f:b7:6e:2a:c2:b2:a6:bb:96:39:4f:a5:
         2f:7f:5d:96:c3:fb:62:5e:05:32:5b:9d:8c:ba:37:a5:01:bf:
         e5:fe:9e:2e:f7:ec:04:00:9d:1f:7b:20:ee:1a:75:48:ab:3e:
         79:3d:85:4e:c5:c7:68:bb:19:a2:5c:1d:9f:ee:e4:b5:13:4b:
         25:24:93:12:25:54:f2:fa:d5:f9:d8:04:2b:b2:3f:e7:ea:f4:
         3e:52:df:01:0f:1d:f8:79:91:27:62:3a:78:0a:b7:2c:00:3c:
         89:7b:1d:ca:37:3e:e5:0c:5f:34:e5:ec:62:40:54:1e:49:62:
         ac:9f:90:d3:65:cc:2b:99:c7:d3:d0:29:68:1a:37:c2:c9:f1:
         20:cb:c1:99:34:c5:91:a7:cd:59:63:75:05:2e:2c:85:7c:7e:
         e0:f0:fd:e6:87:c2:67:f6:2f:14:10:59:db:db:86:52:45:40:
         77:2d:5c:e9:1e:51:b5:c5:fa:84:93:3e:d2:0a:9b:aa:0d:a7:
         dc:62:fe:65:d6:e8:cb:59:04:05:45:08:28:9f:88:d1:4a:7d:
         97:ba:41:61

4.4、证书信息

1、我们可以把 ca.crt 和 server.crt 文件拿到 window下查看,方便查看信息,如下

4.4.1、ca.crt

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.4.2、server.crt

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

五、服务器部署证书

1、在 192.168.173.129 服务器上面部署一个 docker nginx,大致如下

docker run \
-p 80:80 \
-p 443:443 \
--name nginx \
-v /etc/localtime:/etc/localtime \
-v /data/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /data/docker/nginx/log:/var/log/nginx \
-v /data/docker/nginx/html:/usr/share/nginx/html \
-d nginx:latest

2、启动成功之后,确认 http://192.168.173.129/ 可以访问,而 https://192.168.173.129/不可以访问

在这里插入图片描述
在这里插入图片描述

3、将制作成的 server.keyserver.crt 放到nginx安装目录下的指定某个文件夹,一般是ssl,所以将这两个文件放到了 宿主机,/data/docker/nginx/conf/conf.d/ssl 此文件夹下,那么docker内部也有这两个文件

在这里插入图片描述

在这里插入图片描述

4、修改配置文件,因为是单向认证,所以我们只需配置服务端Nginx,在 /data/docker/nginx/conf/conf.d目录创建一个ssl.conf文件,内容如下,主要的是

	#填写证书文件名称
    ssl_certificate /etc/nginx/conf.d/ssl/server.crt;
    #填写证书私钥文件名称
    ssl_certificate_key /etc/nginx/conf.d/ssl/server.key;

在这里插入图片描述

server {
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    listen 443 ssl;

    #填写证书绑定的域名
    server_name 192.168.173.129;

    #填写证书文件名称
    ssl_certificate /etc/nginx/conf.d/ssl/server.crt;
    #填写证书私钥文件名称
    ssl_certificate_key /etc/nginx/conf.d/ssl/server.key;


   ssl_session_timeout 5m;
    #表示使用的加密套件的类型
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

    ssl_prefer_server_ciphers on;



    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;
    
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

5、重启nginx 验证

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、如果你需要 http 自动跳转 https。只需要在ssl.conf文件加上

server {
    listen 80;
    #填写证书绑定的域名
    server_name 192.168.173.129;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
}

六、客户端部署证书(如果需要双向认证)

1、如果你在服务端配置了,那其实是单向认证,即客户端认证服务器是否安全,如果你希望服务器也认证客户端是否安全,那就是 双向认证。

6.1、生成客户端证书

1、步骤和服务器一样,其实都是通过ca机构颁发证书,即我们需要得到如下文件

  • client.key
  • client.csr
  • client.crt

2、生成文件 client.key

openssl genrsa -out client.key 2048

在这里插入图片描述
3、使用CA证书(ca.crt)与密钥(ca.key)签署客户端的证书签名请求(client.csr)

注意这⾥的common name 可以是客户端标识

openssl req -new  -key client.key -out client.csr

在这里插入图片描述
4、生成私有CA签名的客户端证书(client.crt)

openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 365 -out client.crt

在这里插入图片描述

5、因为我们这个客户端是 window 的浏览器,windows上安装的证书需要pfx格式,也叫p12格式,生成方式如下

如果你的客户端是一个程序,client.crt 就可以满足

为了保护私钥不被未经授权的用户访问,OpenSSL 要求你为私钥设置一个密码。这个密码在 PKCS#12 文件被打开以访问私钥时会被要求输入。你可以和前面的 ca.key一个密码,也可以单独再设置一个密码

openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx

在这里插入图片描述

6、最后的文件如下

在这里插入图片描述

6.2、设置双向认证

1、在服务端Nginx的配置文件ssl.conf里面做配置即可,别忘记把ca.crt文件挂载

ssl_client_certificate /etc/nginx/conf.d/ssl/ca.crt;
ssl_verify_client on;

在这里插入图片描述

2、访问 https://192.168.173.129/ 你会发现,服务器已经开始校验你的证书了,告诉你不行

这里如果你请求 http://192.168.173.129/ 还是可以访问,因为http是 80,没有开启ssl,所以你如果想限制的话,按照我前面说的,在ssl.conf配置 80 转 443,即访问 http 自动跳转 https

在这里插入图片描述

3、配置客户端证书,我们需要将证书导入到浏览器中才能访问,打开chrome浏览器,找到:设置->隐私设置和安全性->安全->管理证书:
在这里插入图片描述

4、然后将准备好的证书client.pfx导入到浏览器中,导入成功后关闭浏览器然后再重启,重新访问刚才的的https://+服务器IP,就会提示:

在这里插入图片描述

5、后面我换成 火狐的,因为chrome 在写博客,可能证书上传需要重启浏览器
在这里插入图片描述

6、需要设置你之前设置的密码 不是ca.key的密码欧~,是你将client.crt转为client.pfx文件时候设置的密码
在这里插入图片描述
7、输入密码后
在这里插入图片描述
8、再次访问
在这里插入图片描述

在这里插入图片描述

参考文章:

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐