HTTPS对网站性能和SEO有影响吗?

2020-11-29

    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毫秒。







沪ICP备12017671号-1 沪公网安备 31011702001625号  版权所有 © 上海开杰信息技术有限公司