原文地址:HTTPS 降级攻击的场景剖析与解决之道
博客地址:blog.720ui.com/javascript
HTTP 协议,自己是明文传输的,没有通过任何安全处理。那么这个时候就很容易在传输过程当中被中间者窃听、篡改、冒充等风险。这里提到的中间者主要指一些网络节点,是用户数据在浏览器和服务器中间传输必需要通过的节点,好比 WIFI 热点,路由器,防火墙,反向代理,缓存服务器等。HTTP 协议,中间者能够窃听隐私,使用户的敏感数据暴露无遗;篡改网页,例如往页面插的广告内容,甚至进行流量劫持,好比有的时候你会发现域名没输错,结果却跑到了一个钓鱼网站上,由于被它劫持了。java
此时,HTTPS 的价值就体现出来了。HTTPS 协议在应用层的 HTTP 协议和以及传输层 TCP 协议之间的会话层加入了 SSL/TLS 协议,用做加密数据包。在真正数据传输以前,进行握手通讯,握手的信息交换主要包括:双方确认加密协议的版本,确认身份(其中浏览器客户端的身份有时是不须要确认的),确认传输真正数据的加密密码(对称加密)。在用做信息传输的加密密码确认以后,接下来的通讯数据都会加密后再传输,从而达到防窃取的做用。原理剖析,能够参考我以前的文章《HTTPS原理剖析与项目场景》。浏览器
那么,使用了 HTTPS 就能确保安全传输了吗?理论上,是的,可是,现实却不是如此。缓存
设计和实现 SSL/TLS 协议出现了漏洞,致使攻击者一样能够攻击一些旧版本的 SSL/TLS 协议。这其中就包括 SSL 3.0。安全
攻击者可利用 SSL 3.0 漏洞获取安全链接当中某些是SSL3.0加密后的明文内容。由于兼容性问题,当浏览器进行 HTTPS 链接失败的时候,将会尝试使用旧的协议版本,因而,加密协议由更加安全的协议,好比 TLS 1.2降级成 SSL 3.0。服务器
若是服务器提供有漏洞的 SSL 3.0 协议的支持,同时,攻击者又能做为中间人控制被攻击者的浏览器发起漏洞版本的 HTTPS 请求,那虽然攻击者监听到的也是加密过的数据,但由于加密协议有漏洞,能够解密这些数据。攻击者能够利用此漏洞,截获用户的隐私数据,好比 Cookie,这样攻击者就能够拿到这些隐私数据,进行更深层次的攻击,进而形成了用户隐私的泄漏。微信
目前,惟一解决问题的方法是禁用 SSL 3.0 加密协议,防止TLS 1.2 或者 TLS 1.1 或者 TLS 1.0降级到 SSL 3.0 加密协议。网络
禁用的策略有不少,这里主要讲解下 Nginx 如何防止 TLS 降级到 SSL 3.0 如下版本,从而防止 HTTPS 降级攻击。网站
原先的配置以下。值得注意的是,隐性默认是SSLv3 TLSv1 TLSv1.1 TLSv1.2。ui
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;复制代码
禁用的操做很简单,如今改为这样便可。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;复制代码
HTTPS 能确保安全传输了吗?答案是,不必定,由于旧的版本存在安全漏洞,可能会被攻击者进行 HTTPS 的降级攻击。因此,SSL 3.0 协议如下版本并不安全,所以,为了防止 HTTPS 的降级攻击,咱们须要禁用它。
(完)
更多精彩文章,尽在「服务端思惟」微信公众号!