当前位置: 首页 > news >正文

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证书

相关文章:

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

前言 1、前面写过一篇 阿里云免费ssl证书申请与部署,大家可以去看下 2、建议大家看完本篇博客,可以再去了解 openssel 命令 openssl系列,写的很详细 一、openssl 安装说明 1、这部分就不再说了,我使用centos7.9,是自…...

YOLOv11改进,YOLOv11添加U-Netv2分割网络中SDI信息融合模块,助力小目标检测

摘要 理论介绍 SDI模块的架构: 平滑卷积(SmoothConv):用于平滑特征图,帮助减少噪声并使得特征更加稳定。Hadamard积:用于在特征图中进行逐元素相乘(点乘),以加强语义信息和细节信息的融合。通道注意力(ChannelAttention):利用通道注意力机制来自动关注重要的特征通…...

flex布局 flex-end为什么overflow无法滚动及解决方法

flex-end为什么overflow无法滚动及解决方法 在使用Flexbox布局时,我们经常使用justify-content和align-items属性来定位子元素。其中,align-items属性用于控制子元素在交叉轴上的位置,例如顶部对齐、底部对齐或居中对齐等。当我们将align-it…...

从ground_truth mask中获取图像的轮廓图

引言 在图像取证领域,主要分为检测和定位两个方面。检测就是判断一张图片是否为伪造图,定位与传统意义上的语义分割任务相近,就是定位伪造像素的区域。如果单纯使用语义分割网络训练,只能获得次优解,而像多任务学习那样…...

Java项目实战II基于微信小程序的旅游社交平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着移动互联网的迅猛发展,旅游已经成为人…...

开源即时通讯与闭源即时通讯该怎么选择,其优势是什么?

在选择即时通讯软件时,应根据企业的经营领域来选择适合自身需求的开源或闭源方案。不同领域对开源和闭源即时通讯的理念存在差异,因此总结两个点简要分析这两种选择,有助于做出更明智的决策。 一、开源与闭源的根本区别在于软件的源代码是否…...

【计算机网络】实验15:VLAN间通信的实现方法“单臂路由”

实验15 VLAN间通信的实现方法“单臂路由” 一、实验目的 加深对VLAN间通信的实现方法“单臂路由”的理解。 二、实验环境 Cisco Packet Tracer模拟器 三、实验过程 1.构建网络拓扑,并配置好主机的IP地址、子网掩码、默认网关,如图1,2所…...

数据库学习记录04

DDL【数据定义语言】 MySQL命名规则 数据库名不得超过30个字符,变量名限制为29个必须只能包含A-Z,a-z,0-9,_共63个字符不能在对象名的字符间留空格必须不能和用户定义的其他对象重名必须保证你的字段没有和保留字、数据库系统或常用方法冲突保持字段名和类型的一致…...

PDF文件打开之后不能打印,怎么解决?

正常的PDF文件是可以打印的,如果PDF文件打开之后发现文件不能打印,我们需要先查看一下自己的打印机是否能够正常运行,如果打印机是正常的,我们再查看一下,文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…...

A* 算法 是什么?

A*(A-star)算法是一种启发式搜索算法,用于在图或网格中找到从起点到目标的最短路径。它被广泛用于路径规划问题,例如导航、游戏开发中的角色移动,以及机器人路径规划。 1. A 算法的基本概念* A* 算法结合了两种经典搜…...

ORM框架详解:为什么不直接写SQL?

想象一下,你正在开发一个小型的在线书店应用。你需要存储书籍信息、用户数据和订单记录。作为一个初学者,你可能会想:“我已经学会了SQL,为什么还要使用ORM框架呢?直接写SQL语句不是更简单、更直接吗?” 如…...

厘米级高精度RTK手持终端北斗卫星定位手持pda

RTK是一种测量技术叫“载波相位差分技术”,是实时处理两个测量站载波相位观测量的差分方法,将基准站采集的载波相位发给用户接收机,进行求差解算坐标,以此得到高精度坐标。随着技术的不断革新,GPS接收机也由原来只能用…...

Kafka-Connect源码分析

一、上下文 《Kafka-Connect自带示例》中我们尝试了零配置启动producer和consumer去生产和消费数据,那么它内部是如何实现的呢?下面我们从源码来揭开它神秘的面纱。 二、入口类有哪些? 从启动脚本(connect-standalone.sh&#…...

【STM32 Modbus编程】-作为主设备读取保持/输入寄存器

作为主设备读取保持/输入寄存器 文章目录 作为主设备读取保持/输入寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备2、读保持寄存器2.1 主设备发送请求2.2 从设备响应请求2.3 主机接收数据3、读输入寄存器4、结果4.1 保持寄存器4.2 输入寄存器在前面的…...

Kubesphere上搭建redis集群

Kubesphere上搭建redis集群 版本:redis:6.2.3 1)挂载配置 redis.conf: cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-require-full-coverage no cluster-migration-barrier 1 appendonly yes …...

learn-(Uni-app)跨平台应用的框架

使用 Vue.js 开发所有前端应用的框架,开发者编写一份代码,可发布到iOS、Android、Web(包括微信小程序、百度小程序、支付宝小程序、字节跳动小程序、H5、App等)等多个平台。 跨平台:Uni-app 支持编译到iOS、Android、W…...

target_compile_definitions

这个接口给目标定义的宏,不能像C中定义的宏一样,尝试利用宏进行替换: cmake_minimum_required(VERSION 3.8) project(compile_definitions_pro)add_executable(main_exec src/main.cpp)set(SYSTEM_NAME "") if(CMAKE_SYSTEM_NAME S…...

浏览器同源策略、跨域、跨域请求,服务器处理没、跨域解决方案

目录 什么是同源策略什么是跨域发生跨域时,服务器有没有接到请求并处理响应:(两种情况) 如何解决跨域 什么是同源策略 概念: 同源策略是浏览器的一种安全机制,用于防止恶意网站对用户的敏感数据进行未经授…...

深入理解网络安全等级保护:保障信息安全的关键策略与实践

随着信息技术的飞速发展,网络安全问题日益凸显。为了应对这一挑战,网络安全等级保护制度应运而生,旨在确保不同等级的信息和信息系统的安全。本文将探讨网络安全等级保护的基本概念、重要性及其实践方法。 一、信息安全等级保护的基本概念 1…...

MySQL

InnoDB 引擎底层存储和缓存原理 到目前为止,MySQL 对于我们来说还是一个黑盒,我们只负责使用客户端发 送请求并等待服务器返回结果,表中的数据到底存到了哪里?以什么格式存放的? MySQL 是以什么方式来访问的这些数据&…...

新书速览|循序渐进Node.js企业级开发实践

《循序渐进Node.js企业级开发实践》 1 本书内容 《循序渐进Node.js企业级开发实践》结合作者多年一线开发实践,系统地介绍了Node.js技术栈及其在企业级开发中的应用。全书共分5部分,第1部分基础知识(第1~3章)&#xf…...

2024三掌柜赠书活动第三十五期:Redis 应用实例

目录 前言 Redis操作都会,却不知道怎么用? 关于《Redis 应用实例》 编辑推荐 内容简介 作者简介 图书目录 《Redis 应用实例》全书速览 拓展:Redis使用场景 实例1:缓存应用 场景描述 实现方法 具体代码示例 实例2&a…...

Android 第三方框架:RxJava:源码分析:观察者模式

文章目录 观察者模式RxJava中的观察者模式总结 ​​​​​​​​​​​​​​观察者模式​​​​​​​ RxJava中的观察者模式 以Observable、ObservableOnSubscribe、Observer为例 Observable是被观察者 负责发射事件或数据 Observer是观察器 负责对从被观察者中获取的数…...

开源模型应用落地-安全合规篇-用户输入价值观判断(四)

一、前言 在深度合规功能中,对用户输入内容的价值观判断具有重要意义。这一功能不仅仅是对信息合法性和合规性的简单审核,更是对信息背后隐含的伦理道德和社会责任的深刻洞察。通过对价值观的判断,系统能够识别可能引发不当影响或冲突的内容,从而为用户提供更安全、更和谐的…...

【js逆向专题】13.jsvmp补环境篇一

目录 一.了解jsvmp技术1. js虚拟机保护方案2.jsvmp实现原理3. 模拟jsvmp执行过程 二.环境检测1. 什么是环境检测2.案例讲解 三. 项目实战1. 案例11.逆向目标2. 项目分析1.补第一个referrer2. 调试技巧13. 调试技巧24. 补充sign5. 补 length6. 参数长短补充 3. 逆向结果 2. 案例…...

Java---每日小题

题目1-极大极小游戏 给你一个下标从 0 开始的整数数组 nums ,其长度是 2 的幂。 对 nums 执行下述算法: 设 n 等于 nums 的长度,如果 n 1 ,终止 算法过程。否则,创建 一个新的整数数组 newNums ,新数组长度…...

leetcode 23. 合并 K 个升序链表

给你一个链表数组,每个链表都已经按升序排列。 输入:lists [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [1->4->5,1->3->4,2->6 ] 将它们合并到一个有序链表中得到。 1->…...

Windows 小记 6 -- 为什么我的全局消息钩子卸载不掉?

Hook dll 在其消息循环中被卸载。强制它们进入消息循环有助于卸载它们。在 UnhookWindowsHookEx 之后添加此代码以强制唤醒所有消息循环: DWORD dwResult; SendMessageTimeout(HWND_BROADCAST, WM_NULL, 0, 0, SMTO_ABORTIFHUNG|SMTO_NOTIMEOUTIFNOTHUNG, 1000, &a…...

Python+onlyoffice 实现在线word编辑

onlyoffice部署 version: "3" services:onlyoffice:image: onlyoffice/documentserver:7.5.1container_name: onlyofficerestart: alwaysenvironment:- JWT_ENABLEDfalse#- USE_UNAUTHORIZED_STORAGEtrue#- ONLYOFFICE_HTTPS_HSTS_ENABLEDfalseports:- "8080:8…...

LC低通滤波器Bode图分析(传递函数零极点)

LC低通滤波器 我们使得L4.7uH,C220uF;电感L的阻抗为Xl;电容C的阻抗为Xc; 传递函数 H ( s ) u o u i X C X C X L 1 s C 1 s C s L 1 1 s 2 L C (其中 s j ω ) H(s)\frac{u_{o} }{u_{i} } \frac{…...

【机器学习】机器学习的基本分类-无监督学习(Unsupervised Learning)

无监督学习(Unsupervised Learning) 无监督学习是一种机器学习方法,主要用于没有标签的数据集。其目标是从数据中挖掘出潜在的结构和模式。常见的无监督学习任务包括 聚类、降维、密度估计 和 异常检测。 1. 无监督学习的核心目标 1.1 聚类…...

六、docker compose单机容器编排工具

六、docker compose单机容器编排工具 6.1 compose简介 Compose是一个用于定义和运行多容器Docker应用程序的工具。您可以使用Compose文件来配置应用程序的服务,然后使用单个命令从配置中创建并启动所有服务。compose的配置文件示例如下 compose的github网址&#…...

Python3 operator 模块

Python2.x 版本中,使用 cmp() 函数来比较两个列表、数字或字符串等的大小关系。 Python 3.X 的版本中已经没有 cmp() 函数,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象,包含的方法有: o…...

沪合共融 “汽”势如虹 | 昂辉科技参加合肥上海新能源汽车产业融合对接会

为积极响应制造业重点产业链高质量发展行动号召,促进合肥、上海两地新能源汽车产业链上下游企业融合对接、协同发展,共同打造长三角世界级新能源汽车产业集群,11月28日,合肥市工信局组织部分县区工信部门及全市30余户新能源汽车产…...

访问http网页强制跳转到了https的解决办法

目录 解决浏览器自动从 HTTP 重定向到 HTTPS 的问题问题原因:HSTS(HTTP Strict Transport Security)什么是 HSTS?HSTS 的工作原理 如何解决?1. 清除浏览器的 HSTS 信息在 Chrome 中清除 HSTS 信息:在 Firef…...

PDF处理的创新工具:福昕低代码平台尝鲜

在当今数字化时代,PDF文件的处理和管理变得越来越重要。福昕低代码平台是新发布的一款创新的工具,旨在简化PDF处理和管理的流程。通过这个平台,用户可以通过简单的拖拽界面上的按钮,轻松完成对Cloud API的调用工作流,而…...

EmoAva:首个大规模、高质量的文本到3D表情映射数据集。

2024-12-03,由哈尔滨工业大学(深圳)的计算机科学系联合澳门大学、新加坡南洋理工大学等机构创建了EmoAva数据集,这是首个大规模、高质量的文本到3D表情映射数据集,对于推动情感丰富的3D头像生成技术的发展具有重要意义…...

SpringMVC ——(1)

1.SpringMVC请求流程 1.1 SpringMVC请求处理流程分析 Spring MVC框架也是⼀个基于请求驱动的Web框架,并且使⽤了前端控制器模式(是⽤来提供⼀个集中的请求处理机制,所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计,再根据请求…...

测试工具LoadRunner Professional脚本编写-脚本设置

勾选扩展日志-全选 原因:在并发完成后,通过抽查关键用户日志的方式,检查参数化是否如预期一致,比如抽查用户1(仓库一,物品一),用户11(仓库二,物品一),用户100(仓库十,物品十) 设置忽略思考时间 原因:是否忽略思考时间,请求数可能会有几十倍的差距…...

运用蓝光三维扫描仪的艺术与科技的完美融合-石膏头像模型3D扫描真实复刻

石膏头像具有独特的魅力,每一处细节都彰显着艺术之美。无论是深邃的眼神,还是精致的轮廓,都让人陶醉其中。 随着雕塑形式的日渐丰富,越来越多的新材料和新的塑造手法被运用到雕塑创作中,蓝光三维扫描技术的应用&#…...

文本域设置高度 加上文字限制并show出来:

文本域设置高度 :rows"4" 加上文字限制并show出来&#xff1a; maxlength"30" show-word-limit 效果: <el-form-item label"产品备注" prop"remark"><el-input v-model"form.remark" type"textarea"…...

探索数据确权、隐私保护、安全共享等方面的挑战与解决方案

在数据确权、隐私保护、安全共享等方面&#xff0c;当前确实面临着诸多挑战&#xff0c;同时也存在一些有效的解决方案。以下是对这些方面的详细探讨&#xff1a; 一、数据确权 挑战 权属关系模糊&#xff1a;由于数据具有复杂性和隐蔽性等特点&#xff0c;使得数据的权属关…...

麒麟 V10(ky10.x86_64)无网环境下 openssl - 3.2.2 与 openssh - 9.8p1 升级【最全教程】

目录 背景 安装包下载 上传解压安装包 安装zlib 安装OpenSSL 安装OpenSSH 验证 背景 近期&#xff0c;项目上线已进入倒计时阶段&#xff0c;然而在至关重要的安全检查环节中&#xff0c;却惊现现有的 OpenSSH 存在一系列令人担忧的漏洞&#xff1a; OpenSSH 资源管理错…...

前端技术(23) : 聊天页面

来源: GPT生成之后微调 效果图 HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>聊天</t…...

ArcMap 处理河道坡度、计算污染区、三维爆炸功能

ArcMap 处理河道坡度、计算污染区、三维爆炸功能今天分析 一、计算河道方向坡度 1、折线转栅格 确定 2、提取河道高程值 确定后展示河流的高程值 3、计算坡向数据 确定后展示 4、计算坡度数据 确定后展示 二、计算上游集水区污染值 1、填挖处理 确定 2、计算流向 确定 3、计算…...

数据结构 (30)计算式查找法——哈希法

前言 数据结构中的计算式查找法&#xff0c;特别是哈希法&#xff08;又称散列法、杂凑法、关键字地址计算法&#xff09;&#xff0c;是一种高效的查找技术。 一、哈希法的基本概念 哈希法是通过一个哈希函数将关键字映射到哈希表中的某个位置&#xff0c;从而实现快速查找的技…...

电子商务人工智能指南 4/6 - 内容理解

介绍 81% 的零售业高管表示&#xff0c; AI 至少在其组织中发挥了中等至完全的作用。然而&#xff0c;78% 的受访零售业高管表示&#xff0c;很难跟上不断发展的 AI 格局。 近年来&#xff0c;电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…...

交易系统:线上交易系统流程详解

大家好&#xff0c;我是汤师爷~ 今天聊聊线上交易系统流程详解。 线上交易系统为新零售连锁商家提供一站式线上交易解决方案。其核心目标是&#xff0c;通过数字化手段扩大商家的服务范围&#xff0c;突破传统门店的地理限制。系统支持电商、O2O等多种业务形态&#xff0c;为…...

如何通过自学成长为一名后端开发工程师?

大家好&#xff0c;我是袁庭新。最近&#xff0c;有星友向我提出了一个很好的问题&#xff1a;如何通过自学成为一名后端开发工程师&#xff1f; 为了解答这个疑问&#xff0c;我特意制作了一个视频来详细分享我的看法和建议。 戳链接&#xff1a;如何通过自学成长为一名后端开…...

实际车辆行驶轨迹与预设路线偏离检测的Java实现

准备工作 本项目依赖于两个关键库&#xff1a;JTS Topology Suite&#xff08;简称JTS&#xff09;&#xff0c;用于几何对象创建和空间分析&#xff1b;以及GeoTools&#xff0c;用于处理坐标转换和其他地理信息任务。确保开发环境中已经包含了这两个库&#xff0c;并且正确配…...