HTTPS在保护用户隐私和防止流量劫持方面起着非常重要的作用,但同时,HTTPS降低了用户访问速度,增加了web服务器上计算资源的消耗。
本文主要讨论https对用户体验的影响。
这篇文章首次在百度运维部门的官方博客上发表。
2HTTPS对访问速度的影响
在介绍速度优化策略之前,我们先看一下HTTPS如何影响速度。影响主要来自两个方面。
1.协议交互添加的网络路由时间(RTT)。
2.解密相关的计算需要很长时间。
下面另外介绍一下。
2.1增加网络时间
HTTP和HTTPS都需要DNS检查,大多数情况下使用DNS高速缓存,因此忽略默认域名的DNS检查时间以强调对比度。
当用户使用HTTP协议访问或时,以下网络交互可能需要很长时间:
用户只需完成TCP三次握手,建立TCP连接,就可以直接发送HTTP请求以获取应用层数据,表明访问过程中不需要消耗计算资源。
接下来,HTTPS访问过程比HTTP复杂得多。在某些方案中,使用HTTPS访问可能会添加7个RTT。下图:
HTTPS第一次请求所需的网络时间解释如下:
1.使用三次握手建立TCP连接。需要RTT。
2.使用HTTP启动GET请求时,服务器端返回302跳,需要RTT和302跳延迟。
a)在大多数情况下,用户不会手动输入以访问https,服务器端只能返回302,强制浏览器转到HTTPS。
b)浏览器处理302跳跃也需要很长时间。
3.使用三次握手重新建立TCP连接。需要RTT。
A)302跳跃到HTTPS服务器后,由于端口和服务器不同,必须再次完成三次握手并建立TCP连接。
4.TLS完全握手步骤1。需要至少一个RTT。
a)此阶段主要是完成加密工具包协商和证书认证。
b)服务器端和浏览器协商相同的密钥交换算法、对称加密算法、内容一致性验证算法、证书签名算法和椭圆曲线(非ECC算法不需要)。
c)浏览器收到证书后,必须确认证书的有效性(例如是否过期、是否已撤销)。
5.检查CA站点的DNS。需要RTT。
a)浏览器收到证书后,可能需要启动OCSP或CRL请求来查询证书状态。b)浏览器首先从证书中获取CA域名。
c)如果没有命中缓存,浏览器必须确定CA域名的DNS。
6.使用三次握手建立到CA站点的TCP连接。需要RTT。
a)如果DNS被确定为IP,则必须完成三次握手以建立TCP连接。
7.启动OCSP请求以获取响应。需要RTT。
8.需要完整握手步骤2、RTT和计算时间。
a)整个握手阶段2主要是密钥协商。
9.完整握手结束后,在浏览器和服务器之间进行应用层(即HTTP)数据传输。
当然,不是每个请求必须添加7个RTT才能完成HTTPS第一个请求交互。只有低于0.01%的请求才能通过上述步骤,并且必须满足以下条件:
1.必须是第一个请求。这是建立TCP连接后发出的第一个请求。对该连接的后续请求不再需要此行为。
2.必须发生全体握手,正常情况下,80%的请求可以进行简化的握手。
3.浏览器必须打开OCSP或CRL功能。默认情况下,Chrome关闭ocsp功能,默认情况下打开Firefox和IE。
4.浏览器未命中OCSP缓存。Ocsp的典型更新周期为7天,Firefox的查询周期也为7天。也就是说,ocsp中的查询在7天内只发生一次。
5.浏览器未命中CA站点的DNS缓存。仅当DNS缓存未命中时,才会检查CA的DNS。
2.2增加计算时间
上一节简要介绍了HTTPS关键路径需要消耗的纯网络时间。不包括占用大量CPU资源的计算时间。实际上,计算时间也不少(超过30毫秒)。分别从浏览器和服务器的角度进行了说明。
1、浏览器计算需要很长时间
a)验证RSA证书签名,浏览器必须解密签名并计算证书散列值。如果有多个证书链,浏览器必须验证多个证书。
b)在RSA密钥交换中,必须使用证书公钥加密premaster。虽然不需要太多时间,但如果手机性能下降,可能需要1毫秒的时间。
C)ECC关键点交换需要公共关键点来计算椭圆曲线。
D)ECC密钥交换要求使用证书公钥解密服务器发送的ECC公钥。
E)ECC密钥交换要求根据服务器端公钥计算主密钥。
f)应用层数据对称加密和解密。
g)应用层数据一致性检查。
2、服务器端计算时间
a)在RSA密钥交换中,必须使用证书私钥解密premaster。这个过程很消耗性能。b)在ECC密钥交换中,需要计算椭圆曲线的公共密钥。
C)ECC密钥交换要求使用证书私钥加密ECC的公钥。
D)ECC密钥交换要求根据浏览器公钥计算共享主密钥。
e)应用层数据对称加密和解密。
f)应用程序层数据一致性验证。
客户端有很多CPU和操作系统类型,因此计算时间长不能一概而论。手机方面的HTTPS计算比较了消费性能,简单计算增加的延迟至少为50毫秒以上。PC侧也至少增加10毫秒以上的计算延迟。
服务器的性能通常比较强,但RSA证书私钥的长度比客户端长得多,因此服务器端的计算延迟也大于5毫秒。
上一篇:公司为什么建设网站?
下一篇:网站建设中如何增加界面的信任体验