python网站开发详细步骤,建筑网络图,wordpress rewrite插件,江苏住房城乡建设部部官方网站文章目录 Pre概述操作步骤1. 生成 CA 密钥对2. 生成自签名的 CA 证书3. 生成服务器密钥对和证书签名请求 (CSR)4. 使用 CA 签署服务器证书 Nginx Https 自签证书1. 生成自签名证书和私钥2. 配置 Nginx 使用 CA签发的 HTTPS 证书3. 重启 Nginx 服务4. 直接访问5. 不验证证书直接… 文章目录 Pre概述操作步骤1. 生成 CA 密钥对2. 生成自签名的 CA 证书3. 生成服务器密钥对和证书签名请求 (CSR)4. 使用 CA 签署服务器证书 Nginx Https 自签证书1. 生成自签名证书和私钥2. 配置 Nginx 使用 CA签发的 HTTPS 证书3. 重启 Nginx 服务4. 直接访问5. 不验证证书直接访问6. 使用ca.crt作为ca证书验证服务端使用ca根证书而非签发的server.crt 证书进行访问 7. 使用IP访问 Pre
PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证
PKI - 数字签名与数字证书 概述
使用 CA 签发证书的主要原因和作用如下 建立信任关系 使用 CA 签发的证书可以建立信任关系客户端可以信任由公认的 CA 颁发的证书从而确保与服务器之间的通信是安全可靠的。 保证身份验证 CA 对证书申请者进行身份验证并在验证通过后签发证书。这样服务器可以通过 CA 签发的证书来证明自己的身份确保客户端与合法的服务器进行通信防止中间人攻击。 保护通信数据 证书中包含了公钥可以用于加密通信数据。使用 CA 签发的证书可以保护通信数据的机密性防止数据被窃取或篡改。 提供数据完整性 证书中包含了数字签名可以用于验证通信数据的完整性。使用 CA 签发的证书可以确保通信数据在传输过程中没有被篡改。
总之使用 CA 签发证书可以确保通信的安全性、可靠性和完整性为网络通信提供了重要的保护和信任基础。 操作步骤
如下OpenSSL 命令用于生成自签名的 CACertificate Authority证书颁发机构证书以及服务器证书。 1. 生成 CA 密钥对
openssl genrsa -out ca.key 2048这个命令生成了一个 2048 位的 RSA 密钥对私钥保存在 ca.key 文件中。 2. 生成自签名的 CA 证书
openssl req -x509 -new -nodes -key ca.key -subj /CNartisan-ca.com -days 5000 -out ca.crt这个命令使用生成的 CA 密钥对生成了一个自签名的 CA 证书。 -x509 选项表示生成一个自签名的 X.509 证书 -subj 选项用于指定证书的主题信息 -days 选项用于指定证书的有效期 -out 选项用于指定输出的证书文件名。
查看生成的证书信息证明这是一个自签的CA证书 。 3. 生成服务器密钥对和证书签名请求 (CSR)
# 服务器的 RSA 密钥对
openssl genrsa -out server.key 2048# 证书签名请求 (CSR)
openssl req -new -key server.key -subj /CNartisan.com -out server.csr这两个命令分别生成了服务器的 RSA 密钥对和证书签名请求 (CSR)。
首先使用 genrsa 命令生成了服务器的私钥 server.key然后使用 req 命令生成了 CSR 文件 server.csr其中 -subj 选项用于指定证书的主题信息。 4. 使用 CA 签署服务器证书
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 5000这个命令使用之前生成的 CA 密钥对和证书 (ca.crt 和 ca.key) 对服务器的 CSR (server.csr) 进行签名生成了服务器的证书 server.crt。 -CA 选项用于指定签署证书的 CA 证书 -CAkey 选项用于指定 CA 的私钥 -CAcreateserial 选项用于生成一个序列号文件以跟踪已签署的证书 -out 选项用于指定输出的证书文件名。
通过这些 OpenSSL 命令就可以成功地生成了自签名的 CA 证书和服务器证书并使用 CA 对服务器证书进行了签名从而建立了一个简单的证书信任链。 Nginx Https 自签证书
创建和配置 Nginx 使用 HTTPS 自签名证书的步骤如下
1. 生成自签名证书和私钥 openssl genrsa -out server.key 2048 该命令生成一个 RSA 密钥对并将私钥保存到 server.key 文件中。参数 2048 指定了密钥长度为 2048 位。 openssl req -x509 -new -nodes -key server.key -subj /CNartisan.com -days 10000 -out server.crt 这个命令生成一个自签名的 X.509 证书。解释如下 -x509表示生成自签名证书。-new创建一个新的证书请求。-nodes不加密生成的私钥。-key server.key指定使用之前生成的私钥文件 server.key。-subj /CNyandun.com指定证书的主题Subject。在这里/CNyandun.com 表示通用名称Common Name为 yandun.com。-days 10000指定证书的有效期为 10000 天。-out server.crt将生成的证书保存到 server.crt 文件中。 openssl x509 -in server.crt -noout -text 该命令用于查看生成的证书的详细信息包括主题、颁发者、有效期等。解释如下 -in server.crt指定要查看的证书文件。-noout不打印证书内容到标准输出。-text以文本形式显示证书内容。
这些命令可以用来生成自签名的证书并查看证书的详细信息。 Issuer 和 Subject 是同一个机构 说明是自签证书。
CA TRUE 说明它是一个CA签发结构。 2. 配置 Nginx 使用 CA签发的 HTTPS 证书
编辑 Nginx 的配置文件通常位于 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default并确保以下配置项已经添加或更新 server {..........ss1 on;ss1_certificate /cert/server.crt;ss1_certificate_key /cert/server.key;# 暂不开启#ss1_client_certificate /cert/client.crt;#ssI_verify_client on;ss1_session_cache shared:ssL:1m;ss1_session_timeout 10m;ss1_ciphers HIGH:!aNULL:!MD5;ss1_prefer_server_ciphers on; ..........}每个指令的含义如下 ss1 on; 启用 SSL/TLS 加密。这表示流模块将使用 SSL/TLS 加密来保护与客户端的通信。 ss1_certificate /cert/server.crt; 指定用于 SSL/TLS 加密的服务器证书文件路径。在这里/cert/server.crt 是服务器证书的路径。 ss1_certificate_key /cert/server.key; 指定用于 SSL/TLS 加密的服务器私钥文件路径。在这里/cert/server.key 是服务器私钥的路径。 #ss1_client_certificate /cert/client.crt; 用于指定客户端证书的文件路径。这是可选的如果您希望服务器验证客户端的证书则取消注释并指定客户端证书的路径。 #ss1_verify_client on; 用于指定是否验证客户端证书。取消注释并设置为 on 可以启用客户端证书验证。 ss1_session_cache shared:ssL:1m; 指定用于缓存 SSL/TLS 会话的共享内存区域名称和大小。在这里会话缓存名称为 ssL大小为 1MB。 ss1_session_timeout 10m; 指定 SSL/TLS 会话的超时时间。在这里会话超时时间为 10 分钟。 ss1_ciphers HIGH:!aNULL:!MD5; 指定 SSL/TLS 加密算法的优先级和允许使用的加密套件。在这里使用了 HIGH 表示使用高强度加密算法同时禁用了一些不安全的加密套件如 NULL 和 MD5。 ss1_prefer_server_ciphers on; 指定是否优先使用服务器端提供的加密套件。设置为 on 表示优先使用服务器端提供的加密套件。
这些指令配置了 Nginx 流模块的 SSL/TLS 加密功能包括了服务器证书、私钥、会话缓存等参数。 3. 重启 Nginx 服务
完成配置后通过以下命令重启 Nginx 服务以使更改生效
sudo systemctl restart nginx现在Nginx 应该已经配置为使用自签名证书进行 HTTPS 加密通信。请确保防火墙已正确配置以允许流量通过 HTTPS 端口默认为 443。 4. 直接访问 我们可以看到 开启了Https以后直接使用http的方式访问是行不通的
curl: (60) Peers certificate issuer has been marked as not trusted by the user
More details here: http;//curl.haxx.se/docs/sslcerts.html 通过web访问 会弹出警告信息 5. 不验证证书直接访问
If youd like to turn off curls verification of the certificate, use
the -k (or --insecure) option.curl https://192.168.3.103 -k 可以通过在 curl 命令中添加 -k 或 --insecure 选项来关闭 curl 对证书的验证从而允许直接访问未经验证的 HTTPS 网站。这样做会绕过证书验证过程可能会存在安全风险因此建议仅在测试或特殊情况下使用。
可以使用的命令
curl https://192.168.3.103 -k这个命令将直接访问 https://192.168.3.103而不会验证服务器证书的有效性。
请注意使用 -k 选项会将连接置于不安全的状态因为它不验证服务器证书的真实性可能容易受到中间人攻击。因此在生产环境中应避免使用此选项以确保通信的安全性。 6. 使用ca.crt作为ca证书验证服务端 不能使用签发的server.crt 进行访问错误信息如下
curl https:/artisan.com --resolve --cacert /cert/server.crt
artisan.com:443:192.168.3.103
cur1: (60) Peers Certificate issuer is not recognized. cur1: (60) Peers Certificate issuer is not recognized.错误信息表明 curl 无法验证服务器证书的签发者。这通常是由于未将 CA 证书正确指定给 curl 所致。我们使用 --cacert 选项指定了服务器证书但似乎没有正确指定 CA 证书。
需要将 CA 证书正确指定给 curl以便 curl 可以使用它来验证服务器证书的签发者。以下是正确的命令
curl https://artisan.com --resolve artisan.com:443:192.168.3.103 --cacert /cert/ca.crt在这个命令中--cacert 选项被用来指定 CA 证书的路径这样 curl 就可以使用它来验证服务器证书的签发者。 使用ca根证书而非签发的server.crt 证书进行访问
curl https://artisan.com --resolve artisan.com:443:192.168.3.103 --cacert /cert/ca.crt如上命令OK 7. 使用IP访问 会报错如上信息 因为我们签发的证书的csr中使用的是域名 artisan.com
openssl req -new -key server.key -subj /CNartisan.com -out server.csr
这个错误通常意味着服务器证书中指定的域名与请求的域名不匹配。这可能是因为正在使用的证书是针对另一个域名签发的或者服务器配置不正确。
要解决这个问题您可以采取以下步骤 检查证书的域名 确保服务器证书是针对正在访问的域名签发的。可以使用以下命令检查证书中的主题信息 openssl x509 -in /cert/server.crt -noout -subject如果主题信息中的域名与正在访问的域名不匹配那么需要获取一个正确匹配的证书。 检查服务器配置 确保服务器配置正确将证书配置为与正在访问的域名匹配。检查服务器配置文件确保域名和证书的匹配性。 重新签发证书 如果服务器证书确实是针对错误的域名签发的需要重新签发一个正确匹配的证书。使用正确的域名生成证书签名请求 (CSR)并使用 CA 对其进行签名。 更新 DNS 记录 如果更改了服务器证书针对的域名确保更新 DNS 记录以便域名解析到正确的服务器 IP 地址。 检查证书链 确保服务器证书的颁发机构是信任的并且证书链是完整的。您可以使用以下命令检查证书链的完整性 openssl s_client -connect artisan.com:443 -showcerts如果证书链不完整或不信任需要安装完整的证书链或信任颁发机构的根证书。
解决办法将证书信息追加到
/etc/pki/t1s/certs/ca-bunde.crt