加密客户端问候(ECH)是 TLS 的一个扩展,用来加密握手阶段发送的域名。服务器名称指示(SNI)在握手里明文暴露用户访问的域名,ECH 把它加密,防止中间观察者看到用户访问了哪些网站。目前仍在逐步部署。
第 62 期介绍过,服务器名称指示(SNI)在 TLS 握手的第一条消息里明文带上要访问的域名,让服务器选择正确的证书。这带来一个问题:握手阶段的数据还没有加密,中间的观察者可以看到用户访问了哪个域名,尽管之后传输的内容已经加密。
加密客户端问候(ECH,Encrypted Client Hello)就是为解决这个问题设计的。它把客户端问候里的敏感部分,包括 SNI 中的域名,用服务器公开的密钥加密后再发送。没有对应密钥的中间观察者无法解出域名,只有目标服务器能解密并完成握手。
ECH 的前身是加密服务器名称指示(ESNI),后来发展为 ECH 并进入 TLS 1.3 的扩展体系。它的部署需要客户端、服务器和域名解析共同配合,各方的支持仍在逐步推进,目前尚未全面普及。在 ECH 普及之前,SNI 明文泄露域名的问题依然存在。