·  阅读 生产环境https请求时间过长

我司项目在使用https的时候,有一阵突然APP非常卡,接口请求要几秒甚至十几秒。查询原因之后发现是https请求时间太长。但是只有iOS有问题,安卓是没有问题的。很奇怪,记录一下如何查询解决的。

ssl握手

http是建立在tcp上的连接,tcp需要三次握手,但是如果配置https,https是建立在ssl(tls)安全协议上的连接,需要ssl握手,请求时间过长经测试确实是ssl的问题。

ssl握手大概是这么个过程:

  • client hello ——> server 生成随机数1,算法套件等
  • server hello --> client 证书、随机数2,和client适合的算法套件等
  • client ——> server 公钥加密的随机数3
  • 同时两端都都生成了:对称秘钥 = 随机数1+2+3,因为随机数3不可能被截取,所以是安全的。
  • https 加密cipher引起

    一开始一个同事以为是加解密的方式问题导致的,然后修改了ssl_ciphers,结果还是不行,后来想想应该不太可能是这个原因。

    iOS 在线验证证书方式

    iOS的同事在看苹果请求的时候发现会去请求一个地址,那个地址见下图

    我们公司使用的那个证书的地址点了没有响应,所以就一直卡在握手环节好久。

    oscp stapling

    还有一种方式,服务器在TLS握手时发送事先缓存的OCSP响应,用户只需验证该响应的有效性而不用再向数字证书认证机构(CA)发送请求。

    文章开始说的安卓没问题,是因为Google不满意ocsp这个解决方案,所以所有google的产品,无论是android还是chrome都不进行ocsp检查。

    分类:
    后端
    标签: