我司项目在使用https的时候,有一阵突然APP非常卡,接口请求要几秒甚至十几秒。查询原因之后发现是https请求时间太长。但是只有iOS有问题,安卓是没有问题的。很奇怪,记录一下如何查询解决的。
ssl握手
http是建立在tcp上的连接,tcp需要三次握手,但是如果配置https,https是建立在ssl(tls)安全协议上的连接,需要ssl握手,请求时间过长经测试确实是ssl的问题。
ssl握手大概是这么个过程:
https 加密cipher引起
一开始一个同事以为是加解密的方式问题导致的,然后修改了ssl_ciphers,结果还是不行,后来想想应该不太可能是这个原因。
iOS 在线验证证书方式
iOS的同事在看苹果请求的时候发现会去请求一个地址,那个地址见下图
我们公司使用的那个证书的地址点了没有响应,所以就一直卡在握手环节好久。
oscp stapling
还有一种方式,服务器在TLS握手时发送事先缓存的OCSP响应,用户只需验证该响应的有效性而不用再向数字证书认证机构(CA)发送请求。
文章开始说的安卓没问题,是因为Google不满意ocsp这个解决方案,所以所有google的产品,无论是android还是chrome都不进行ocsp检查。