订阅以接收新文章的通知:

Encrypted Client Hello - 隐私的最后一个组成部分

2023-09-29

4 分钟阅读时间
这篇博文也有 English日本語한국어繁體中文版本。

今天,我们很高兴地宣布为改善互联网上每个人的隐私做出了贡献。Encrypted Client Hello 是一项提议的新标准,可防止网络窥探用户访问的网站,现已在所有 Cloudflare 计划中可用。

Encrypted Client Hello - the last puzzle piece to privacy

Encrypted Client Hello (ECH) 是 ESNI 的继任标准,它遮掩了用于协商 TLS 握手的服务器名称指示 (SNI)。这意味着只要用户访问 Cloudflare 上启用了 ECH 的网站,除了用户、Cloudflare 和网站所有者之外,任何人都无法确定访问的是哪个网站。Cloudflare 非常重视每个人的隐私,并对这项技术的应用前景感到兴奋。

浏览互联网和您的隐私

每当您访问一个网站时,您的浏览器都会向 Web 服务器发送一个请求。Web 服务器以内容作为响应,网站开始在您的浏览器中加载。早在互联网诞生之初,这种情况是以“明文”形式出现的,也就是说,您的浏览器通过网络发送的内容,所有人都可以读取:您用于浏览的公司网络、为您提供互联网连接的互联网服务提供商,以及请求在到达托管网站的 Web 服务器之前所经过的任何网络。长期以来,隐私权倡导者一直担心“明文”会泄露多少信息:如果您和 Web 服务器之间的任何网络都能看到您的流量,这意味着他们也能看到您正在做的事情。如果您发起的是银行转账,任何中间方都可以看到转账的目的地和金额。

那么,如何使这些数据更加私密呢?为了防止窃听,人们引入了 SSL 和后来的 TLS 形式的加密技术。这些了不起的协议不仅能保护您的隐私,还能确保任何中间方都无法篡改您浏览或上传的任何内容。但是,加密技术也仅限于此。

虽然实际内容(您正在访问网站上的哪个特定页面以及您上传的任何信息)是加密的,不会被中间方发现,但仍有一些方法可以确定用户正在做什么。例如,通过 DNS 请求确定所访问网站的地址 (IP) 和 SNI 都是中间方跟踪使用情况的常用方法。

让我们从 DNS 开始。每当您访问一个网站时,您的操作系统都需要知道要连接到哪个 IP 地址。这是通过 DNS 请求实现的。默认情况下,DNS 是未加密的,这意味着任何人都能看到您所请求的网站。为了帮助用户遮盖这些请求,使中间方无法看到其内容,Cloudflare 在 2019 年推出了 DNS over HTTPS (DoH)。2020 年,我们更进一步,推出了 Oblivious DNS over HTTPS,即使 Cloudflare 也无法看到用户询问的网站。

这样,SNI 就成了最后一个未加密的位,中间方可以利用它来确定您访问的是哪个网站。执行 DNS 查询后,浏览器要做的第一件事就是执行 TLS 握手。握手包含几个步骤,包括使用哪种密码、哪种 TLS 版本以及哪种证书将用于验证 Web 服务器的身份。在握手过程中,浏览器将显示它打算访问的服务器(网站)名称:服务器名称指示。

由于会话尚未加密,并且服务器不知道要使用哪个证书,因此浏览器必须以明文形式传输此信息。以明文形式发送 SNI 意味着,任何中间方只需检查用于连接的第一个数据包,就能了解您正在访问哪个网站:

这意味着,尽管 TLS 和 DoH 做出了巨大努力,但您在互联网上访问的网站仍然不是真正的隐秘。今天,我们通过 ECH 为这一难题添上了最后一块缺失的拼图。有了 ECH,浏览器会与 Cloudflare 进行 TLS 握手,但不会使用特定于客户的主机名。这意味着,虽然中间方可以看到您正在访问 Cloudflare 上的_一个_网站,但他们永远无法确定您访问的是哪个网站。

ECH 如何运作?

要解释 ECH 如何运作,首先要了解 TLS 握手是如何进行的。TLS 握手会以 ClientHello 部分开始,它允许客户端说出要使用的密码、TLS 版本,以及(最重要的)它要访问的服务器 (SNI)。

使用 ECH 时,ClientHello 消息部分被分成两个独立的消息:内部部分和外部部分。外部部分包含非敏感信息,如要使用的密码和 TLS 版本。它还包括一个“外部 SNI”。内部部分已加密,包含“内部 SNI”。

外部 SNI 是一个普通名称,在我们的案例中,它表示用户正在尝试访问 Cloudflare 上的加密网站。我们选择 cloudflare-ech.com 作为所有网站在 Cloudflare 上共享的 SNI。由于 Cloudflare 控制着该域,因此我们拥有相应的证书,能够为该服务器名称协商 TLS 握手。

内部 SNI 包含用户试图访问的实际服务器名称。该信息使用公钥加密,只有 Cloudflare 才能读取。一旦握手完成,网页就会正常加载,就像通过 TLS 加载其他网站一样。

在实践中,这意味着任何试图确定您正在访问哪个网站的中间方都将只看到正常的 TLS 握手,但有一点需要注意:您在 Cloudflare 上访问启用了 ECH 的网站时,服务器名称看起来都是一样的。每次 TLS 握手看起来都是一样的,因为它看起来像是在试图加载 cloudflare-ech.com 的网站,而不是实际的网站。对于不希望中间方看到其所访问网站的用户,我们已经解决了保护用户隐私的最后一个难题。

有关 ECH 技术的全部细节,请访问我们的介绍性博客

隐私的未来

我们很期待看到这对互联网隐私的影响。Google ChromeFirefox 等浏览器已经开始加强对 ECH 的支持。如果您经营一家网站,并且您希望用户在访问您的网站时不会被任何中间方看到用户在做什么,请立即在 Cloudflare 上启用 ECH。我们已经为所有免费区域启用了 ECH。如果您是现有的付费客户,只需前往 Cloudflare 仪表板申请该功能即可。我们将在未来几周内为所有报名客户启用此功能。

随着时间的推移,我们希望其他人也能跟随我们的脚步,为所有人打造一个更加私密的互联网。提供 ECH 的供应商越多,人们就越难监听用户在互联网上的行为。说不定,我们还能彻底解决隐私问题。

如果您想了解有关 ECH 的更多信息、其运作原理以及启用方法,请访问我们的 ECH 开发人员文档

我们保护整个企业网络,帮助客户高效构建互联网规模的应用程序,加速任何网站或互联网应用程序抵御 DDoS 攻击,防止黑客入侵,并能协助您实现 Zero Trust 的过程

从任何设备访问 1.1.1.1,以开始使用我们的免费应用程序,帮助您更快、更安全地访问互联网。要进一步了解我们帮助构建更美好互联网的使命,请从这里开始。如果您正在寻找新的职业方向,请查看我们的空缺职位
Birthday Week产品新闻Encrypted SNIResearch

在 X 上关注

Cloudflare|@cloudflare

相关帖子

2024年10月24日 13:00

Durable Objects aren't just durable, they're fast: a 10x speedup for Cloudflare Queues

Learn how we built Cloudflare Queues using our own Developer Platform and how it evolved to a geographically-distributed, horizontally-scalable architecture built on Durable Objects. Our new architecture supports over 10x more throughput and over 3x lower latency compared to the previous version....

2024年10月08日 13:00

Cloudflare acquires Kivera to add simple, preventive cloud security to Cloudflare One

The acquisition and integration of Kivera broadens the scope of Cloudflare’s SASE platform beyond just apps, incorporating increased cloud security through proactive configuration management of cloud services. ...

2024年9月27日 13:00

Network trends and natural language: Cloudflare Radar’s new Data Explorer & AI Assistant

The Cloudflare Radar Data Explorer provides a simple Web-based interface to build more complex API queries, including comparisons and filters, and visualize the results. The accompanying AI Assistant translates a user’s natural language statements or questions into the appropriate Radar API calls....