引入
在HTTPS通信中,有两个步骤会泄露双方实际的通讯域名
- DNS查询时,需要发送实际域名
- TLS握手阶段,Client Hello数据包会包含域名
TLS通讯只有在握手阶段会泄露域名,握手完成之后,除了传输层必要数据(IP、端口号、MAC地址)为明文外,其余数据都已加密,中间人截获之后也无法解密

ESNI
ESNI的作用在加密Client Hello中的SNI字段,防止域名被中间人看见,同时也能解决SNI阻断问题
原理:
- DNS服务器需要配置一条
_esni
类型的TXT
记录,记录值为服务器公钥 - 客户端获取到服务器公钥之后,将SNI字段使用公钥加密后再发送
- 服务器收到数据包之后,使用公钥解密获取实际SNI
目前ESNI已被更完善的ECH(Encrypted Client Hello) 代替
ECH
ECH支持加密整个Client Hello数据包。
ECH需要在DNS配置更多信息,公钥、支持的加密算法等
和加密SNI相同,客户端加密Client Hello数据包中需要加密的部分,生成ClientHelloInner数据包
服务端通过私钥进行解密
0