
Firefox是第一个实现
TLS服务器名称指示(SNI)加密的浏览器。 在最新版本的Firefox Nightly中
引入了对ESNI的支持,所有创新都在此基础上进行了滚动,然后再添加到主分支中。
CloudFare CDN提供商
在一个月前
讨论了该标准的重要性。 简而言之,ESNI会加密有关要将请求发送到哪个域的信息。 在标准HTTPS中,带有域名的标头未加密,可供提供者或其他“中间人”查看。 现在,他仅看到IP地址。 由于现代互联网上数百个域可以位于同一IP地址上,因此ESNI有效地隐藏了有关用户登录到哪个域的信息。
因此,按名称进行屏蔽不再起作用,并且Internet审查变得非常复杂。 审查员将不得不阻止IP地址,这是一种可疑的做法。 这样的阻止可能会影响不相关的站点,并且被阻止的服务可以轻松地(自动)切换到另一个IP地址。
为什么主机名会在常规TLS SNI中发光? 事实是,在开始加密之前,服务器需要知道客户端正在访问哪个域以便提供必要的证书。 因此,主机名以纯文本格式传输(
在Cloudflare博客的插图下方)。

在加密的SNI(ESNI)中,此问题按以下方式解决:客户端从DNS获取服务器的公钥,并使用它对所有数据进行加密,直到建立TLS会话为止。

浏览器对Firefox Nightly的支持意味着ESNI将与支持它的每个站点/提供商一起使用。
Mozilla开发人员
解释说,有四种主要方法可以泄漏您的浏览历史记录:
- TLS证书消息
- DNS名称解析
- 服务器IP地址
- TLS服务器名称指示。
迄今为止,他们在关闭前两个泄漏通道方面取得了良好进展:新的TLS 1.3标准对默认服务器证书(通道1)进行了加密,并且在过去的几个月中,Mozilla一直在
研究使用HTTPS上的DNS来保护DNS流量(通道2)。 测试结果还不错,并且在接下来的几个月中将为所有Firefox用户推出该功能。 IP地址仍然是一个问题,但是在许多情况下,几个站点共享相同的IP地址,因此主要的泄漏通道是SNI。
一次,正是由于几个主机位于同一IP地址上,服务器名称指示(SNI)技术才开始被使用。 在这种情况下,SNI字段会告诉服务器您尝试连接到哪个主机,从而允许它选择正确的证书。 换句话说,SNI有助于确保大规模TLS托管的运行。 也就是说,为了安全起见引入了此功能,现在我们必须将其作为数据泄漏通道来处理。
Mozilla开发人员写道,SNI问题早已为人所知,很明显,此字段需要加密。 但是他们尝试的每个设计都在性能上有所妥协。 还有一个重要的缺点:特定站点正在切换到ESNI,这表明它“有一些隐藏的东西”,也就是说,检查员有机会对ESNI进行流量过滤。 最后,决定发布不带ESNI的TLS 1.3标准。
仅在2018年初,开发人员才意识到有一个不错的选择:大型内容分发网络(CDN)在同一台物理服务器上托管许多站点。 如果他们同意立即将
所有客户端转移到ESNI,则突然之间ESNI不再是攻击者的有用信号。 因此,通过批量定制一组现有服务器上的许多站点,可以在TLS 1.3中实现ESNI。
ESNI是一项全新技术,而Firefox是第一个实现该技术的浏览器。 要在Firefox Nightly中激活它,您必须完成以下步骤:
- 确保已启用HTTPS (DoH)上的DNS :
about:config
- 将
network.trr.mode
设置为2

- 将
network.trr.uri
设置为DoH服务器(例如, https://mozilla.cloudflare-dns.com/dns-query
//mozilla.cloudflare-dns.com/dns-query)。

about:config
- 将
network.security.esni.enabled
设置为true

这将自动为支持它的任何站点启用ESNI。 目前,在大型托管服务商和CDN中,这只是Cloudflare,但Firefox开发人员希望其他提供商会尽快连接。 您可以通过
此链接检查加密。

在接下来的几个月中,Mozilla将测试ESNI如何与不同类型的防火墙和其他网络设备进行交互。 如果您打开了加密功能
但发生了故障-请通过错误跟踪器
通知开发人员 。

