Let’s Encrypt 证书在苹果iOS系统Safari上请求COSP太慢的原因和解决方法

admin 2020-10-24 AM 997℃ 0条

起因

最近优化移动站,发现在手机上打开巨慢,第一反应是服务器的问题,查了没问题,接着查后端,数据库,甚至是模板,都没有结果,后来排除了前几样之后,建个空白文件访问都巨慢。一时摸不着头脑!

定位问题

然后实在没有思路了,就抓包一下访问请求,发现是HTTPS的问题,请求一个ocsp.int-x3.letsencrypt.org会非常的慢,然后就是超时,服务器上ping也是超时,问题基本上就差不多定位到这个上了。

这个问题的产生是因为这个域名使用了CDN,CDN解析的CNAME节点被污染了,造成国内无法请求到(原因就不多说了,谣传是某数字公司造成的)。

OCSP是干嘛的

这玩意干嘛的其实自行百度一下就知道了,我只粗略的说一下,这个是域名证书的有效期检查和状态检查,比如到期了,或者证书吊销了,这个在IE下只请求2s后就抛弃,Chrome压根不请求这玩意,Safari比较另类,持续性请求。

解决问题

这个问题解决起来搜遍了全网,无非就两个解决方案

第一个,服务器内hosts一个可请求到ocsp.int-x3.letsencrypt.org这个域名的IP,但这个域名采用的是CDN,怕是CDN分配的IP存活期也不会太长,经常换也是麻烦

第二个方案也就是我正在使用也推荐的方案,使用谷歌DNS来进行请求,方案如下:

以NGINX为例,在站点配置文件证书配置的部分里,增加:

# 启用OCSP stapling
ssl_stapling on;
# 启用OCSP响应验证,OCSP信息响应适用的证书
ssl_stapling_verify on;
#CA根证书路径 如果ssl_certificate证书是完整的证书链,此项可以不设置
ssl_trusted_certificate /usr/local/nginx/ssl_cert/ca.crt;
# valid表示缓存300秒,resolver_timeout表示网络超时时间
resolver  8.8.8.8 8.8.4.4  valid=300s;
resolver_timeout  2s;

为了更可靠,你也可以人工负责更新文件内容,设定Nginx直接从文件获取OCSP响应而无需从服务商拉取。

# 启用OCSP stapling
ssl_stapling on;
ssl_stapling_file /usr/local/nginx/oscp/stapling_file.ocsp;            
# 启用OCSP响应验证,OCSP信息响应适用的证书   
ssl_stapling_verify on;  
ssl_trusted_certificate /usr/local/nginx/ssl_cert/ca.crt;

四者缺一不可,然后重启nginx

接着再执行

openssl s_client  -connect yourdomain.com:443  -servername yourdomain.com  -status  -tlsextdebug  <  /dev/null  2>&1  |  grep  -i  "OCSP response"

进行检查是否生效

生效会提示:

OCSP response:
OCSP Response Data:
    OCSP Response Status:  successful  (0x0)
    Response Type:  Basic OCSP Response

失败会提示:

OCSP response:  no response sent

这样就解决了COSP引起的在苹果手机里访问太慢的问题了

标签: none

非特殊说明,本博所有文章均为博主原创。

评论啦~