不看磨磨唧唧的直接看解决方案
建立了几个web服务器后,用了几年,不管是国内还是国外服务器都发现有https初次访问较慢,但是之后再次打开就很快,有人说是初次打开后已经有缓存了,所以之后进很快,但是本人又发现进入网站后打开网站内其他页面或者链接很快,所以感觉不是缓存的问题。
经过多次仔细观察发现,浏览器初次打开网站时等待的5-6秒并没有加载网页,反而像解析ip寻找地址似的。后来我发现用ip直接访问的确特别快,而用域名就很慢打开,一度怀疑是域名解析太慢的问题,后来想想不可能,然后又发现用http访问也很快,所以直接否定了DNS解析的问题。
经过多番查找网上的解决办法,发现部分网友也有这种问题,主要原因是,https建立链接时应该加上SSL握手时间。而这个时间就是打开网页之前等待的空白时间,但是也太长了吧5-6秒甚至8-10秒,网上的解决方案是做OCSP优化。基本思路就是业界比较主流的解决办法是OCSP Stapling,即服务器可事先模拟浏览器对证书链进行验证,并将带有CA机构签名的OCSP响应保存到本地,省去浏览器的在线验证过程。
在线校验
此方式需要支持服务器能够主动访问证书校验服务器才能生效,并且在每次重启nginx的时候会主动请求一次,如果网络不通会导致nginx启动缓慢。
server {
listen 443 ssl;
server_name xx.xx.com;
index index.html index.htm index.jsp;
ssl_certificate server.pem;#证书的.cer文件路径
ssl_certificate_key server-key.pem;#证书的.key文件
# 开启 OCSP Stapling ---当客户端访问时 NginX 将去指定的证书中查找 OCSP 服务的地址,
获得响应内容后通过证书链下发给客户端。
ssl_stapling on;
ssl_stapling_verify on;# 启用OCSP响应验证,OCSP信息响应适用的证书
ssl_trusted_certificate /path/to/xxx.pem;#若 ssl_certificate 指令指定了完整的证书链,则 ssl_trusted_certificate 可省略。
resolver 8.8.8.8 8.8.4.4 216.146.35.35 216.146.36.36 valid=60s;#添加resolver解析OSCP响应服务器的主机名,valid表示缓存。
resolver_timeout 2s;# resolver_timeout表示网络超时时间
人工更新
为了缓存的更新时间更可加控,你也可以人工负责更新文件内容。利用 NginX 的 ssl_stapling_file
指令直接将 OCSP 响应存成文件,NginX 从文件获取OCSP响应而无需从服务商拉取,将其随证书下发而不实时查询。
server {
listen 443 ssl;
server_name xx.xx.com;
index index.html index.htm index.jsp;
ssl_certificate server.pem;#证书的.cer文件路径
ssl_certificate_key server-key.pem;#证书的.key文件
# 开启 OCSP Stapling ---当客户端访问时 NginX 将去指定的证书中查找 OCSP 服务的地址,
获得响应内容后通过证书链下发给客户端。
ssl_stapling on;
ssl_stapling_file /xxx/xxx/stapling_file.ocsp;
ssl_stapling_verify on;# 启用OCSP响应验证,OCSP信息响应适用的证书
ssl_trusted_certificate /path/to/xxx.pem;#若 ssl_certificate 指令指定了完整的证书链,则 ssl_trusted_certificate 可省略。
主要内容来了
但是经过再次多方验证,发现一个共性,基本上访问慢的是用了免费的证书导致的,而且是使用Let's Encrypt的证书。
然后网上的确查到了是Let's Encrypt的证书服务器dns被污染(被墙)导致的,ssl验证时间过长,直接导致网站初次打开很慢。本站也测试的确Let's Encrypt的证书服务器ping超时。
测试 Let's Encrypt 的 OSCP 域名: ocsp.int-x3.letsencrypt.org
就算是做了OCSP Stapling依旧是不能解决本质问题(不过有一定的效果)
所以还是建议大家换成国内的证书吧,可以免费可以付费。免费的很多,低价付费的也有,看各位的消费能力了。
现本站使用的是 阿里云免费的证书 (Symantec),可以免费申请到,但只能单域名(www与根域名可以共用一个),不过可以多次申请多个二级域名证书。一个证书有效期一年。阿里有详细的帮助文档,指导安装各平台证书方案。详细点击查看
之后问题得到了根本的解决,各个平台浏览器的主流流量器都能秒开了。