证书链合并

本文介绍如何正确配置SSL证书链以确保浏览器信任服务器证书。包括根证书、中间证书及服务器证书的组合方式,以及如何合并.crt与.cer文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

  浏览器报错的证书链的问题,我们一般会有三种证书: RootCA.crt(rCA,被信任的根证书)、IntermediateCA.crt(mCA,某些厂商有多个中间证书)、server.crt(sCA,通过CSR签下来的证书),某些厂商的rCA和mCA是需要用户自己下载的。为了让浏览器能够信任我们的证书,我们需要配置一条完整的证书链,证书链由sCA和mCA构成就好,rCA是浏览器内置,不需要服务器给提供。nginx配置证书链的时候,就是指定一个证书文件,这个文件中含有我们整个证书链的所有证书就好,证书合并的时候,正确的合并方法是把 mCA 合并到 sCA 中。当有多个 mCA 文件时,mCA 从下级到上级(根证书为最上级)依次合并到 sCA 中。在这个过程中,rCA 被视为多余的文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
# Combined Certificates

-----BEGIN CERTIFICATE-----
...... sCA ......
------END CERTIFICATE------

-----BEGIN CERTIFICATE-----
...... mCA (lower) ......
------END CERTIFICATE------

-----BEGIN CERTIFICATE-----
...... mCA (upper) ......
------END CERTIFICATE------

 

证书链的问题解决后,基本应该就可以正常工作了。

 

.crt服务器证书文件直接通过记事本打开,.cer中级证书也直接通过记事本打开,然后按照如上规则,将两个文件合并(服务器证书内容在最上面,中级证书内容在下面),最后直接使用合并后的文件即可,这样就不会再报中级证书(证书链)的问题了。

注:实际上.crt跟.cer证书文件内容一样,只是扩展名不同而已。

注:服务器证书包含.crt和.key文件

 

在 Nginx 中配置 SSL 证书链是确保 HTTPS 连接完整性和安全性的重要步骤。当服务器配置了中间证书时,必须将完整的证书链(包括服务器证书、中间证书和根证书)正确加载,以避免客户端在验证证书链时出现错误,如“证书不受信任”或“证书链不完整”。 ### 3.1 配置 SSL 证书链的结构 在配置文件中,需要使用 `ssl_certificate` 指令指定服务器证书和中间证书合并后的文件。通常,该文件是将服务器证书(`.crt` 或 `.pem`)与中间证书(CA 提供的中间链证书)拼接而成的。例如: ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.fullchain.pem; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ... } ``` 其中,`example.com.fullchain.pem` 文件的内容由服务器证书和中间证书组成,顺序如下: ``` -----BEGIN CERTIFICATE----- # 服务器证书(Server Certificate) -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- # 中间证书(Intermediate CA Certificate) -----END CERTIFICATE----- ``` 这样配置后,Nginx 会将完整的证书链发送给客户端,确保浏览器可以正确验证整个证书路径[^2]。 ### 3.2 使用 `ssl_trusted_certificate` 指定信任链 如果需要 Nginx 在验证客户端证书时使用特定的 CA 证书,可以使用 `ssl_trusted_certificate` 指令指定信任的根证书或中间证书文件。该文件应包含所有信任的 CA 证书,并以 PEM 格式存储: ```nginx ssl_trusted_certificate /etc/nginx/ssl/trusted-ca.crt; ``` 该配置项在启用客户端证书认证(Mutual TLS)时尤为重要,用于确保客户端证书由受信任的 CA 签发[^2]。 ### 3.3 完整的 SSL 配置示例 以下是一个典型的 Nginx SSL 配置示例,包含完整的证书链、加密套件和协议版本设置: ```nginx server { listen 443 ssl; server_name example.com; ssl_certificate /etc/nginx/ssl/example.com.fullchain.pem; ssl_certificate_key /etc/nginx/ssl/example.com.key; ssl_trusted_certificate /etc/nginx/ssl/trusted-ca.crt; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; location / { ... } } ``` 此配置确保了证书链的完整性、安全的加密协议和套件,并启用了 HSTS(HTTP Strict Transport Security)以增强安全性。 ### 3.4 证书链验证与调试 在部署前,应使用 `openssl` 命令验证证书链是否完整: ```bash openssl verify -CAfile /etc/nginx/ssl/trusted-ca.crt -untrusted /etc/nginx/ssl/example.com.fullchain.pem /etc/nginx/ssl/example.com.crt ``` 若输出为 `example.com.crt: OK`,则表示证书链验证通过。 此外,可以使用 `openssl s_client` 命令连接服务器并查看返回的证书链: ```bash openssl s_client -connect example.com:443 -showcerts ``` 这有助于确认客户端是否接收到完整的证书链,并识别配置错误或缺失的中间证书。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值