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

前言

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 -nooutCertificate:Data:Version: 3 (0x2)Serial Number:e0:94:6c:61:6a:9f:5e:bcSignature Algorithm: sha256WithRSAEncryptionIssuer: 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 GMTNot After : Dec  3 03:24:49 2025 GMTSubject: 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: rsaEncryptionPublic-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:c3Exponent: 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:B1X509v3 Authority Key Identifier: keyid:0E:0B:87:6B:E0:76:15:B5:7A:E6:49:CC:D8:06:AB:00:30:B6:C9:B1X509v3 Basic Constraints: CA:TRUESignature 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       # 服务器的公钥内容,以及算法是rsaPublic-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:51Exponent: 65537 (0x10001)Attributes:a0:00Signature Algorithm: sha256WithRSAEncryption53: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:e8Signature Algorithm: sha256WithRSAEncryptionIssuer: 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 GMTNot After : Dec  3 03:55:53 2025 GMTSubject: 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: rsaEncryptionPublic-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:51Exponent: 65537 (0x10001)Signature Algorithm: sha256WithRSAEncryption8e: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.rhkb.cn/news/486146.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用javaScript生成随机迷宫

效果预览 我制作了一个 CodePen,以动画形式展示随机迷宫的创建过程,以便更加直观的观察算法的工作原理。(点击即可访问生成新迷宫) 基本思路 使用javaScript生成随机迷宫的核心思想是使用一个“深度优先搜索”(DFS&a…

【ArkTS】列表组件的“下拉刷新”和“上拉加载”

系列文章目录 【ArkTS】关于ForEach的第三个参数键值 【ArkTS】“一篇带你读懂ForEach和LazyForEach” 【小白拓展】 【ArkTS】“一篇带你掌握TaskPool与Worker两种多线程并发方案” 【ArkTS】 一篇带你掌握“语音转文字技术” --内附详细代码 【ArkTS】技能提高–“用户授权”…

Java项目实战II基于微信小程序的消防隐患在线举报系统(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着城市化进程的加快&…

每日十题八股-2024年12月7日

1.说说hashmap的负载因子 2.Hashmap和Hashtable有什么不一样的?Hashmap一般怎么用? 3.ConcurrentHashMap怎么实现的? 4.分段锁怎么加锁的? 5.分段锁是可重入的吗? 6.已经用了synchronized,为什么还要用CAS呢…

CTF学习24.11.19[音频隐写]

MISC07[音频隐写] 隐写术 隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容。隐写术的英文叫做Steganography,来源于特里特米乌斯的一本讲述密码学与隐写术的著作Steganograp…

掌握谈判技巧,达成双赢协议

在当今竞争激烈且合作频繁的社会环境中,谈判成为了我们解决分歧、谋求共同发展的重要手段。无论是商业合作、职场交流,还是国际事务协商,掌握谈判技巧以达成双赢协议都具有极其关键的意义。它不仅能够让各方在利益分配上找到平衡点&#xff0…

HTTPS的工作过程

1.HTTPS协议原理 1.1HTTPS协议的由来 HTTP在传输网络数据的时候是明文传输的,信息容易被窃听甚至篡改,因此他是一个不安全的协议(但效率高)。在如今的网络环境中,数据安全是很重要的(比如支付密码又或者各…

鸿蒙UI开发——渐变色效果

1、概 述 ArkTs可以通过颜色渐变接口,设置组件的背景颜色渐变效果,实现在两个或多个指定的颜色之间进行平稳的过渡。 目前提供三种渐变类型:线性渐变、角度渐变、径向渐变。 我们在鸿蒙UI布局实战 —— 个人中心页面开发中,默认…

距离与AoA辅助的三维测距算法(适用于四个基站的情况的单点定位),MATLAB代码

本MATLAB 代码实现了一个基于LOS/NLOS混合环境的单点定位系统,主要用于估计目标物体的单点位 文章目录 代码运行结果源代码代码功能概述主要步骤分析初始化部分 绘图与输出 代码运行结果 定位结果如下: 命令行的坐标和误差输出: 部分代码…

Vue指令(一)--v-html、v-show、v-if、v-else、v-else-if、v-on、v-bind、v-for、v-model

目录 (一)初识指令和内容渲染指令v-html 1.v-html 案例: 官网的API文档 (二)条件渲染指令v-show和v-if 1. v-show 2. v-if (三)条件渲染指令v-else和v-else-if 案例 (四…

记一次由docker容器使得服务器cpu占满密码和密钥无法访问bug

Bug场景: 前几天在服务器上部署了一个免费影视网站,这个应用需要四个容器,同时之前的建站软件workpress也是使用docker部署的,也使用了三个容器。在使用workpress之前,我将影视软件的容器全部停止。 再使用workpress…

【JavaEE 进阶(一)】SpringBoot(上)

博主主页: 33的博客 文章专栏分类:JavaEE ??我的代码仓库: 33的代码仓库?? ???关注我带你了解更多进阶知识 目录 1.前言2.Spring3.第一个SpringBoot程序4.Spring MVC 4.1建立连接 4.1.1RequestMapping使用 4.2请求 4.2.1传递单个参数4.2.2传递多个参数4.2.3传递一个对象…

(未更新完)day30-IO-阶段综合案例(带权重的随机每日一记)(笔记完全来源于黑马程序员)

目录 0 目录一、听黑马阿玮的视频记录的笔记1. 制造假数据1.1 如何制造假数据1.2 练习1-生成方式1:爬取姓氏、男生名字、女生名字1.3 练习2-生成方式1:在练习1的基础上,将数据写入本地文件1.4 练习3-生成方式2:利用糊涂包生成假数…

FPGA中所有tile介绍

FPGA中包含的tile类型,以xinlinx 7k为例,可以通过f4pga项目中的原语文件夹查看,主要包含以下这些: 以下是您提到的 Xilinx 7 系列 FPGA 中各种模块的含义及用途: 1. BRAM (Block RAM) BRAM 是 FPGA 中的块存储资源&…

如何解决压测过程中JMeter堆内存溢出问题

如何解决压测过程中JMeter堆内存溢出问题 背景一、为什么会堆内存溢出?二、解决堆内存溢出措施三、堆内存参数应该怎么调整?四、堆内存大小配置建议 背景 Windows环境下使用JMeter压测运行一段时间后,JMeter日志窗口报错“java.lang.OutOfMe…

嵌入式蓝桥杯学习4 lcd移植

cubemx配置 复制前面配置过的文件 打开cubemx,将PB8,PB9配置为GPIO-Output。 点击GENERATE CODE. 文件移植 1.打开比赛提供的文件包,点击Inc文件夹 2.点击Inc文件夹。复制fonts.h和lcd.h,粘贴到我们自己的工程文件夹的bsp中&#xff08…

学习记录,正则表达式, 隐式转换

正则表达式 \\:表示正则表达式 W: 表示一个非字(不是一个字,例如:空格,逗号,句号) W: 多个非字 基本组成部分 1.字符字面量: 普通字符:在正则表达式中,大…

标书里的“废标雷区”:你踩过几个?

在投标领域,标书的质量不仅决定了中标的可能性,更是体现企业专业度的关键。但即便是经验丰富的投标人,也难免会在标书编制过程中踩中“废标雷区”。这些雷区可能隐藏在技术方案的细节中,也可能是投标文件格式的规范问题。以下&…

k8s-编写CSI插件(3)

1、概述 在 Kubernetes 中,存储插件的开发主要有以下几种方式: CSI插件:Container Storage Interface (CSI) 是 Kubernetes 的标准插件接口,是全新的插件方案,插件和驱动调用通过grpc协议,功能丰富&#x…

R语言机器学习论文(三):特征提取

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据一、数据归一化二、离散型分类变量的编码三、筛选特征四、重要特征五、输出结果六、总结系统信息介绍 在数据分析和机器学习项目中,经常需要对数据进行预…