机会性加密简介

Brief of Opportunistic Encryption

  linkthis    2018-03-08    2547 words

Opportunistic Encryption(简称OE)或许应该视为HTTP Alternative Services的弱化版,在HTTPS加速普及的现在,或许即将走入历史。

Firefox上的机会性加密

Firefox 37为了给互联网带来更多加密,将对某些基于HTTP的资源进行机会性加密。它将于3月31日发布。
OE提供未经身份验证的TLS数据加密,否则数据将通过明文传输。其在面对被动窃听时会起到一定的保密作用,并且与的原始TCP相比,其处理随机网络噪声时也可以为你的数据提供更好的完整性保护。而服务器所需的设置极其简单。
对于HTTP来说,OE确实不错,但是仍不如HTTPS。如果你可以使用HTTPS则不要使用OE。不需要反复说明,那就是HTTPS可以保护你免受中间攻击人攻击。
但是,如果你有大量无法迁移到HTTPS的遗留内容(通常是混合内容规则和与第三方交互),那么OE为HTTP数据传输提供了一种加密机制。这是一种对明文传输的严明替代
只需简单的两步即可为一台服务器开启OE:

  • 在一个空闲的端口上部署HTTP/2 over TLS服务。443是一个不错的选择。如果你喜欢,可以使用自签名证书,因为OE不需要身份验证。
  • 添加一个响应头Alt-Svc: h2=”:443”; ma=60,如果使用的是支持SPDY(如Nginx)的网络服务软件则是Alt-Svc: spdy/3.1=”:443”; ma=60

当Firefox(或任何其他支持Opportunistic Encryption的浏览器)收到"h2"Alt-Svc响应头时,它知道可以通过基于HTTP/2的TLS访问该站点的443端口。因为新的连接在使用之前就已经在后台完成了建立,所以不会出现响应延迟。对于该域之后所有的HTTP请求,浏览器都将使用端口443上的TLS进行连接,而服务器上必须有由受信任的证书颁发机构签署的对应的域名证书。浏览器会验证证书。如果连接成功,浏览器将使用HTTP/2发送连接请求。如果替代服务(端口443)变得不可用或无法验证,Firefox将自动变更为80端口使用明文传输。客户端如果不能声明正确的协议,此响应头将被忽略并继续使用80端口。
机会性加密的请求将在:scheme伪头中包含"http"而不是"https"。将HTTP的基于TLS的机会性加密与HTTPS进行比较,就只有此伪头部中的一线之差。但是,浏览器在处理通过URL获取的资源时会因为HTTP和HTTPS的不同而产生巨大的区别(在之后进行讨论)。
通过Opportunistic Encryption,支持的浏览器可以选择通过支持加密连接的HTTP/2访问HTTP站点,而不是使用明文的HTTP/1.1(默认)。

安全优势

网络运营商可以访问通过它们设备传输的数据已经不是什么秘密。此权限可用于修改数据:ISP捕获为加密的数据并注入不需要的数据(如广告跟踪cookie)。各国通过定期检查未加密流量中的HTTP头来过滤内容,China’s Great Cannon什么中二名字,保留原文将恶意代码注入未加密的网站。访问数据的流量也可以用来进行拉网式监控,即大量广泛的收集数据,然后将其汇总到中心进行分析
机会性加密不能完全防御攻击者,因为他们可以轻易地移除向浏览器表示支持机会加密的响应头。但是,一旦机会性加密连接建立,通过连接发送的所有请求都将被加密,并且不能被第三方查看(或修改)。

术语复杂

Tim Berners-Lee在20世纪80年代后期推动HTTP的发展,以便于将文档从服务器传输到客户端。与当今的网络生态系统相比,当时的网站和浏览器都很简单。实际上不存在网络安全的概念。可以参看1989年的论文
随着网络的应用扩大到包含敏感数据的交易,安全性便变得必要了。发展了多种策略来保障HTTP的安全,包括S-HTTP和最终获胜者HTTPS。
最初,HTTP和HTTPS之间的区别只有层级不同。在HTTP中,信息直接进入网络,而在HTTPS中,在客户端和服务器之间使用SSL(一种加密和身份验证协议)建立安全连接,并将标准HTTP信息写入加密连接。浏览器给HTTP网站添加一个打开的锁的标志,而HTTPS网站是一个锁上的锁。之后,SSL演变为TLS,尽管有时候人们仍将其称为SSL
随着网站变得越来越复杂,嵌入式脚本和动态内容变得司空见惯。在安全网页上提供不安全的内容被认为是有风险的,HTTPS开始拥有更多细微的含义。HTTPS意味着安全的HTTP,而不仅仅是加密的HTTP连接。例如,通过cookie在客户端储存状态来管理Web会话成为一种流行的方法。通过安全连接获取的cookie会拒绝被不安全的HTTP发送,也不能被通过HTTP获取的数据修改。现在新的隐私敏感功能也需要HTTPS(如Location API)。W3C(规范网络标准的机构)在其编纂的Secure Contexts文档中进一步地对HTTP和HTTPS进行了区分。
简单来说:

  • HTTP是传输超文本的协议
  • TLS/SSL是用于通信加密的协议
  • HTTPS是传输安全超文本的协议
  HTTP HTTPS
未加密
使用TLS加密

机会性加密属于左下角的✓。尽管只有HTTPS站点被浏览器视为安全(如显示绿色安全锁标志),但加密的HTTP仍优于未加密的HTTP。

浏览器支持

从Firefox 38(2015年5月)开始,Firefox的所有版本均支持原始版本的Opportunistic Encryption(无需证书验证)。Firefox最近在Firefox Nightly中添加了对证书验证的支持,并将在即将发布的官方版本中对其提供支持。
事实上,Chrome在QUIC中部分支持此特性。

本文由两篇文章组合而成,并没有对所有内容进行翻译。
由于本人过于咸鱼,不免出现错翻的情况,附上原文链接Opportunistic Encryption For Firefox & Opportunistic Encryption: Bringing HTTP/2 to the unencrypted web
本文采用CC BY-NC-ND 4.0许可协议进行许可,转载请注明出处。

本文最后更新时间为:2019-03-03-Sunday-11:14:03 AM




Image of Wechat