请稍侯

Https(LetsEncrypt) 在iPhone上慢的问题

16 August 2020
更多

目前方案

		# ios https加速
		ssl_stapling on;
		ssl_stapling_verify on;
		resolver 8.8.8.8 8.8.4.4 1.1.1.1 valid=60s;
		resolver_timeout 2s;

参考资源:

  • https://www.jianshu.com/p/2fb12a80c33f
  • https://www.cnblogs.com/duanweishi/p/13321672.html
  • https://www.jianlove.com/ocsp-stapling-092.html

原因

域名ocsp.int-x3.letsencrypt.org在国内有DNS污染, 导致浏览器过长时间卡在OCSP检查上, 而不同浏览器对待OSCP机制的处理是不一样的, 比如在IE下最多连接2S, 超时则不处理, 在Chrome中可能都不会处理它, 这便导致了在不同浏览器下打开速度有差异.

关于OSCP是什么, 可以查看这篇文章你不在意的HTTPS证书吊销机制.

解决方案

开启 nginx 的 ssl_stapling

server {
  resolver 8.8.8.8;
  ssl_stapling on;
  ssl_stapling_verify on;
  ...
}

每一句都是必要的, 由于域名ocsp.int-x3.letsencrypt.org在国内有DNS污染, 所以修改 resolver 8.8.8.8就好.

如果不添加resolver 8.8.8.8则在nginx日志下会出现下面的错误 [error] 4966#4966: OCSP responder timed out (110: Operation timed out) while requesting certificate status, responder: ocsp.int-x3.letsencrypt.org, peer: 64.13.232.149:80, certificate: “/etc/nginx/key/yourdomain.com/fullchain.pem”

验证OCSP Response是否开启成功

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

如果开启成功会得到响应

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

失败会得到

OCSP response: no response sent

请多执行几次, nginx并不是马上就去获取OCSP Response, 而是当网站被访问之后异步获取, 所以可能前几次请求不会有OCSP Response.