问题描述
在使用H3(HTTP/3)协议访问ESA加速域名时,出现SNI deny错误提示。
根因分析
ESA开启了SNI白名单功能,当TLS握手中的ServerName与HTTP请求头中的Host不一致时,ESA会拒绝该请求并返回SNI deny错误。
在H3协议场景下,由于HTTP/3基于QUIC协议,支持多路复用,客户端可能在同一连接上发送多个不同域名的请求。如果这些请求的SNI与Host头不一致,且未在SNI白名单中配置,就会触发SNI deny错误。
SNI白名单配置
在ESA控制台,选择站点管理,在站点列单击目标站点。
在左侧导航栏,选择。
单击SNI白名单右侧的配置。

复现方法
开启SNI白名单后,可以通过以下命令复现问题:
curl https://domain1/ -H 'Host:domain2'上述命令中,TLS握手的ServerName是domain1,但HTTP请求的Host头是domain2,如果domain2未在SNI白名单中,就会触发SNI deny错误。
案例分享
案例信息
配置情况:
启用H3协议
开启SNI白名单
故障现象:偶发性出现SNI deny错误。访问URL为 https://www.example.com,但TLS握手中携带的SNI为 worry.example.com。
分析思路
排查SNI deny问题需要确认以下两点:
确认客户端TLS握手中的ServerName是什么?——需要通过抓包分析
TLS握手中的ServerName与实际请求的URL地址是否一致?——需要解密HTTPS请求进行验证
解决方案
针对H3协议下的SNI deny问题,可以采用以下解决方案:
方案一:配置SNI白名单
将所有可能出现在请求中的域名添加到SNI白名单中。包括主域名、子域名以及可能通过H3多路复用访问的所有域名。
方案二:关闭SNI白名单(不推荐)
如果业务场景允许,可以关闭SNI白名单功能。但此方案会降低安全性,不建议在生产环境使用。
方案三:客户端配置优化
确保客户端在发送请求时,TLS握手中的ServerName与HTTP请求的Host头保持一致,避免在同一QUIC连接上发送不同域名的请求。
相关参考
在Mac系统中抓取HTTPS流量,可以通过指定sslkeylog.log文件到Wireshark中实现HTTPS解密。