SNI 是什么?ECH 加密 SNI 对科学上网意味着什么:原理、现状与实际影响
很多人有过这样的疑问:网站已经全站 HTTPS,地址栏有小锁,传输内容都是加密的,为什么某些网站还能被精准地封掉,而同一台服务器上的另一个网站却能正常打开?答案在 TLS 握手的第一步。浏览器向服务器发出的第一个报文叫 ClientHello,里面有一个字段叫 SNI(Server Name Indication,服务器名称指示),写的就是你要访问的域名,而且是明文。网络中间的任何设备只要读这个字段,就知道你要去哪个网站,根本不需要解开后面的加密内容。
ECH(Encrypted Client Hello,加密的客户端问候)就是为堵上这个漏洞设计的:把包含真实域名的那部分 ClientHello 加密,中间设备只能看到一个「外层」的公共名称。它的前身叫 ESNI,只加密 SNI 一个字段,后来扩展成加密整个内层 ClientHello,就是现在的 ECH。这篇文章先讲 SNI 为什么存在、暴露了什么,再讲 ECH 怎么工作、现在部署到什么程度,最后回答最实际的问题:开了 ECH 还需要 VPN 吗,两者该怎么配合。
SNI 为什么必须存在:一台服务器上的多个网站
SNI 不是设计缺陷,而是必需品。一个 IP 地址上往往托管着成百上千个网站,服务器必须在握手时知道你要哪个站,才能拿出对应的证书。而这个「告诉服务器你要哪个站」的动作发生在加密建立之前,所以只能明文。中间设备读取 SNI 后可以直接丢弃报文或发送 RST 重置连接,这就是「按域名阻断」,也是很多站点在有 HTTPS 的情况下仍被精准封锁的技术基础。各协议的标准化进展以 IETF 官方文档为准。
| 技术 | 域名是否明文 | 解决的问题 | 留下的问题 |
|---|---|---|---|
| 早期 HTTPS(无 SNI) | 不涉及 | 单 IP 单证书 | 一台服务器只能放一个 HTTPS 站 |
| SNI(TLS 扩展) | 明文 | 一个 IP 上托管多个 HTTPS 站 | 中间设备可读域名并按域名阻断 |
| TLS 1.3 | SNI 仍明文 | 加密了服务器证书等更多握手内容 | SNI 与 ALPN 等仍暴露 |
| ESNI(草案) | 仅 SNI 加密 | 隐藏域名 | 其他字段仍暴露,已被 ECH 取代 |
| ECH | 内层全部加密 | 隐藏域名与大部分握手参数 | 外层公共名与 IP 仍可见,依赖 DNS |
| VPN 隧道 | 对外不可见 | 全部流量进隧道,中间只见隧道 | 隧道本身可被识别,需混淆 |
自己动手验证:分步操作步骤
- 第一步:先把线路准备好,连上刺猬VPN。安装客户端后自定义用户名和密码即可完成匿名注册,不需要邮箱、也不需要手机号,免费节点永久免费、不限流量,注册即用;全程 HTTPS+AES 加密传输;
- 第二步:先在不连线路的情况下,用浏览器访问一个你知道会被阻断的 HTTPS 站点,观察报错是「连接被重置」还是「超时」,前者往往是 SNI 阻断的典型表现,后者更多是 IP 层的丢弃;
- 第三步:换成直接用 IP 地址访问同一台服务器,或者访问同一 IP 上另一个正常的站点。如果 IP 能通、只有特定域名不通,基本可以确定是按 SNI 阻断;
- 第四步:在浏览器里确认 ECH 是否已启用。主流浏览器的新版本默认开启,但它需要配合加密 DNS 使用,在浏览器设置的「安全」或「隐私」里把 DNS over HTTPS 打开;
- 第五步:访问一个提供握手诊断的页面,看输出里 SNI 一项是否显示为已加密。显示加密说明 ECH 实际生效了;显示明文说明目标站点或 DNS 没有提供 ECH 配置;
- 第六步:观察带 ECH 的连接在你所在网络里的表现。一些网络会把带 ECH 扩展的握手直接重置,导致原本能开的站也打不开,这时候关闭 ECH 反而能恢复;
- 第七步:连上刺猬VPN后再做一遍第二到第五步。这时中间设备看到的只有隧道流量,SNI 阻断对隧道内的连接不起作用,这就是为什么 VPN 能解决 ECH 解决不了的情况;
- 第八步:iPhone 用户注意,中国大陆区 App Store 不提供 VPN 类应用,需要用外区 Apple ID 下载客户端,完整步骤见 iOS 安装教程;
- 第九步:一个刺猬VPN账号支持多设备同时在线,可以在电脑与手机上分别验证,比较不同系统浏览器的行为差异。
ECH 怎么工作:外层、内层与 DNS
ECH 把 ClientHello 分成两层。外层是明文,SNI 字段里填的是一个「公共名称」,通常是托管服务商的通用域名,中间设备看到的只有它;内层才是真正的 ClientHello,包含你要访问的真实域名,用服务器事先公开的公钥加密后塞进外层的一个扩展里。服务器收到后用私钥解开内层,按真实域名拿证书继续握手。这样同一个托管商上的所有网站,在中间设备眼里都长得一样。
问题是浏览器怎么拿到服务器的公钥。ECH 的做法是把公钥放在 DNS 的 HTTPS 记录里,浏览器在查域名 IP 的同时把它取回来。这就带来一个硬性前提:DNS 查询本身必须是加密的,否则中间设备直接从明文 DNS 里读到你要访问的域名,ECH 就白做了。所以 ECH 与 DNS over HTTPS 是绑在一起的,浏览器里通常也要同时开启。目前主流浏览器与几家大型托管商已经支持,但托管在其他地方的网站仍是明文 SNI,部署进度以各厂商官方说明为准。
ECH 与 VPN 能做什么不能做什么
这张表的结论很直接:ECH 解决的是「域名暴露」这一个点,而且只对支持它的站点生效;目标 IP 仍然可见,按 IP 阻断照样有效,中间设备也可以选择干脆重置所有带 ECH 扩展的握手。VPN 的思路完全不同——不是隐藏单个连接里的某个字段,而是把整台设备的流量都装进隧道,中间只看到你与隧道服务器之间的连接。两者不是替代关系:ECH 是网站与浏览器层面的隐私改进,VPN 是访问层面的通道。实际可用性取决于当前网络环境。
| 对比项 | 明文 SNI 的 HTTPS | 启用 ECH 的 HTTPS | VPN 隧道 |
|---|---|---|---|
| 中间设备能看到的域名 | 真实域名 | 托管商公共名 | 只有隧道服务器 |
| 能看到的目标 IP | 能 | 能 | 只有隧道服务器 IP |
| 按域名阻断 | 有效 | 对该站失效 | 无效 |
| 按 IP 阻断 | 有效 | 有效 | 对目标站无效 |
| 依赖条件 | 无 | 站点支持、加密 DNS | 客户端与线路 |
| 被识别后的处理 | 重置或丢弃 | 部分网络重置带 ECH 的握手 | 需要混淆对抗识别 |
| 覆盖范围 | 单个连接 | 支持 ECH 的站点 | 设备全部流量 |
现实里的部署与限制
ECH 的部署从几家大型 CDN 与主流浏览器开始,之后经历过短暂关停与重新启用。从用户视角看,最直观的变化是某些托管在这些 CDN 上的站点,在开启加密 DNS 的浏览器里可以正常打开,而在关闭加密 DNS 的浏览器里则被重置。另一个现实是,一些网络在观察到 ECH 流量后,选择对带 ECH 扩展的握手统一重置或降级,于是原本能开的站也开不了,浏览器往往会自动回退到明文 SNI 重试。
这意味着 ECH 在对抗封锁上的效果是不稳定的:它取决于目标站点是否支持、你的 DNS 是否加密、以及所在网络对 ECH 的态度。把它当作隐私增强的默认项是合理的,把它当作稳定的访问通道则不现实。想深入了解中间设备是如何在不解密内容的情况下识别流量特征的,见 深度包检测是什么。
和相关概念的分工
理解 SNI 的前提是理解 HTTPS 到底加密了什么、没加密什么,地址栏小锁的真实含义见 HTTP 和 HTTPS 有什么区别。新一代传输协议把握手与传输合在 UDP 上完成,SNI 与 ECH 在其中的位置有所不同,见 HTTP/3 与 QUIC 是什么。
把概念落到实际场景:流媒体平台为什么能在你连上线路后仍识别出代理,与 SNI 无关而与出口 IP 信誉有关,具体案例见 Rakuten Viki 韩剧怎么看;游戏客户端「登录得上却只有部分服务不通」的现象,往往就是不同服务的域名被区别对待,排查思路见 Ubisoft Connect 国内怎么用。
常见报错速查表
| 现象 | 原因 | 解决办法 |
|---|---|---|
| 特定 HTTPS 站点连接被重置 | SNI 被中间设备识别并阻断 | 连上线路后访问 |
| 同一 IP 上有的站能开有的不能 | 按域名阻断而非按 IP | 同上,或确认目标站是否支持 ECH |
| 开了 ECH 后原本能开的站打不开 | 所在网络重置带 ECH 的握手 | 关闭 ECH 或改走线路 |
| 诊断页显示 SNI 仍为明文 | 站点或 DNS 未提供 ECH 配置 | 确认加密 DNS 已开启,站点可能不支持 |
| 浏览器提示 ECH 回退证书错误 | 外层公共名与回退证书不匹配 | 刷新重试,或暂时关闭 ECH |
| 加密 DNS 打开后网页变慢 | DNS 解析服务距离远 | 换一个解析服务或改走线路 |
| 线路连上后仍有站点打不开 | 目标站按出口 IP 或地区限制 | 换节点地区,与 SNI 无关 |
高频问答
- 问:HTTPS 不是已经加密了吗,为什么域名还会暴露?答:HTTPS 加密的是握手完成后的内容,而告诉服务器「我要哪个站」的 SNI 发生在握手开始时,只能明文。TLS 1.3 加密了证书等更多内容,但 SNI 仍然明文;
- 问:ECH 和 ESNI 是一回事吗?答:ESNI 是早期草案,只加密 SNI 一个字段;ECH 是它的继任者,加密整个内层 ClientHello,现在讨论与部署的都是 ECH;
- 问:开了 ECH 是不是就不需要 VPN 了?答:不是。ECH 只隐藏域名,目标 IP 仍可见,且只对支持它的站点生效,所在网络还可能直接重置带 ECH 的握手。VPN 把全部流量装进隧道,解决的是另一个层面的问题;
- 问:ECH 为什么一定要配加密 DNS?答:ECH 的公钥放在 DNS 记录里,而且如果 DNS 查询是明文的,中间设备直接从 DNS 里就能读到域名,加密 SNI 就没有意义;
- 问:连上 VPN 之后 SNI 还会暴露吗?答:对中间网络不会。隧道内的连接连同它的 SNI 一起被封装,中间只看到你与隧道服务器之间的加密流量;隧道服务器出口之后到目标网站的那一段,SNI 是否明文取决于目标站是否支持 ECH;
- 问:普通用户要不要手动开 ECH?答:新版浏览器多数默认开启,配合加密 DNS 即可。遇到网站打不开时可以尝试关闭再试,把它当隐私增强项而不是访问通道。
回到实际:该怎么用这两样东西
SNI 是什么、ECH 加密 SNI 意味着什么,说到底是同一个问题的两面:HTTPS 加密了内容,却把「你要去哪」留在了明文里,SNI 阻断由此成为按域名精准封锁的基础;ECH 把这个字段藏进加密的内层,对支持它的站点确实有效,但依赖加密 DNS、依赖站点支持、还要看所在网络是否放行带 ECH 的握手。它是浏览器与网站层面的隐私改进,值得默认开着,但不是稳定的访问方案。
真正稳定的做法仍然是把整台设备的流量装进隧道。刺猬VPN 采用 HTTPS+AES 加密传输,客户端提供混淆功能应对流量识别,支持自定义用户名和密码匿名注册,不需要邮箱和手机号;免费节点永久免费、不限流量、注册即用,验证与日常浏览用免费节点就够;时长套餐按周月年计费、期间不限流量不限速;覆盖 20 多个国家、100 多台服务器,一个账号支持多设备同时在线。ECH 的标准化进展与各浏览器、托管商的部署状态会持续变化,以官方最新说明为准,实际可用性取决于当前网络环境。
开始使用刺猬VPN:HTTPS+AES 加密、零日志,匿名注册无需邮箱
刺猬VPN提供永久免费节点,不限流量;无需邮箱,自定义用户名即可匿名注册。一个账号支持多设备同时在线,实际可用性取决于当前网络环境。