加密的服务器名称指示(ESNI)有助于保护用户浏览的私密性。这是通过对 TLS 握手中以前未加密的部分进行加密来实现的,该部分可以显示用户正在访问哪个网站。
阅读本文后,您将能够:
复制文章链接
加密的服务器名称指示(ESNI)是保护用户浏览数据的私密性的一项重要功能。它确保正在侦听的第三方无法监视 TLS 握手流程并以此确定用户正在访问哪些网站。顾名思义,ESNI 通过加密 TLS 握手的服务器名称指示(SNI)部分来实现其目的。
SNI 告诉 Web 服务器在客户端与服务器之间的连接开始时显示哪个 TLS 证书。SNI 是 TLS 协议的补充,它使服务器可以在同一 IP 地址上托管多个 TLS 证书。
可以将 SNI 视为邮寄地址的公寓号码:一栋大楼中有多间公寓,因此每间公寓都需要一个不同的编号来加以区分。类似地,虽然服务器由 IP 地址标示,但是客户端设备需要在其发送给服务器的第一条消息中包括 SNI,以指示其试图访问哪个网站(哪间公寓)。
传输层安全性(简称 TLS)是一种加密协议,可确保 Internet 通信的私密性和安全性。TLS 主要用于加密应用程序和 Web 服务器之间的通信,例如在 Web 浏览器加载网站时。所有使用 TLS 的网站都必须具有 TLS 证书。TLS 有时称为 SSL,但 SSL 是该协议的过时名称。
所有 TLS 连接均以“握手”开始。就像现实生活中两个人见面,自我介绍时会握手一样,TLS 握手是客户端设备(例如用户的智能手机)与 Web 应用程序或网站之间的一系列介绍性通信。在 TLS 握手期间,两个通信设备就使用的加密密钥以及其他步骤达成共识。尽管涉及许多步骤,但 TLS 握手仅花费几毫秒的时间。
SNI 是 TLS 握手第一步中微小却重要的组成部分。TLS 握手中的第一条消息称为“客户端问候”。作为此消息的一部分,客户端要求查看 Web 服务器的 TLS 证书。服务器回应时将发送证书。
问题是,许多 Web 服务器会托管一个以上的网站,并且可能每个网站都有自己的 TLS 证书。如果服务器向客户端显示错误的证书,客户端将无法安全连接到所需网站,从而导致出现“ 您的连接非私密”错误。
SNI 通过标示客户端正在尝试访问哪个网站来解决此问题。矛盾的是,只有在使用 SNI 成功完成 TLS 握手后,才能进行加密。结果,由于客户端问候消息是在 TLS 握手开始时发送的,普通 SNI 不会被加密。任何监视客户端和服务器之间连接的攻击者都可以读取握手的 SNI 部分,以此确定客户端正在与哪个网站建立连接,即便攻击者无法解密进一步通信。(攻击者可以通过多种方式使用此信息,例如,建立一个钓鱼网站来欺骗用户。)
ESNI 通过加密客户端问候消息的 SNI 部分(仅此部分),来保护 SNI 的私密性。加密仅在通信双方(在此情况下为客户端和服务器)都有用于加密和解密信息的密钥时才起作用,就像两个人只有在都有储物柜密钥时才能使用同一储物柜一样。由于客户端问候消息是在客户端和服务器协商 TLS 加密密钥之前发送的,因此 ESNI 加密密钥必须以其他方式进行传输。
解决方案:公钥加密。Web 服务器在其 DNS 记录中添加一个公钥,这样,当客户端查找正确的服务器地址时,同时能找到该服务器的公钥。这有点像将房门钥匙放在屋外的密码箱中,以便访客可以安全地进入房屋。然后,客户端即可使用公钥来加密 SNI 记录,以便只有特定的服务器才能解密它。(这是简单说明;有关详细的技术说明,请参阅此博客文章。)
假定爱丽丝想访问鲍勃的网站 www.bobisawesome.example.com。像每个负责的网站所有者一样,鲍勃对其网站使用 TLS,以便对往返网站的所有流量进行加密。鲍勃还部署了 ESNI,以进一步保护爱丽丝这样的网站访问者。
当爱丽丝在笔记本电脑的浏览器中输入 https://www.bobisawesome.example.com 时,笔记本电脑将通过以下流程加载网站:
* 仅当流程的 DNS 部分使用 DNSSEC 以及 HTTPS 上的 DNS 或 TLS 上的 DNS 时,最后一个语句才为真。更多信息见下方。
ESNI 是保护网络隐秘性和安全性的重要步骤,但其他新协议和功能也很重要。设计 Internet 时并未考虑安全性和隐私性,因此,在访问网站的过程中有很多步骤都是非私密的。但是,有各种新协议都有助于对每个步骤进行加密,使之免受恶意攻击者的攻击。
域名系统或 DNS 将人类可读的网站地址(如 www.bobisawesome.example.com)与字母数字 IP 地址进行匹配。这就像在所有人都使用的大型地址簿中查找某人的地址一样。但是,普通的 DNS 未加密,这意味着任何人都可以看到某人正在查找哪个地址,并且任何人都可以伪装成地址簿。即使安装了 ESNI,攻击者仍然可以查看用户正在查询的 DNS 记录,并确定他们正在访问哪些网站。
其他三个附加协议旨在弥补这些空白:基于 TLS 的 DNS、基于 HTTPS 的 DNS,以及 DNSSEC。
基于 TLS 的 DNS 和基于 HTTPS 的 DNS 都在做同样的事情:使用 TLS 加密来加密 DNS 查询。它们之间的主要区别在于使用网络的哪个层以及使用哪个网络端口。DNSSEC 确认 DNS 记录真实并来自合法的 DNS 服务器,而非来自冒充 DNS 服务器的攻击者(例如,发生 DNS 缓存中毒攻击时)。
加密客户端问候 (ECH) 是 TLS 协议的另一个扩展,它通过加密保护客户端问候的 SNI 部分。但是,与 ESNI 不同的是,ECH 会加密整个客户端问候。在此博客文章中了解有关 ECH 的更多信息。
自 2018 年 9 月以来,Cloudflare 网络一直支持 ESNI。Cloudflare 不仅是首个支持 ESNI 的主要网络,而且在开发 ESNI 过程中发挥了重要作用。ESNI 尚未作为正式的 RFC 或 Internet 标准发布,但已开始制定 RFC 草案。
使用此免费的 ESNI 检查器工具检查浏览器的安全性、隐私性和 ESNI 使用情况。了解有关创建 SNI 的原因或TLS 握手的工作方式的更多信息。