OpenSSL 自建CA 以及颁发证书(网站部署https双向认证)

news2024/12/27 8:15:15

前言

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

一、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,回车,这时就会弹出一个窗口就可以查看到了,如下图所示:

在这里插入图片描述

三、流程说明

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、再次访问
在这里插入图片描述

在这里插入图片描述

参考文章:

  • 基于Nginx的https单向认证和双向认证(自制证书生成+详细配置)
  • 自建CA并生成自签名SSL证书

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在M3上面搭建一套lnmp环境

下载docker-desktop 官网下载docker-desktop 切换镜像源 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docke…

WebSocket 通信说明与基于 ESP-IDF 的 WebSocket 使用

一、 WebSocket 出现的背景 最开始 客户端(Client) 和 服务器(Server) 通信使用的是 HTTP 协议,HTTP 协议有一个的缺陷为:通信只能由客户端(Client)发起。 在一些场景下&#xff0…

linux(centos) 环境部署,安装JDK,docker(mysql, redis,nginx,minio,nacos)

目录 1.安装JDK (非docker)1.1 将文件放在目录下: /usr/local/jdk1.2 解压至当前目录1.3 配置环境变量 2.安装docker2.1 验证centos内核2.2 安装软件工具包2.3 设置yum源2.4 查看仓库中所有docker版本,按需选择安装2.5 安装docker2.6 启动docker 并 开机…

CODESYS可视化秒表分批计时详细制作案例(一)

#制作一个在可视化界面可用于秒表计时的详细案例# 前言: 在电脑和手机的时钟上,都有一个秒表计时的功能。除此之外,在赛事上,也有更为专业的秒表计时器设备。举一反三,那么对于工控设备,为了衡量生产效率和节拍,引入了"Cycle Time(CT)"的概念,我们可以通…

openGauss开源数据库实战十八

文章目录 任务十八 openGauss逻辑结构:构:用户和权眼管理任务目标实施步骤一、准备工作二、用户和角色管理1.使用CREATE USER语句创建用户2.使用CREATE ROLE语句创建用户3.删除用户和角色 三、权限管理1.系统权限清理工作 任务十八 openGauss逻辑结构:构:用户和权眼管理 任务目…

Scratch游戏推荐 | 我的世界:平台冒险——像素世界的全新挑战! ⛏️

🎮 Scratch游戏推荐 | 我的世界:平台冒险——像素世界的全新挑战! ⛏️🌍 今天给大家推荐一款精彩绝伦的Scratch平台冒险游戏——《我的世界:平台冒险 – 第二章》!由atomicmagicnumber制作,这…

【java-数据结构篇】揭秘 Java LinkedList:链表数据结构的 Java 实现原理与核心概念

我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 目录 1. Java LinkedList 基础 1.1 LinkedList 简介 1.2 LinkedList 的实现原理 1.3 LinkedList 与 ArrayList 的区别 2. 链表基础 2.1 链…

北斗道路运输车辆管理应用:违规驾驶行为监测、车辆编队管理、安全跟踪(车辆历史轨迹查询)、车辆动态位置数据的实时查看和管理

文章目录 场景概述解决方案应用案例合作构想场景概述 面向旅游大巴车、危险品运输车及重型载货运输车等车辆,利用北斗定位导航服务,结合互联网通信技术,实现车辆安全驾驶管理与调度,有效降低道路事故发生风险,提升道路运输管理水平及车辆调度能力。 解决方案 在车辆上安…

【ABAP——DAILOG_2】

文章目录 使用Tabstrip控件实现分页签效果标签页的修改使用Table Control控件实现表单输出表格控件使用向导创建Table ControlTable Control列的修改 用户通过界面输入数据,数据通过屏幕控件传递到ABAP/4程序中的变量,程序在PBO中准备数据并显示界面&…

资料文件夹转移工具5.2.3 |快速转移到D盘,释放C盘空间

这是一款支持将C盘的常用文件夹转移到其他磁盘分区的工具,提供仅变目录、复制资料和转移资料三种转移方式。该工具完全免费,单文件免安装,大小仅为546KB,非常适合需要释放C盘空间的用户。 大小:546KB 下载地址&#…

使用STM32CubeMX配置串口各种功能

使用STM32CubeMX配置串口各种功能 STM32CubeMX软件的安装接收空闲中断STM32CubeMX配置1.新建工程2. 选择芯片3. 选择时钟和下载方式4. 配置串口5.设置工程消息6.生成代码7.修改生成的代码 空闲中断DMA转运STM32CubeMX配置4.配置串口5.设置工程消息6.生成代码7.修改生成的代码 S…

Javascript中DOM操作和事件监听综合练习 (具备三种功能的轮播图案例)

#如何去实现图片轮播效果图,通过创建一个基本的 HTML 页面结构,包含用于展示轮播图片的区域、左右切换箭头以及放置轮播图片的容器。# 整体架构 一、CSS 样式 接下来创建一个 styles.css 文件来设置页面的样式,让轮播效果看起来更美观。定义…

无人设备遥控器之防水性能篇

无人设备遥控器的防水性能是评估其耐用性和适应不同环境能力的重要指标。随着无人设备技术的不断发展,越来越多的遥控器在设计时融入了防水元素,以满足用户在不同天气条件下的使用需求。 一、防水等级与标准 无人设备遥控器的防水性能通常通过防水等级来…

【JAVA】Java入门 - 循环结构进阶

第1关 for循环的进阶使用-嵌套循环(1) 第2关 for循环的进阶使用-嵌套循环(2) 第3关 99乘法表 第4关 综合练习之ATM取款机 第5关 选择题 D、BC、B

【AI系统】AI 编译器后端优化

AI 编译器后端优化 AI 编译器分为多层架构,最顶层由各种 AI 训练框架编写的神经网络模型架构,一般由 Python 编写,常见的 AI 训练框架有 PyTorch、MindSpore、PaddlePaddle 等。在导入 AI 编译器时需要用对应框架的 converter 功能转换为 AI…

力扣 三角dp

动态规划基础题,当前所在元素来自上一行的两列的值。 题目 从图可以看出,每一行的第一个数与最后一个数都是1,然后中间的数是来自它左上方和右上方的数的和。当然并不是要打印这个三角形的形状,因此可以想到正常的打印方式应该是…

Oracle检查加强版本

支持更丰富了,代码也更乱了 #!/bin/bash## 实例个数 告警日志 实例状态 会话 活动会话 锁 集群状态 服务状态 磁盘空间 侦听日志 ## 单机、RAC Linux、AIX 11g、19c、23ai ## 依赖adrci配置正常,也可以改为 getAlert() ## ver 1.2case uname inAIX)ps…

RoBERTa- 稳健优化的 BERT 预训练模型详解

一、引言 自 BERT(Bidirectional Encoder Representations from Transformers)问世,预训练语言模型在自然语言处理(NLP)领域掀起革命浪潮,凭卓越表现大幅刷新诸多任务成绩。RoBERTa 承继 BERT 架构&#x…

【流程图】各元素形状和含义

判定、文档、数据、数据库、流程处理节点 矩形 - 动词 平行四边形 - 图像 下波浪 - 数据 图片来源http://baike.cu12.com/bkss/62449.shtml

「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器

本篇将带你实现一个多滑块联动的控制器应用。用户可以通过拖动多个滑块,动态控制不同参数(如红绿蓝三色值),并实时显示最终结果。我们将以动态颜色调节为例,展示如何结合状态管理和交互逻辑,打造一个高级的…