SNI 与 ECH 加密

百科词条 · VPS 术语 · 亦称 SNI / Server Name Indication / ESNI / ECH / Encrypted Client Hello

SNI(服务器名称指示,RFC 6066)允许客户端在 TLS 握手初期以明文告知服务器目标主机名以实现单 IP 多证书虚拟托管;由于明文 SNI 成为现代网络审查与阻断的核心特征,IETF 推出了 ECH(Encrypted Client Hello,结合 RFC 9180 HPKE 与 RFC 9460 HTTPS 记录),将真实握手信息嵌套加密于公开的外层外壳中,实现 TLS 元数据的全链路隐私保护。

SNI 的诞生背景与单 IP 多证书托管

在早期 SSL/TLS 协议中,服务器必须在读取应用层 HTTP 报头前向客户端出示数字证书。当单台边缘服务器或单个 IP 托管数百个不同域名的 HTTPS 站点时,服务器无法预知客户端意图访问的具体主机。RFC 6066 引入了 SNI 扩展,客户端在首个明文 ClientHello 数据包中携带目的域名,使虚拟主机共享 IP 架构得以在全网大规模普及。

查看来源

明文 SNI 的审查利用与被动阻断

虽然 TLS 1.3 对后续握手证书及应用数据实施了高强度加密,但最开头的 ClientHello 中的 SNI 字段在历史上一直以纯明文发送。这使得边界防火墙与网络审计设备仅凭旁路监听 TCP 443 端口的初始握手,就能精确提取出用户访问的目标域名,进而通过注入 TCP RST 伪造复位包或黑洞丢包实施精准阻断。

从 ESNI 到 ECH:架构彻底重构

早期的 ESNI(加密 SNI)仅加密了域名字符串,但 ClientHello 中的 ALPN、支持的加密套件等参数依然明文暴露,极易遭受指纹识别与降级攻击。IETF 进而推出全新的 ECH(Encrypted Client Hello)标准:客户端构造两个握手报文——外层明文报文(ClientHelloOuter)仅暴露合法的公共域名(Outer SNI,如 CDN 共有域名),内层真实报文(ClientHelloInner)包含敏感目的域名及私有参数,被整体嵌套加密。

查看来源

HPKE 密码学绑定与 DNS SVCB/HTTPS 引导

ECH 依赖 RFC 9180 定义的混合公钥加密(HPKE)标准提供密码学保障,并将外层明文报文作为关联数据(AAD)绑定加密,彻底防范中间人篡改。获取服务器公钥则依赖 RFC 9460 标准定义的 DNS HTTPS/SVCB 资源记录:客户端先通过加密 DNS(DoH/DoT)预取目标域名的 ECHConfig 配置参数,在向边缘服务器发起 TCP 连接前即已安全获取公钥。

查看来源

代理协议中的借壳伪装实践(以 Reality 为例)

在境外 VPS 与代理实践中,VLESS-Reality 等现代协议针对明文 SNI 审查开创了「借壳偷渡」方案:服务器不再自建证书,而是直接借用 Apple、Microsoft 等知名大厂域名的真实 TLS 证书与 SNI 特征;遇到审查探针时直接将其无缝代理转发至真实目标站点,而客户端则通过预共享私钥完成内部真实流量的解密与鉴权,彻底终结了自签证书与冷门域名易被主动探测封锁的痛点。

参考资料