Let's Encrypt证书 iOS 慢
我一直使用 acmetool 来给域名进行签证,
这个工具确实方便配好后只要一条命令就可以搞定签证
acmetool want test.huabot.com
正常情况下是没有问题的。
我们有一个应用叫 小螃蟹(AppStore 可以搜这个名字下载),经常会出现网络请求很慢的情况。
我们在 nginx 输出的日志添加内部请求处理时间。
log_format upstreaminfo
'$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" "$http_user_agent" '
'$request_length $request_time [] [] $upstream_addr '
'$upstream_response_length $upstream_response_time $upstream_status -'
通过日志我们知道服务器处理了 小螃蟹应用 首页请求总共 80 ms
左右。
但是小螃蟹应用上却等待了很久,超过了 5 s
。
这种情况只有在 iOS
上出现,用一段时间后又恢复正常。
我们怀疑是 DNS 解析的问题,把路由器的DNS 改为 114.114.114.114
, 并没有解决问题。
我们猜测是应用性能的问题,经过分析 iOS CPU 使用率很低,性能不是问题。
我们 DEBUG
iOS HTTP 请求库,发现 https 请求会停顿很久,而 http 马上就完成。
我们猜测可能证书有问题,然后在阿里云上买了个免费的证书,应用的速度恢复正常。
经过几周的运行测试,访问速度基本恢复正常,由此可以断定 acmetool
生成的证书iOS上有问题。
具体原因如下:
最近大陆用户反应Let's Encrypt证书的网站在苹果系统打开很慢,Safari,IOS SSL引起的超过20秒左右的延时。
经过验证,主要原因为LE证书的吊销状态检查域名(ocsp.int-x3.letsencrypt.org以及相关CName或Alias)在大陆受到劫持引起。苹果系统的浏览器打开SSL网站时将对证书的状态进行验证,当在验证证书状态时,请求了被劫持的Let's Encrypt证书状态检查(OCSP)的服务器,而该服务器为不可使用状态或有很长延时,从而导致打开网站延时。
由于证书状态检查由苹果的浏览器(UIWebView, WKWebView、Safari)发起,而Chrome在访问SSL网站时并不进行这一项检查,所以大部分用户在Chrome中访问正常,只有在苹果系统中访问出现延时。
参考:https://easy.zhetao.com/easy-https-lets-encrypt-content-233