HTTPS对网站优化影响的好与坏?

  如今百度已全站开启了HTTPS安全加密搜索,那么,我们该如何看待百度全站采用HTTPS加密搜索呢?

  如今,越来越多的网站和服务开始启动加密,HTTPS加密Web流量占到总流量的一半,其中YouTube这样的流媒体网站首次有50%的流量是经过HTTPS,这一切证明了Web的完整加密是可行的。

  百度自2014年底起,开始对部分地区开放了HTTPS加密搜索服务,如今百度已全站开启了HTTPS安全加密搜索,那么,我们该如何看待百度全站采用HTTPS加密搜索呢?

  HTTPS在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS也会降低用户访问速度,增加网站服务器的计算资源消耗。

  百度在工程开发上几乎不做没有性价比的事情,所以我们先看看https这个事情在技术上的投入在哪里?

  一、百度启用了HTTPS加密搜索

  从2014年底开始,百度在部分地区开始对其搜索启用了HTTPS加密(VeriSign签发的证书),百度HTTPS相关负责人指出,此举致力于为用户提供一个安全可靠的网络环境(具体可查看吕杭泽《详解HTTP与HTTPS的10大区别与不同》一文的相关介绍)。

  当你网购的时候,你输入银行信息后按继续,在与银行网站对接的过程中,你的付款信息在网络传输过程中,是被加密的,这是为了确保使客户与服务器应用之间的通信不被攻击者窃听。

  二、在性能方面的影响

  1、网络耗时变长,用户从http跳转到https还要一点时间。

  2、机器性能,https要多做一次RSA校验。

  3、CDN,全国所有节点要支持https才行,另外,如果面对DDOS,https的解决方案也会复杂得多。

  三、对周边系统的影响

  1、页面里所有嵌入的资源都要改成https的,这些资源可能会来自不同的部门甚至不同的公司,包括:图片、js、form表单等等,否则浏览器就会报警。

  2、手机百度这类使用了百度搜索服务的客户端产品,也可能要修改。

  3、解决第三方网站看不到refer的问题。

  4、所有的开发、测试环境都要做https的升级。

  还有,上线前肯定是一大堆预案,保证切换过程顺畅,所以说下来,https这个事情的投入真心很大,不是说换就换的。

  好了,那么我们用HTTPS,能带来什么好处呢?吕杭泽认为,就是用户的搜索安全,至于原因可能有以下几点:

  1、被运营商强插广告,甚至在正常结果前面插一条广告。

  2、有的时候劫持代码还会写错,导致用户访问白屏或者报错。

  3、手机上被浏览器或者什么卫士篡改或者劫持。

  4、最恶心的是泄露用户数据,经常在网上看到说:“我用百度搜了一个黄金,马上就有人联系我了”“我在百度上搜了一种病,马上医院就来电话了”。

  5、另外,对百度的收入也有影响、有不少公共wifi自动会自动给百度搜索加一个联盟的计费id。

  其实在搜索HTTPS很久之前,百度就做了搜索结果url加密,我想应该是基于类似的考虑。

  很多互联网公司在做大的时候都会遇到这个问题:https成本高,速度又慢,规模小的时候在涉及到登录和交易用上就够了,做大以后遇到信息泄露和劫持,想整体换,代价又很高。

  四、HTTPS对访问速度的影响

  在介绍速度优化策略之前,先来看下HTTPS对速度有什么影响,在笔者看来,其影响主要来自两方面:

  ①、协议交互所增加的网络RTT(round trip time)。

  ②、加解密相关的计算耗时。

  卡内基梅隆大学、西班牙电信和都灵理工大学的研究人员在ACM CoNEXT上发表了一篇论文(PDF),量化了网站从HTTP切换到HTTPS所付出的代价。

  研究人员分析了启用加密对延迟、消耗数据和客户端电池寿命的影响,他们发现,HTTPS的“S”会使得页面加载时间增加了50%,增加10%到20%的耗电,此外,HTTPS还会影响缓存增加数据开销和功耗,以及父母控制和病毒扫描等也会受到影响。

  下面笔者分别跟大家介绍一下:

  1、网络耗时增加

  由于HTTP和HTTPS都需要DNS解析,并且大部分情况下使用了DNS缓存,为了突出对比效果,忽略主域名的DNS解析时间。

  用户使用HTTP协议访问http://www.kkdshu.com(或者www.kkdshu.com)时会有如下网络上的交互耗时:

  可见,用户只需要完成TCP三次握手建立TCP连接就能够直接发送HTTP请求获取应用层数据,此外在整个访问过程中也没有需要消耗计算资源的地方。

  接下来看HTTPS的访问过程,相比HTTP要复杂很多,在部分场景下,使用HTTPS访问有可能增加7个RTT,如下图:

  HTTPS首次请求需要的网络耗时解释如下:

  ①、三次握手建立TCP连接,耗时一个RTT。

  ②、使用HTTP发起GET请求,服务端返回302跳转到https://www.kkdshu.com,需要一个RTT以及302跳转延时。

  a、大部分情况下用户不会手动输入https://www.kkdshu.com来访问HTTPS,服务端只能返回302强制浏览器跳转到https。

  b、浏览器处理302跳转也需要耗时。

  ③、三次握手重新建立TCP连接,耗时一个RTT。

  302跳转到HTTPS服务器之后,由于端口和服务器不同,需要重新完成三次握手,建立TCP连接。

  ④、TLS完全握手阶段一,耗时至少一个RTT。

  a、这个阶段主要是完成加密套件的协商和证书的身份认证。

  b、服务端和浏览器会协商出相同的密钥交换算法、对称加密算法、内容一致性校验算法、证书签名算法、椭圆曲线(非ECC算法不需要)等。

  c、浏览器获取到证书后需要校验证书的有效性,比如是否过期,是否撤销。

  ⑤、解析CA站点的DNS,耗时一个RTT。

  a、浏览器获取到证书后,有可能需要发起OCSP或者CRL请求,查询证书状态。

  b、浏览器首先获取证书里的CA域名。

  c、如果没有命中缓存,浏览器需要解析CA域名的DNS。

  ⑥、三次握手建立CA站点的TCP连接,耗时一个RTT。

  DNS解析到IP后,需要完成三次握手建立TCP连接。

  ⑦、发起OCSP请求,获取响应。耗时一个RTT。

  ⑧、完全握手阶段二,耗时一个RTT及计算时间。

  完全握手阶段二主要是密钥协商。

  ⑨、完全握手结束后,浏览器和服务器之间进行应用层(也就是HTTP)数据传输。

  当然不是每个请求都需要增加7个RTT才能完成HTTPS首次请求交互,据笔者了解,大概只有不到0.01%的请求才有可能需要经历上述步骤,它们需要满足如下条件:

  ①、必须是首次请求,即建立TCP连接后发起的第一个请求,该连接上的后续请求都不需要再发生上述行为。

  ②、必须要发生完全握手,而正常情况下80%的请求能实现简化握手。

  ③、浏览器需要开启OCSP或者CRL功能,Chrome默认关闭了ocsp功能,firefox和IE都默认开启。

  ④、浏览器没有命中OCSP缓存,Ocsp一般的更新周期是7天,firefox的查询周期也是7天,也就说是7天中才会发生一次ocsp的查询。

  ⑤、浏览器没有命中CA站点的DNS缓存,只有没命中DNS缓存的情况下才会解析CA的DNS。

  2、计算耗时增加

  上节还只是简单描述了HTTPS关键路径上必须消耗的纯网络耗时,没有包括非常消耗CPU资源的计算耗时,事实上计算耗时也不小(30ms以上),从浏览器和服务器的角度分别介绍一下:

  ①、浏览器计算耗时

  a、RSA证书签名校验,浏览器需要解密签名,计算证书哈希值,如果有多个证书链,浏览器需要校验多个证书。

  b、RSA密钥交换时,需要使用证书公钥加密premaster,耗时比较小,但如果手机性能比较差,可能也需要1ms的时间。

  c、ECC密钥交换时,需要计算椭圆曲线的公私钥。

  d、ECC密钥交换时,需要使用证书公钥解密获取服务端发过来的ECC公钥。

  e、ECC密钥交换时,需要根据服务端公钥计算master key。

  f、应用层数据对称加解密。

  g、应用层数据一致性校验。

  ②、服务端计算耗时

  a、RSA密钥交换时需要使用证书私钥解密premaster,这个过程非常消耗性能。

  b、ECC密钥交换时,需要计算椭圆曲线的公私钥。

  c、ECC密钥交换时,需要使用证书私钥加密ECC的公钥。

  d、ECC密钥交换时,需要根据浏览器公钥计算共享的master key。

  e、应用层数据对称加解密。

  f、应用层数据一致性校验。

  由于客户端的CPU和操作系统种类比较多,所以计算耗时不能一概而论,手机端的HTTPS计算会比较消耗性能,单纯计算增加的延迟至少在50ms以上,PC端也会增加至少10ms以上的计算延迟。

  服务器的性能一般比较强,但由于RSA证书私钥长度远大于客户端,所以服务端的计算延迟也会在5ms以上。

  五、HTTPS协议为何没在互联网上全面采用?

  很多人会有一个疑问:https够不够呢?肯定是不够的,但是没有更好的方案了,可为什么更安全的HTTPS协议没有在互联网上全面采用呢?简单来说,有以下几点:

  1、SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。

  2、SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。(SSL有扩展可以部分解决这个问题,但是比较麻烦,而且要求浏览器、操作系统支持,Windows XP就不支持这个扩展,考虑到XP的装机量,这个特性几乎没用。)

  3、HTTPS连接缓存不如HTTP高效,大流量网站如非必要也不会采用,流量成本太高。

  4、HTTPS连接服务器端资源占用高很多,支持访客稍多的网站需要投入更大的成本,如果全部采用HTTPS,基于大部分计算资源闲置的假设的VPS的平均成本会上去。

  5、HTTPS协议握手阶段比较费时,对网站的相应速度有负面影响,如非必要,没有理由牺牲用户体验。

  6、最关键的,SSL证书的信用链体系并不安全,特别是在某些国家(你们懂的)可以控制CA根证书的情况下,中间人攻击一样可行。

  另外,在客户端被植入无数后门、木马的状况下,HTTPS连接的作用非常有限,这也许是支付宝不可能像PayPal那么易用的原因之一。

  点评:

  HTTPS是超文本传输协议,是HTTP的加密版和安全版,或者说搜索引会认为这种“带锁”的页面,这种页面一般用于银行、金融、网上支付对通讯安全要求较高的网站,搜索引擎并不太喜欢收录这些页面,可能只收录一些重要的页面,所以说全站HTTPS对SEO影响很大,搜索引擎还不能很好的收录HTTPS协议页面。

  鉴于此,你可以分别使用HTTP和HTTPS,对于想要收录和排名的页面使用HTTP,或者网站上一些重要的页面,比如:首页,业务介绍页面等,可以允许HTTP形式也可以访问。

转载于:https://www.cnblogs.com/qqbook/p/10976006.html

你可能感兴趣的:(HTTPS对网站优化影响的好与坏?)