Firefox 85将以ECH取代加密SNI

Mozilla在2年前,宣布于Firefox Nightly加入加密服务器名称指示(Encrypted Server Name Indication,ESNI)实验性扩展功能,以保护用户隐私,但是经研究发现,ESNI并无法提供完整的保护,因此Firefox 85将改变做法,通过加密整个客户端Hello消息,来解决ESNI的缺点,而这个新做法称作ECH(Encrypted Client Hello)。

ESNI的出现,是为了要解决主机名称泄露的问题,服务器名称指示(Server Name Indication,SNI)是TLS的一个扩展协议,该协议会在握手过程开始时,由客户端在TLS Client Hello消息中,以明文发送要连接的服务器主机名称,以连接到特定服务器,并选择使用的凭证。SNI协议是要让服务器,在相同的IP位置和TCP端口号上,能够使用多个凭证,以便让相同的IP位置上,不只可提供多个HTTPS网站,且可以使用不同的凭证。

SNI存在隐私疑虑,会有类似DNS隐私泄露的问题,因此Mozilla等组织共同开发了ESNI,为的就是避免在TLS握手时,导致主机名称泄露,提供像是HTTP- over-HTTPS,避免DNS查询向路径上观察者,公开主机名称相似的功能。

不过,在IETF发布ESNI规格草案后,经过分析显示,ESNI扩展提供了不完整的保护,像是在对话恢复期间,预共享的密钥(Pre-Shared Key)扩展,仍会包含ESNI加密的服务器主机名称,也就是说ESNI必须为所有具有潜在隐私风险的扩展,提供加密变体,但这反而暴露出一系列广播的扩展。这个原因使得ESNI的互相操作性以及部署受到挑战,因而无法扩展使用范围。

为了解决ESNI的问题,在最新版本中,不只加密SNI扩展,而是加密整个客户端的Hello消息,因此名称也从原本的ESNI,更改为ECH。现在任何涉及隐私,但原本被广播为未加密ClientHelloOuter的扩展,现在可以转为加密的ClientHelloInner,当服务器支持ECH并且解码后,ClientHelloInner就可用做TLS连接基础。另外,ECH也更改了密钥分派与加密过程,支持ECH的TLS服务器,可通过HTTPSSVC DNS记录,公开其公钥。

Mozilla、Cloudflare、Fastly和苹果开发者合作,在IETF中标准化加密客户端Hello规格,而从Firefox 85开始,ECH草案将会取代ESNI,about:config中ESNI相关选项也会被移除,官方建议用户可以在Firefox默认激活ECH时,才开始使用该功能,但用户仍可以手动打开相关设置,不过因为ECH现在还在开发中,且ECH要求客户端与服务器必须使用相同版本,因此其中一方版本变更,便会影响可用性。目前Firefox ESR将继续支持旧的ESNI功能。