为什么要全站 HTTPS
satan_ljc
8年前
<p>随着互联网越来越深入的渗透到人们生活的方方面面,网络安全变得越来越重要,不仅是人们上网要注重个人隐私和安全,企业同样需要提供安全的互联网服务。一个安全的网络服务,会给用户带来愉悦和安宁,用户对安全是无感的,这是最好的体验。而不安全的服务,总是会给人们带来灾难。</p> <p>黑暗森林法则是科幻小说作家刘慈欣在「三体」中提出的理论,世界就是一座黑暗森林,每个文明都是带枪的猎人,像幽灵般潜行于林间,轻轻拨开挡路的树枝,竭力不让脚步发出一点儿声音。他必须小心,因为林中到处都有与他一样潜行的猎人,如果他发现了别的生命,能做的只有一件事:开枪消灭之。所以,在准备好之前,永远不要暴露在公众面前。</p> <p>黑暗森林法则很适用于安全行业:一旦暴露在公众的视野中,黑客就会对你很感兴趣,就会找出来你的很多问题。从以往的经验来看,在世界杯期间,彩票网站受攻击很厉害;在热钱涌入 P2P 小贷行业期间,整个P2P小贷行业受攻击非常频繁;现在资本进入了在线直播行业,可以预计,如果没有安全保护措施,这个行业很快会经历黑客的洗礼。你很难知道黑客会在什么时候光顾你。对于黑暗森林法则,低调可以保护你一时,但是无法永远保护你,因为业务要发展,必然会暴露在公众的眼中。</p> <p>如何构建安全的互联网服务呢?这是个宏大的话题,无数安全领域的先驱者都在为此努力。简单来说,每个互联网企业都该有自己独立的安全部门,有安全员,建立自己的安全规范,让程序员写安全的代码,跟踪业界的安全和漏洞报告,及时升级服务器的补丁,定期进行众测、渗透和模拟攻击,把系统构建在高防 DDoS 的系统之上,等等。</p> <p>这些还不够,我们还需要构建安全的基础设置,其中最重要的就是 HTTPS。</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/fd37700b263ee9ad1c292efc3cf9afec.jpg"></p> <p>什么是 HTTPS 呢?简单来说,HTTPS 就是 HTTP 的安全版本。HTTP 在早期设计的时候,更多的考虑了轻量级,灵活,减少网络传输,如何定义数据传输的方法等,但是在安全层面考虑甚少,传输过程中所有的数据都是明文,而且不对传输双方进行身份验证,在传输链路的任意一个环节,第三方(代理服务器、路由器、Wi-Fi 热点、移动运营商、统一网关出口、小区保安等)都可以拿到这些数据细细品味。基于 HTTP 协议在网络上传输数据,就像是一位花枝招展的美女穿行在黑暗森林,手无缚鸡之力却又身怀宝藏,而森林中除了洪水猛兽,还有四十大盗,您说能安全吗?</p> <p>为了解决这个问题,保证隐私数据能在互联网上安全的传输,网景公司设计了 SSL 协议(Secure Sockets Layer),于是 HTTPS 横空出世了。它的全称是超文本传输安全协议,在 HTTP 的基础上通过 SSL/TLS 来对数据包进行加密,保证数据的安全。HTTPS 的目的主要有三个,一个是数据的保密性,你给别人送个邮包,但邮包是打了封印的,快递员不知道包里装的是啥。第二是数据的完整性,快递员不知道邮包是啥,但可以掉包啊,HTTPS 发现了掉包的数据,可以拒收。第三就是身份验证,HTTPS 可以保证邮包被正确的送到指定的接收方,而不是第三方。</p> <p>HTTPS 的访问过程大致如图所示:</p> <p style="text-align: center;"><img src="https://simg.open-open.com/show/799d2325db2b620e2f8781c004210fab.jpg"></p> <p style="text-align: center;">图:from https://kaazing.com</p> <p>浏览器发起一个 HTTPS 请求,这个请求会连接到 Web 服务器的443端口。服务器有一套证书,一般是受信任的证书机构颁发的,证书就是一对公钥和私钥。公钥是一把锁,而私钥是解开公钥的唯一钥匙,只保存在服务器上。</p> <p>服务器会把公钥发给浏览器,其中包含了很多信息,比如颁发机构、过期时间、加密算法等。浏览器一看是证书来了,会自个去校验这个证书是否是有效的,如果是无效的,就会告诉用户证书有问题,别信。如果是有效证书,浏览器会生成一个随机值,或者叫 one-time session key,然后用公钥证书对其进行加密,然后再发给服务器。</p> <p>服务器有钥匙啊,可以解开这个加密的数据,得到这个随机值,以后客户端和服务端的通信就可以通过这个双方都知道的随机值来进行加密解密了。只要加密算法足够强悍,一个非常安全的通道就建立起来了。</p> <p>普通用户通常上网的时候,并不会意识到访问的是 HTTP 还是 HTTPS,比如我们在浏览器地址栏输入 google.com,这时候访问的是 HTTP,但 Google 会将请求转发到 HTTPS 上,当我们加载页面的时候后,会发现浏览器地址栏的左侧有一个小锁,点击这个小锁,你会发现相关的证书信息,这就表明,你访问这个网站的数据是相对安全的。为什么是相对呢?因为没有绝对的安全,即使采用了 HTTPS,也可以实现中间人攻击,或者进行数据解密等,但是,目前 HTTPS 目前使用的加密算法需要巨大的计算量才能破解,尤其是进行了双向认证的方式,用最强计算能力的计算机,也得破解几十年,谁会在几十年以后看冯老师几十年前发出的讯息呢?</p> <p>事实上,现在很多移动终端与云端的交互,都进行了双向认证,也就是说,移动端也保留了一份类似随机数的私钥证书,用来和服务器端的证书进行验证,以保证大家数据的安全。</p> <p>目前,谷歌、腾讯、百度、阿里、银联、Paypal 等国内外一流互联网公司都采用了全站 HTTPS,当然,由于我们在之前谈到了直播网站,这里必须提一下斗鱼直播,斗鱼是国内首家,也是目前唯一全站升级到 HTTPS 的网络直播平台。</p> <p>2016年7月,斗鱼全站由 HTTP 协议升级到了 HTTPS,这种做法同样是为了保证直播用户的数据安全和隐私安全。但是全站实施 HTTPS 并不是加了一个 S 那么简单,这里面需要投入巨大的技术研发成本、服务器和带宽成本等等。</p> <p>HTTPS 会带来更多的网络握手和消耗,如何提升访问性能,如何优化证书链,如何增加高速连接,减少端口之间的跳转等等。采用了 HTTPS 之后,所有的静态资源都需要支持 HTTPS,如何让 CDN 支持 HTTPS,如何应对 DDoS 的攻击,同时,移动客户端也需要与云端进行双向证书认证。为了解决这些技术问题,斗鱼在前端页面、后端架构、协议特性、加密算法、流量调度、架构和运维、安全等方面都做了大量工作。除此之外,他们还需要承担 CA 根节点证书费用、服务器和带宽增加的成本。</p> <p>实施了 HTTPS 的斗鱼,能为用户带来什么好处呢?用户可以获得一个干净安全的直播和观看直播的体验。比如弹幕,弹幕是直播中与主播沟通的工具,是直播不可分割的一部分,深受用户关注和喜爱,因此非常容易受到恶意攻击行为,发送广告和非法信息。弹幕是开放给所有用户的公共场所,任何人都可以发言,审核管理工作量巨大且复杂,受到恶意攻击行为后会严重影响到大量用户的体验,对观看直播造成恶劣的影响。在 HTTP 时代,我们甚至可以简单的写一段脚本就可以把直播间的所有弹幕信息抓下来,因为数据在网络上是明文传输的。有了 HTTPS 的保障,无论是客户端还是浏览器,都可以得到更好的用户体验。</p> <p>事实上,在安全要求越来越严格的今天,未来的中大型网站,都会慢慢过渡到全栈 HTTPS 的时代,这个趋势是不可阻挡的。如果你的网站依然是全站 HTTP 的,是时候改变了。</p> <p> </p> <p> </p> <p>来自:http://mp.weixin.qq.com/s?__biz=MjM5ODQ2MDIyMA==&mid=2650712733&idx=1&sn=681e7413eeff0d6189df9c0ef6190e46&chksm=bec064ce89b7edd8427d3eb9d578c314bc209603a5c3e9c0657d6908fc1baae91a9c7c64d9a9&scene=0</p> <p> </p>