互联网全站HTTPS的时代已经到来(1)


我目前在百度从事HTTPS方面的性能优化工作。百度无线搜索目前已经支持https,手机访问地址是 https://m.baidu.com 。

互联网全站HTTPS的时代已经到来

在HTTPS项目的开展过程中明显感觉到目前国内互联网对HTTPS并不是很重视,其实也就是对用户隐私和网络安全不重视。本文从保护用户隐私的角度出发,简单描述现在存在的用户隐私泄露和流量劫持现象,然后进一步说明为什么HTTPS能够保护用户安全以及HTTPS使用过程中需要注意的地方。

国外很多网站包括google,facebook,twitter都支持了全站HTTPS,而国内目前还没有一家大型网站全站支持HTTPS(PC端的微信全部使用了HTTPS,但是PC端用户应该不多)。甚至一些大型网站明显存在很多HTTPS使用不规范或者过时的地方。比如支付宝使用的是tls1.0和RC4,而京东(quickpay.jd.com)竟然还使用着SSL3.0这个早就不安全并且性能低下的协议,其他很多网站的HTTPS登陆页面也存在着不安全的HTTP链接,这个也为黑客提供了可乘之机。

由于篇幅关系,文中几乎没有详细描述任何细节,后面有时间我再一一整理成博客发表出来。同时由于水平有限,本文肯定存在很多错误,希望大家不吝赐教。本文的大部分内容都能从互联网上搜索到,有些地方我也标明了引用,可以直接跳转过去。但是全文都是在我自己理解的基础上结合开发部署过程中的一些经验和测试数据一个字一个字敲出来的,最后决定将它们分享出来的原因是希望能和大家多多交流,抛砖引玉,共同推进中国互联网的HTTPS发展。

本文不会科普介绍HTTPS、TLS及PKI,如果遇到一些基本概念文中只是提及而没有描述,请大家自行百度和google。本文重点是想告诉大家HTTPS没有想像中难用可怕,只是没有经过优化。

中国互联网全站使用HTTPS的时代已经到来。

1,用户隐私泄露的风险很大

人们的生活现在已经越来越离不开互联网,不管是社交、购物还是搜索,互联网都能带给人们很多的便捷。与此同时,用户“裸露”在互联网的信息也越来越多,另一个问题也日益严重,那就是隐私和安全。

几乎所有的互联网公司都存在用户隐私泄露和流量劫持的风险。BAT树大招风,这方面的问题尤其严重。比如用户在百度搜索一个关键词,“人流”,很快就会有医院打电话过来推销人流手术广告,不知情的用户还以为是百度出卖了他的手机号和搜索信息。同样地,用户在淘宝搜索的关键词也很容易被第三方截获并私下通过电话或者其他广告形式骚扰用户。而QQ和微信呢,显然用户不希望自己的聊天内容被其他人轻易知道。为什么BAT不可能出卖用户隐私信息给第三方呢?因为保护用户隐私是任何一个想要长期发展的互联网公司的安身立命之本,如果用户发现使用一个公司的产品存在严重的隐私泄露问题,显然不会再信任该公司的产品,最终该公司也会因为用户大量流失而陷入危机。所以任何一家大型互联网公司都不可能因为短期利益而出卖甚至忽视用户隐私。

那既然互联网公司都知道用户隐私的重要性,是不是用户隐私就得到了很好的保护呢?现实却并不尽如人意。由于目前的WEB应用和网站绝大部分是基于HTTP协议,国内没有任何一家大型互联网公司采用全站HTTPS方案来保护用户隐私(排除支付和登陆相关的网站或者页面以及PC端的微信)。因为HTTP协议简单方便,易于部署,并且设计之初也没有考虑安全性,所有内容都是明文传输,也就为现在的安全问题埋下了隐患。用户在基于HTTP协议的WEB应用上的传输内容都可以被中间者轻易查看和修改。

比如你在百度搜索了一个关键词“https“,中间者通过tcpdump或者wireshark等工具就很容易知道发送请求的全部内容。wireshark的截图如下:

wireshark的截图

这里所谓的中间者是指网络传输内容需要经过的网络节点,既有硬件也有软件,比如中间代理服务器、路由器、小区WIFI热点、公司统一网关出口等。这里面最容易拿到用户内容的就是各种通信服务运营商和二级网络带宽提供商。而最有可能被第三方黑客动手脚的就是离用户相对较近的节点。

中间者为什么要查看或者修改用户真实请求内容呢?很简单,为了利益。常见的几种危害比较大的中间内容劫持形式如下:

● 获取无线用户的手机号和搜索内容并私下通过电话广告骚扰用户。为什么能够获取用户手机号?呵呵,因为跟运营商有合作。

● 获取用户帐号cookie,盗取帐号有用信息。

● 在用户目的网站返回的内容里添加第三方内容,比如广告、钓鱼链接、植入木马等。

总结来讲,由于HTTP明文传输,同时中间内容劫持的利益巨大,所以用户隐私泄露的风险非常高。

2,HTTPS能有效保护用户隐私

HTTPS就等于HTTP加上TLS(SSL),HTTPS协议的目标主要有三个:

● 数据保密性。保证内容在传输过程中不会被第三方查看到。就像快递员传递包裹时都进行了封装,别人无法知道里面装了什么东西。

● 数据完整性。及时发现被第三方篡改的传输内容。就像快递员虽然不知道包裹里装了什么东西,但他有可能中途掉包,数据完整性就是指如果被掉包,我们能轻松发现并拒收。

● 身份校验。保证数据到达用户期望的目的地。就像我们邮寄包裹时,虽然是一个封装好的未掉包的包裹,但必须确定这个包裹不会送错地方。

通俗地描述上述三个目标就是封装加密,防篡改掉包,防止身份冒充,那TLS是如何做到上述三点的呢?我分别简述一下。


相关内容