大型互联网站点HTTPS实践(四):协议层以外的实践_第1页
大型互联网站点HTTPS实践(四):协议层以外的实践_第2页
大型互联网站点HTTPS实践(四):协议层以外的实践_第3页
大型互联网站点HTTPS实践(四):协议层以外的实践_第4页
大型互联网站点HTTPS实践(四):协议层以外的实践_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大型互联网站点HTTPS实践(四):协议层以外的实践1前言网上介绍https的文章并不多,更鲜有分享在大型互联网站点部署https的实践经验,本文为大家介绍百度https实践和部署https上的一些权衡,希望以此抛砖引玉。2协议层以外的实践工作2.1全站覆盖https的理由很多刚接触https的会思考,我是不是只要站点的主域名换了https就可以?答案是不行。https的目的就是保证传输过程的安全,如果只有主域名上了https,但是主域名加载的资源,比如js,css,图片没有上https,会怎么样?从效果上来说,没有达到保证网站传输过程安全的目的,因为你的js,css,图片仍然有被劫持的可能性,如果这些内容被篡改/嗅探了,那么https的意义就失去了。浏览器在设计上早就考虑的这样的情况,会有相应的提示。具体的实现依赖浏览器,例如地址栏锁形标记从绿色变为黄色阻止这次请求,或者直接弹出非常影响用户体验的提示(主要是IE),用户会感觉厌烦,疑惑和担忧安全性。很多用户看见这个链接会习惯性的点”是",这样非https的资源就被禁止加载了。非ie的浏览器很多也会阻止加载一些危害程度较高的非https资源(例如js)。我们发现移动端浏览器的限制目前会略松一些。所以这里要是没做好,很多情况连网站的基本功能都没法正常使用。如何解决“此页中包含其他不安全资源”?请百度:网站安装SSL证书提示”此页中包含其他不安全资源”解决办法2.2站点的区别很多人刚接触https的时候,觉得不就是部署证书吗,在沃通CA申请一个免费的https证书,让webserver支持https就行了吗。实际上对于不同的站点来说,https的部署方式和难度有很大的区别。对于一个大型站点来说,让webserver支持https,以及对webserver在https协议特性上做一些优化,在迁移的工作比重上,可能只占到20%-40%。我们考虑下以下几种情况下,部署https的方案。2.2.1简单的个人站点简单的定义:资源只从本站的主域或者主域的子域名加载。比如axyz的个人blog,域名是。加载主域名下的js和图片。这样的站部署https,在已有证书且webserver支持的情况下,只需要把主域名替换为https接入,然后把资源连接修改为https://或者〃。2.2.2复杂的个人站点复杂的定义:资源需要从外部域名加载。这样就比较麻烦了,主域资源容易适配https,在cdn上加载的资源还需要cdn服务商支持https。目前各大cdn的服务商正在逐渐提供https的支持,需要迁移的朋友可以看看自己使用的cdn是否提供了这项能力。一些cdn会对https流量额外收费。Cdn使用https常见的方案有:

1网站主提供私钥给cdn,回源使用http。2cdn使用公共域名,公共的证书,这样资源的域名就不能自定义了。回源使用http。3仅提供动态加速,cdn进行tcp代理,不缓存内容。4CloudFlare提供了KeylessSSL的服务,能够支持不愿意提供私钥,不想使用公共的域名和证书却又需要使用cdn的站点了。2.2.3简单的大型站点简单的定义:资源只从本站的主域,主域的子域,或者自建/可控的cdn域名加载,几乎没有第三方资源。如果网站本身的特性就如此,或愿意改造为这样的类型,部署https就相对容易。GoogleTwitter都是非常好的范例。优点:已经改成这样的站点,替换https就比较容易。缺点:如果需要改造,那么要很大的决心,毕竟几乎不能使用多样化的第三方资源了。2.2.4复杂,访问速度重要性稍低的大型站点复杂的定义:从本站的非主域,或者第三方站点的域名有大量的第三方资源需要加载,多出现在一些平台类,或者有复杂内容展现的的网站。访问速度要求:用户停留时间长或者强需求,用户对访问速度的耐受程度较高。比如门户,视频,在线交易类(比如火车票机票商城)网站。这样的站点,可以努力推动所有相关域名升级为支持https。我们用下图举例说明下这样修改会导致一个网站的链接发生怎样的改变。丿7品帀匚.b也口xyFblcigtdiiNcim/1j百丿7品帀匚.b也口xyFblcigtdiiNcim/1j百fjquaRjsf 叶ECil&gCHni|a4"古机rk/itjirdS亡oh尤otn/i他fhrrp;"iv.bigaxyNblcig£dFu:cim/vf2'l>l5G4Cd_mp4时和:打iffiOjiebmLX皆zb灿EonVdDriQhTT&y/卅卅卅-thindl£OfnZirmM1jpg"ttp://戦内嗽thydl*工。啊flush/占则fhrtirr/gtoitii匚rthirc! 工iwf

负责流量接入的团队将可控的接入环境改造为http和https都支持,这样前端工程的工作相对就少一些。大部分时候将链接从http://替换为//即可.在主域名是https的情况下,其它资源就能自动从https协议下加载。一些第三方资源怎么办?一般来说只有两种选择,一迁移到自己的cdn或者ide吧,二强制要求第三方自己能支持https。以全站https接入的facebook举例。第三方厂商想在facebook上线一个游戏。facebook:请提供https接入吧。第三方想:能赚钱啊,还是提供下https接入吧。所以,足够强势,有吸引力,合作方也有提供https的能力的话,这是完全可行的。如果你的平台接入的都是一些个人开发者,而且还赚不到多少钱的情况下,这样就行不通了。优点:前端改动相对简单,不容易出现https下还有http的资源问题。缺点:通常这样的实现下,用户的访问速度会变慢,比如从2.5秒变为3秒,如上述的理由,用户还是能接受的。对第三方要求高。2.2.5复杂,访问速度有严格要求的大型站点复杂的定义:同上。访问速度要求:停留时间不长,用户对访问速度的心理预期较高。但是如果用户把网站当作工具使用,需要你很快给出响应的时候,这样的实现就不好了。后续几个部分我们介绍下这些优化的抉择。2.3域名的选择域名对访问速度的影响具有两面性:域名多,域名解析和建立连接的时间就多域名少,下载并发度又不够。https下重建连接的时间成本比http更高,对于上面提到的简单的大型站点可以用少量域名就能满足需求,对于百度这样富展现样式较多的搜索引擎来说,页面可能展示的资源种

类太多。而不同类型的资源又是由不同的域名(不同的产品或者第三方产品)提供的服务,换一个词搜索就可能需要重新建立一些资源的ssl链接,会让用户感受到卡顿。如果将域名限制在有限的范围,维持和这些域名的连接,合并一些数据,加上有spdy,http2.0来保证并发,是可以满足我们的需求的。2.4连接复用连接复用率可以分为tcp和ssl等不同的层面,需要分开进行分析和统计。2.4.1连接复用的意义HTTP协议(RFC2616)规定一个域名最多不能建立超过2个的TCP连接。但是随着互联网的发展,一张网页的元素越来越多,传输内容越来越大,一个域名2个连接的限制已经远远不能满足现在网页加载速度的需求。目前已经没有浏览器遵守这个规定,各浏览器针对单域名建立的TCP连接数如下:

从上表看出,单个域名的连接数基本上是6个。所以只能通过增加域名的方式来增加并发连接数。在HTTP场景下,这样的方式没有什么问题。但是在HTTPS连接下,由于TLS连接建立的成本比较高,增加并发连接数本身就会带来较大的延迟,所以对域名数需要一个谨慎的控制。特别是HTTP2即将大规模应用,而HTTP2的最大特性就是多路复用,使用多个域名和多个连接无法有效发挥多路复用和压缩的特性。那HTTPS协议下,一张网页到底该有多少域名呢?这个其实没有定论,取决于网页需要加载元素个数。2.4.2预建连接既然从协议角度无法减少握手对速度的影响,那能不能提前建立连接,减少用户可以感知的握手延迟呢?当然是可以的。思路就是预判当前用户的下一个访问URL,提前建立连接,当用户发起真实请求时,TCP及TLS握手都已经完成只需要在连接上发送应用层数据即可。

最简单有效的方式就是在主域下对连接进行预建,可以通过请求一些静态资源的方式。但是这样还是不容易做到极致,因为使用哪个连接,并发多少还是浏览器控制的。例如你对a域名请求一个图片,刘览器建立了两个连接,再请求一张图片的时候,刘览器很大概率能够复用连接,但是当a域名需要加载10个图片的时候,浏览器很可能就会新建连接了。243Spdy的影响Spdy对于连接复用率的提升非常有效,因为它能支持连接上的并发请求,斤以浏览器会尽量在这个链接上保持复用。2.4.4其它也可以尝试一些其他发方法,让浏览器在访问你的网站之前就建立过https连接,这样session能够复用。HSTS也能有效的减少跳转时间,可惜对于复杂的网站来说,开启需要考虑清楚很多问题。2.5优化的效果从百度的优化经验来看看,如果不开启HSTS,用户在浏览器直接访问主域名,再通过302跳转到HTTPS。增加的时间平均会有400ms+,其中302跳转和ssl握手的因素各占一半。但是对于后续的请求,我们做到了对绝大部分用户几乎无感知。这400ms+还有很多可以优化的空间,我们会持续优化用户的体验。3HTTPS迁移遇到的一些常见问题。3.1传递Referrer我们可以把自己的网站替换为https,但是一般的站点都有外链,要让外链都https目前还不太现实。很多网站需要从referrer中判断流量来源,因此对于搜索引擎这样的网站来说,referer的传递还是比较重要的。如果不做任何设置,你会发现在https站点中点击

外链并没有将referrer带入到http请求的头部。现代的浏览器可以用meta标签来传递refer。传递完整的url只传递站点,不包含路径和参数等。对于不支持meta传递referrer的浏览器,例如IE8,我们怎么办呢?可以采用再次跳转的方法,既然HTTPS下不能给HTTP传递referer,我们可以先从HTTPS访问一个可控的http站点,把需要传递的内容放到这个http站点的url中,然后再跳转到目标地址。3.2form提交有时需要将form提交到第三方站点,而第三方站点又是http的地址,浏览器会有不安全的警告。可以和referrer的跳转传递采取相似的逻辑。但是这样对referer和form等内容的方案,并不是完美的解决方法,因为这样还是增加了不安全的因素(劫持,隐私泄露等)。理想情况需要用户升级符合最新规范的浏览器,以及推进更多的站点迁移至https。3.3视频播放简单来说,如果你使用http的协议来播放视频,那么浏览器仍然会有不安全的提示。所以你有两种选择,1让视频源提供https。2使用非http的协议,如rtmp协议。

3.4用户异常在https迁移的过程中,也会有不少热心的用户向我们反馈遇到的各种问题。常见的有以下的一些情况:1用户的系统时间设置错误,导致提示证书过期。2用户使用fiddler等代理进行调试,但是没有添加这些软件的根证书,导致提示证书非法。3用户使用的Dns为公共dns或者跨网设置dns 些请求被运营商作为跨网流量拦截。4连通性有问题,我们发现一个小运营商的https失败率奇高,又没法联系到他们,只能不对他们进行https的转换。5慢。有时由于网络环境的因素,用户打开其他网站也慢,ping明0个网站都要500-2000ms。这时https自然也会很慢。4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论