前言
期初是由于在ios
系统出现https
连接ssl
握手时间过长
经过调查有网友说是ssl中间证书缺失
时间长 和 中间证书缺失 这两点是否存在关联目前还有待考证
不过目前发现
Nginx
配 Let's Encrypt
证书的确存在中间证书缺失问题
本文介绍如何解决这一问题
这里证书用的是 Let's Encrypt
通配符证书
服务端 Nginx 1.16.0
调查
首先检查 是否存在这一问题
检测地址: www.myssl.cn/tools/check…
检测结果:
Nginx相关配置:
-
server {
-
listen 443 ssl http2 default_server;
-
server_name zzzmh.cn;
-
ssl_certificate /root/ssl/fullchain.pem;
-
ssl_certificate_key /root/ssl/privkey.pem;
-
ssl_trusted_certificate /root/ssl/chain.pem;
-
...
-
}
关键问题是在 fullchain.pem
根据调查 Nginx
不像是 Apache
有专门的参数配置中间证书
Nginx
需要全部配置在 fullchain.pem
中
顾正确的格式是分为三段 分别代表 服务器层 中间层 root层
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
而实际上一般 Let's Encrypt
生成的证书
fullchain.pem
默认都是两段
-
-----BEGIN CERTIFICATE-----
-
...
-
-----END CERTIFICATE-----
-
-----BEGIN CERTIFICATE-----
-
...
-
-----END CERTIFICATE-----
解决
其实具体缺失中间证书是不是一个问题, 有什么后果,都尚未可知。 只是抱着能解决就解决的心态去调查解决的。
首先先找到
Let's Encrypt
生成出证书的4个文件
cert.pem
chain.pem
fullchain.pem
privkey.pem
将 cert.pem
内容复制到这个地址解析
www.myssl.cn/tools/downl…
解析成功可以获得2个下载按钮
使用 [点击下载中间证书文件]
将下载到的文件中的 内容
复制到
fullchain.pem
的 两段内容的中间
,保存即可。
(需要注意 fullchain.pem
格式要求极为严格 不能存在空行 空格等)
最后重启nginx 问题解决
# 测试配置是否正常
nginx -t
# 重新加载配置文件
nginx -s reload
再次去到一开始检测的网址 检测结果: