首页/安全/加密与证书速查/加密客户端问候(ECH)
TLS 与 HTTPS60 条

加密客户端问候(ECH)

ECH(Encrypted Client Hello)把包含 SNI 的敏感握手字段整体加密,只有部署了对应密钥的服务端与客户端能解密,用于降低按域名进行流量分析的可行性;依赖 DNS 的 HTTPS 记录提供配置。

加密与证书速查安全更新于 2026-10-13

ECH 是什么

ECH(Encrypted Client Hello)把 ClientHello 里最敏感的字段(首当其冲是 SNI)整体加密,只留一段不含目标域名的外层问候明文可见。密钥来自 DNS:域名的 HTTPS/SVCB 记录公布 ECH 配置(公钥与配置标识),客户端用它加密内层 ClientHello,服务端(常见是 CDN 边缘)持私钥解密。这样中间观察者只能看到客户端访问了某个 CDN,无法直接得知具体域名,抑制了基于 SNI 的流量分类与阻断。

基本信息

解决的问题TLS 1.3 中 SNI 仍以明文传输,暴露访问目标
实现方式客户端用配置公钥加密内层 ClientHello,外层只暴露公共信息
前置条件DNS 的 HTTPS/SVCB 记录提供 ECH 配置,服务端支持并持有私钥
相关记录RFC 9460 定义的 SVCB/HTTPS 记录类型
现状主流浏览器与部分 CDN 已支持,是否生效取决于部署版本

典型使用场景

  • 隐私要求高的站点:不希望访问目标被中间网络直接观察。
  • CDN 接入核对:确认边缘节点已下发 ECH 配置并正确解密内层问候。
  • 排障对比:ECH 未生效时会回退明文 ClientHello,需要确认是回退而不是失败。
  • DNS 配置审计:检查 HTTPS 记录是否随证书或密钥轮换及时更新。
  • 合规与威胁建模:评估在现有网络环境下 ECH 能挡住哪一类观察者。

查看 ECH 相关配置

查看 ECH 相关配置
dig +short HTTPS example.com | head -3      # 看 SVCB/HTTPS 记录是否带 ech 参数
dig +short TYPE65 example.com | head -3      # 类型 65 即 HTTPS 记录的另一种查法
# 用支持的客户端抓包对比:开启后外层 ClientHello 不应再出现目标域名
# tshark -r ech.pcap -Y 'tls.handshake.extensions_server_name' -T fields -e tls.handshake.extensions_server_name

观察点与判定

观察点ECH 生效未生效或回退
外层 ClientHello 的 SNI不出现真实目标域名直接出现目标域名
DNS HTTPS 记录带 ech 参数与公钥无 ech 参数
握手结果正常完成,内层字段不可见客户端回退为普通明文握手
记录变化配置轮换后公钥随之更新记录长期不更新,可能与服务端不匹配
ECH 与此前的 ESNI 是不同代际方案,排障时以当前部署文档为准。未部署 ECH 不影响 HTTPS 本身的加密与身份认证能力,只是 SNI 对外可见。

易错点

  • 把 ECH 当成必选项:未部署不影响证书校验与加密强度,把它当故障会浪费排查时间。
  • DNS 记录未生效就开启客户端 ECH:尝试失败后回退明文 ClientHello,隐私未获得提升却看不出异常。
  • 密钥轮换后未同步 HTTPS 记录:客户端拿到旧公钥,无法解密内层问候导致连接异常。
  • 误以为 ECH 能隐藏全部元数据:目标 IP、流量大小与时间特征仍然可见。

数据来源与参考

  • IETF draft-ietf-tls-esni(ECH)
  • RFC 9460(SVCB/HTTPS 记录)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌