跳转到内容
搜索文档

ECH 协议

最后更新 查看 MarkdownAgent 设置

ECH 代表 Encrypted Client Hello。它是传输层安全 (TLS) 背景下的协议扩展。ECH 加密握手的一部分,并掩盖用于协商 TLS 会话的 Server Name Indication (SNI)。这意味着,每当用户访问已启用 ECH 的 Cloudflare 网站时,中间方可以看到您正在访问 Cloudflare 上的网站,但无法确定具体是哪一个。

ECH 的作用

ECH 限制有关特定用户正在访问您网站的信息被访问,确保这些信息不会不必要地与中间方(例如互联网服务提供商 (ISP))共享。借助 ECH,当用户访问您的网站时,有关其访问的具体细节不再泄露给网络中间方。

ECH 的工作原理

在典型的 TLS 握手中,客户端向服务器发送 ClientHello 消息以启动 TLS 会话。该消息包含重要信息,包括支持的加密算法列表、TLS 版本,以及所请求的服务器名称(客户端希望连接的网站域名)。服务器名称通过 Server Name Indication (SNI) 指示。

使用 ECH 时,ClientHello 消息部分被拆分为两个独立消息:内部部分和外部部分。外部部分包含非敏感信息,例如要使用的密码和 TLS 版本,以及“外部 ClientHello”。内部部分经过加密,包含“内部 ClientHello”。

外部 ClientHello 包含一个通用名称 (SNI),表示用户正在尝试访问 Cloudflare 上的加密网站。我们选择 cloudflare-ech.com 作为 Cloudflare 上所有网站共享的 SNI。由于 Cloudflare 控制该域名,我们拥有适当的证书,能够为该服务器名称协商 TLS 握手。

内部 ClientHello 包含用户实际尝试访问的服务器名称。它使用公钥加密,只有 Cloudflare 可以读取。握手完成后,网页会正常加载,就像通过 TLS 加载的任何其他网站一样。

实际上,这意味着任何查看您流量的中间方只会看到正常的 TLS 握手,但有一点例外:到 Cloudflare 上启用 ECH 的服务器名称的任何流量看起来都相同。每个 TLS 握手都会看起来一样,即看起来像是在尝试为 cloudflare-ech.com 加载网站,而不是实际网站。

在下面的示例中,用户正在访问 example.com。没有 ECH 时,任何中间网络都能检测到用户正在访问的网站。有了 ECH,可见信息将仅限于 cloudflare-ech.com


flowchart LR
accTitle: What intermediaries see with and without ECH
accDescr: This diagram describes what intermediaries see with and without ECH.
A(User visits <code>example.com</code>)
    A -- With ECH --> C(intermediaries see <code>cloudflare-ech.com</code>)-->B(Cloudflare)
    A -- Without ECH  --> D(intermediaries see <code>example.com</code>)-->B(Cloudflare)

有关 ECH 协议技术的更多详情,请参阅我们的介绍性博文

启用 ECH

Free zone 默认启用 ECH。其他方案可按照以下步骤开启或关闭。

  1. 在 Cloudflare 仪表板中,前往 Edge Certificates(边缘证书) 页面。

    Go to Edge Certificates ↗
  2. 对于 Encrypted ClientHello (ECH),将设置更改为 Enabled(已启用)

企业网络适用性

某些企业或区域网络可能需要审计或对穿越其网络的流量应用过滤策略。这些策略以域名而非 IP 地址表示。因此,最好在本地 DNS 解析器上,针对各个域名的 AAAAA 查询响应应用这些策略。

不过,对于不适用基于 DNS 的过滤的设置,网络有两种方式可以禁用 ECH,以便现有过滤机制继续按预期工作。

最可靠的方式是通过本地或递归 DNS 解析器本身,从返回给客户端的 HTTPS 资源记录中删除 ECH 配置,或者更好的是,对 HTTPS 查询返回“no error no answer”或 NXDOMAIN 响应。这可防止客户端获取使用 ECH 所需的信息。请注意,修改 HTTPS 资源记录可能导致执行 DNSSEC 验证的客户端失败,因此删除 HTTPS 响应可能是更可取的方法。这将阻止 Chrome 等浏览器使用 ECH。

第二种禁用 ECH 的方式是通过网络 canary 域名。具体而言,您网络的 DNS 解析器可以对发往 use-application-dns.net canary 域名 的查询返回“no error no answer”或 NXDOMAIN 响应。这将阻止 Firefox 等浏览器使用 ECH。更多信息请参阅 Firefox 关于 Encrypted Client Hello 的常见问题页面

这篇文档对您有帮助吗?