在当今网络环境中,隐私保护变得越来越重要。现如今许多网络通信使用了一种叫做传输层安全(TLS)的安全协议,它通过加密你的数据保护安全。不过,有个问题:这种保护要通过发起「问候」开始,又称「握手」。而问题在于:这个“打招呼”过程最初是明文的,会直接暴露你想访问的网站名称。
这就是为什么 Encrypted Client Hello 技术的出现如此重要——它填补了 HTTPS 加密的最后一块拼图,实现了真正的端到端隐私保护。本文将深入探讨 ECH 技术原理、当前支持状况,并提供在 Cloudflare 和你的 Caddy 服务器上启用 ECH 的详细指南,帮助你为网站构建完整的隐私保护屏障。
什么是 Encrypted Client Hello?
Encrypted Client Hello (ECH) 是 ESNI 的继任标准,它遮掩了用于协商 TLS 握手的服务器名称指示 (SNI)。这意味着只要用户访问启用了 ECH 的网站,除了用户和网站所有者之外,任何人都无法确定访问的是哪个网站。
每次你打开一个网站,你的浏览器都会先向网站的服务器「打招呼」,说「我想看这个 /奶茶店 的页面」;服务器收到后,就把奶茶店的详细内容发回来,然后你就能看到了。但在互联网刚出现的时候,这种「对话」是用「明文」进行的——就像大声说话一样,谁都能听清楚。
这意味着你在上网时,公司网络、你的宽带运营商,甚至中间经过的任何网络,都有可能看到你访问了什么、做了什么。比如,如果你在银行网站转账,别人可能连你转给谁、转了多少钱都看得一清二楚。这显然很不安全。
正因为这样,很多关心隐私的人一直担心这种「裸奔」式的上网方式会泄露太多个人信息。毕竟,谁都不希望自己的网络行为被陌生人看个底朝天,对吧?
那么,怎么才能让我们的上网数据变得更安全、更私密呢?为了解决被「偷听」的问题,人们发明了加密技术——最早是 SSL,后来升级成了更安全的TLS。这些技术就像是给你的网络通信加上了一把锁,让别人即使能看到你在传数据,也完全看不懂内容。
这样一来,不光你的隐私得到了保护,别人也没法偷偷篡改你正在浏览的网页,或者修改你上传的信息,比如填好的表单或转账金额。可以说,SSL/TLS 让上网安全迈出了关键一步!
ECH 可以做到什么呢?
尽管 TLS 和 DoH 已经在保护隐私方面迈出了重要一步,但你在互联网上访问网站的全过程,依然存在一些「蛛丝马迹」可能被看到。比如,当你连接一个网站时,即使地址和内容都加密了,中间的网络仍有可能通过某些细节猜出你去了哪里。不过有了 ECH,你的浏览器在建立安全连接时,不再直接暴露你想访问的具体网站名称。
这就像你走进了一家大型商场,门口的保安能看到你进入了商场,但看不到你具体进了哪家店铺。无论是买书、买衣服,还是去咖啡馆,外人都无法追踪你的行踪。和之前的技术相比,ECH 补上了隐私保护的最后一环,让整个访问过程更加私密、更加安全。
那么 ECH 不能做到什么呢?
乍一看 ECH 确实有诸多好处,那么 ECH 不可以做到什么呢?
- ECH 只加密 TLS 握手中的 SNI 字段,但目标服务器的 IP 地址仍然可见。ISP 或防火墙可以通过 IP 地址推断你访问的是哪家服务商或网站,尤其是当该网站使用独立 IP 时
- ECH 不能保护未加密 DNS 泄露用户访问域名的情况,所以现代浏览器强制要求使用 DoH 以规避此类问题
- ECH 需要服务器端支持,同时服务端的权威 DNS 需要支持
HTTPS记录 - ECH 需要客户端的 DNS 支持解析
HTTPS记录。如果终端用户的系统/浏览器不支持,ECH 也将无法启用 - ECH 只支持 TLS v1.3 和未来的更高版本,旧版本不支持启用
- ECH 保护的是从你到服务器的路径上不被窥探访问目标。但它对网站内部的追踪完全无效。推荐配合 uBlock Origin 等插件食用
迫不及待想试试,从哪开始呢?
如果你对这项技术感兴趣,选择一个支持 ECH 的浏览器即可快速开始:Firefox 自 119 版本起,Chrome 自 117 版本起已默认启用 ECH。其他浏览器可以参考其使用的内核推断是否支持。
现在你可以访问测试站点测测是否支持啦:tls-ech.dev,如果支持,则会显示 You are using ECH
如果没有,请尝试按照接下来的教程设置你的浏览器,正如上文提到的,浏览器需要在 DoH 的环境下方可启用 ECH:
Google Chrome

在 Chrome 中,您可以通过以下步骤开启 DoH 功能:
- 打开 Chrome 浏览器的设置,然后依次点击 “隐私和安全” -> “安全”
- 转到“高级”处,启用 使用安全 DNS。然后选择一个 DNS 提供商(不推荐 CloudFlare,可以从下方列表里选择)
Microsoft Edge
- 打开 Edge 浏览器,进入隐私设置页面:在地址栏中输入
edge://settings/privacy并按下回车键 - 在隐私设置中,您可以找到 DNS over HTTPS 选项,输入下方任意一个 DNS 查询地址
Edge 貌似有额外的开启 Encrypted Client Hello 步骤,具体如下:
- 在 Edge 浏览器的桌面快捷方式上,右键点击并选择“属性”。
- 在“目标地址”后面添加参数:
--enable-features=EncryptedClientHello
Firefox

- 点击屏幕右上角的菜单按钮,选择 设置
- 左侧点击 隐私与安全
- 向下滚动至 HTTPS 上的 DNS 部分
- 选择「最大保护」,可以自定义填入下方任意 DNS 地址
# 推荐性排序
https://sm2.doh.pub/dns-query
https://dns.alidns.com/dns-query
https://dns.xmsl.im/dns-query
https://dns.sb/dns-query
https://dns.quad9.net/dns-query
https://dns.dnswarden.com/adblock
https://dns.dnswarden.com/uncensored
https://private.canadianshield.cira.ca/dns-query
https://protected.canadianshield.cira.ca/dns-query
https://family.canadianshield.cira.ca/dns-query
你可以回到上文提到的测试站点(如 tls-ech.dev 或 defo.ie)验证是否已成功启用 ECH。如果还是没有,请跳转到博文最下方的疑难解答↓↓
在 Cloudflare 上启用 ECH
如果你恰好有在 Cloudflare 上托管的站点,那么你的站点大概率是默认开启了 ECH 的!你只需要按上文设置好浏览器,即可在 /cdn-cgi/trace 查看自己的 sni 是否为 encrypted,如果出现 encrypted 则代表 ECH 成功使用!
Pro 及以上版本套餐稍微麻烦一点,按 官方文档 的教程步骤如下:
- 登录 Cloudflare dashboard
- 选择帐户和区域
- 转到 SSL/TLS > 边缘证书
- 对于 ECH,将设置更改为已启用
在 Caddy 上启用 ECH
对于有自己基础设施的读者来说,使用 Cloudflare 并非是一个很好的主意,我们可以使用 Caddy 2.10 引入的 ECH Support 来实现这一点。
在开始之前需要注意默认 Caddy 二进制文件不含任何 DNS 插件,对此部分需要自行使用 xcaddy 构建(xcaddy build --with github.com/caddy-dns/cloudflare 或使用我的 docker pull liuzhen932/app-caddy:latest)
现在我们可以开始配置 ECH 了,使用 nano 来编辑 Caddy 的配置文件:
nano /etc/caddy/Caddyfile
写入如下内容:
{
dns cloudflare {env.CF_API_KEY}
ech ech.fur.w
}
fur.w {
respond "Meet Encrypted Client Hello!"
}
注意这里的 ech.fur.w 是 ECH 特有的表层 ClientHello,推荐为多个站点使用(越多站点使用越不容易被猜测具体目标站点),而 fur.w 才是真正要访问的地址,这两个域名均需要解析到 Caddy 服务器上!
检查无误,让我们启动 Caddy:
# 注意替换你的 Cloudflare API Key,需要 Zone:Read 和 Zone:Edit 两个权限
docker run --rm -it -e CF_API_KEY=11454114514 -v ./Caddyfile:/etc/caddy/Caddyfile -p 80:80 -p 443:443 liuzhen932/app-caddy:latest
在经过一段初始输出后,我们通过 dig 来查询 fur.w 的 HTTPS RR (Type 65) 记录:
dig HTTPS +short fur.w
返回结果是这样的
1 . ech=AEf+...
其中 1 是 SvcPriority,. 是 TargetName,后面的是 SvcParam。SvcParam 使用空格分开,这里我们只定义了 ech 一个 Param,实际上在 RFC9460 里还定义了更多 Params,感兴趣的可以点击链接前往查看。
(未完待续)
疑难解答
ECH 没有生效
- 如果配置了系统代理或 HTTP/HTTPS/SOCKS 等代理,需要关闭代理;你可以使用 TUN 以在 ECH 基础上加密传输
- 部分站点清空缓存后强制刷新会使 ECH 生效