起因
最初,社区的网页在iPhone的微信里面打开一直比较慢,一开始没在意,以为是服务器在香港的锅。突然有一天我在安卓手机上打开发现比iPhone上快得多,我就对比测试了好几次,都是如此。
初步的原因及解决办法
结合最近群里接连两三个群友说Let's Encrypt
被墙导致网页变慢的问题,就以为是Let's Encrypt
的锅。管理组就把Let's Encrypt
换成别的域名的证书,但是实际上我个人感觉iPhone没有多大变化。
发现了更多
又过了几天,iPhone打开确实让我受不了,我又gg了一下,发现下面文章。
https://my.oschina.net/swingcoder/blog/4277977
文内提到不仅仅是Let's Encrypt
被墙的问题,iOS平台还涉及对CA证书的有效性进行验证。一看这个验证就牵扯出了ssl
的ocsp stapling
。
眼尖的同学应该看到了,上图“西瓜头”群友提到了OCSP的问题,惭愧,因为当时不懂这个,以为只是let被墙的问题,所以就忽略了。
文内说:
ocsp stapling是什么,简单的讲,就是将原来由各个用户去发起验证证书有效性的请求,由webserver代劳了,这样就不用每个用户都去连CA的验证服务器了,相对来说访问速度就会加快不了。
好吧,在说得蛮有道理的,咱用在nginx上配置ocsp stapling
:
ssl_stapling on; ssl_stapling_verify on; resolver 233.5.5.5 233.6.6.6 8.8.8.8 4.4.4.4 202.96.134.133 valid=300s; resolver_timeout 2s; ssl_trusted_certificate /etc/letsencrypt/live/your.domain.com/fullchain.pem; ssl_session_cache shared:SSL:50m; ssl_session_timeout 180m;
配置好一测试,iPhone上打开社区真明显快了,完美。
完美落幕?
到这里,我也以为问题都解决了,但是仍然有一个疑问一直在我脑海里面挥之不去:
- 为什么Android没有这个问题?
今天,鬼使神差的,又配置一个网站的ssl,在研究的时候发现了霍炬
的一篇博文:
https://jhuo.ca/post/ocsp-stapling-letsencrypt/
Android没有问题的原因是,Google不满意ocsp这个解决方案,所以所有google的产品,无论是android还是chrome都不进行ocsp检查。
另外他还提到了:
一个Flutter写的app在iOS上偶尔会发生了界面卡顿甚至冻结10多秒,但在Android正常。
终于,这个问题到今天才真正完美解决了我的疑惑。
再总结一下:
1、使用国内的ssl证书,换掉Let’s Encrypt 证书,因为他使用akamai cdn分发ocsp状态,akamai.net基本被墙。
2、服务开启OCSP Stapling,因为能减少http请求次数,优化速度。
3、阿里云腾讯云都有国内的一年的免费证书。我使用的https://freessl.cn/,有亚信免费一年,推荐。
记录分享之。