SNI Server Name Indication
TLS 握手阶段客户端以明文声明目标主机名的扩展字段,服务端据此返回对应证书;Trojan 节点依赖正确的 SNI 完成证书验证与流量伪装。
SNI(服务器名称指示)是 TLS 握手中的一个扩展字段:客户端在发起连接时声明自己要访问的主机名,让同一 IP 上托管多个域名的服务端能够返回正确的证书。这个字段在标准 TLS 握手中以明文传输。
在代理场景中,SNI 直接影响 Trojan 节点能否正常工作。客户端配置里的 SNI(有的客户端写作 servername 或「伪装域名」)必须与服务端证书覆盖的域名一致,否则证书验证会失败,表现为节点无法连接或客户端报证书错误,排查思路见 Trojan 证书验证失败的原因和解决方法。同时,SNI 也是 Trojan 伪装效果的一部分:一个指向真实域名的 SNI 让连接看起来更像普通网站访问,完整机制可参考 Trojan 协议如何通过 TLS 建立连接。
常见误解是把 SNI 当成可以随意填写的装饰参数。实际上它既参与证书验证,也可能被网络中间设备读取用于识别或阻断,因此订阅中下发的 SNI 一般不应手动改动;节点更换域名后,旧配置中的 SNI 未同步更新也是连接突然失败的常见原因之一。
本文最后更新于 。如发现内容过时,欢迎通过联系页面反馈。