最近在自己测试自己部署的 https(Let’s encrypt 免费证书),发现请求很慢,有10多秒甚至20秒的延迟。
而请求 http 很快,改 ios 的 DNS 也没用。Android 和 Windows 上都没有这个现象。
因为LE证书的吊销状态检查域名(ocsp.int-x3.letsencrypt.org
以及相关CName或Alias)在大陆受到劫持引起。苹果系统的浏览器打开SSL网站时将对证书的状态进行验证,当在验证证书状态时,请求了被劫持的Let’s Encrypt证书状态检查(OCSP)的服务器,而该服务器为不可使用状态或有很长延时,从而导致打开网站延时。
由于证书状态检查由苹果的浏览器(UIWebView, WKWebView、Safari)发起,而Chrome在访问SSL网站时并不进行这一项检查,所以大部分用户在Chrome中访问正常,只有在苹果系统中访问出现延时。
换证书
在服务器上配置OCSP(SSL Stapling)功能(OCSP是用于在线查询证书吊销情况的服务),然后强制让浏览器使用服务器提供的OCSP状态,而不是由浏览器去检查。目前Apache2.4和Nginx1.6以上的系统均支持该项配置。
第一步:修改服务器的hosts文件,解析正确的 ocsp.int-x3.letsencrypt.org
域名IP
修改服务器的hosts文件,把 Let’s Encrypt 的OCSP服务器进行正确的解析。目前 ocsp.int-x3.letsencrypt.org 正常的服务器IP有:
23.44.51.8 (美国)
23.44.51.27 (美国)
104.109.129.57 (英国)
104.109.129.11 (英国)
175.45.42.209 (香港)
175.45.42.218 (香港)
223.119.50.201(香港)
223.119.50.203(香港)
23.32.3.72(东京)
我试了下,175.45.42.21
最快,也没有丢包。
可以在hosts文件中加入:
175.45.42.218 ocsp.int-x3.letsencrypt.org
保存即可!
附:hosts文件路径:
C:\windows\system32\drivers\etc\hosts
/etc/hosts
在 /jffs/ 目录下创建一个名为 dnsmasq.conf.add
的文件
vi /jffs/dnsmasq.conf.add\
加入内容 addn-hosts=/jffs/configs/hosts
并且保存
进入 /jffs/configs
,创建一个名为 hosts 的文件
vi /jffs/configs/hosts
在该文件中加入自定义域名解析,比如 175.45.42.218 ocsp.int-x3.letsencrypt.org
,并且保存
第二步:在Apache和Nginx中启用 OCSP 功能
apache
修改全局SSL配置(注意部分服务器要求这两项配置的路径在同一目录):
SSLSessionCache "shmcb:conf/ssl_scache(512000)"
SSLStaplingCache "shmcb:conf/ssl_stapling(512000)"
SSLUseStapling On
nginx
修改SSL配置:
ssl_stapling on;
ssl_stapling_verify on;
第三步:重启 apache 或 nginx 即可!
最后可以用 https://www.getssl.cn/ocsp 来检测是否生效,如下图
参考
https://easy.zhetao.com/easy-https-lets-encrypt-content-233?_verip_csrf_token_name=null