SNI是什么意思?
SNI 是 TLS 握手时客户端附带的目标域名字段,让同一个 IP 上的服务器知道该出示哪个站点的证书。
在节点参数里它常写作 sni 或 serverName。它既影响证书能否校验通过,也是 Trojan、Reality 这类基于 TLS 的节点最容易填错的一栏。
SNI 是 Server Name Indication 的缩写。它看起来只是节点配置里的一个小格子,却是“明明地址端口都对,却握手失败”的常见来源。
它是什么
一台服务器、一个 IP 地址上可以放很多个网站。客户端发起 TLS 握手时,服务器还不知道你要访问哪一个,也就不知道该拿出哪张证书。SNI 就是客户端在握手第一步主动报上的域名:“我要找的是这个名字。”服务器据此选择证书,握手才能继续。
TLS 本身的规范见 RFC 8446,SNI 属于其中的扩展字段之一。更完整的背景可以先读TLS。
它在节点里怎么出现
不同软件对同一个概念用不同的名字:
| 位置 | 常见写法 |
|---|---|
| 分享链接参数 | sni、peer、serverName |
| Clash/Mihomo 配置 | servername 或 sni |
| 图形客户端的表单 | “SNI”“伪装域名”“服务器名称” |
Trojan 协议要求连接走标准 TLS,所以 sni 一般要和证书对应的域名一致。Reality 协议里的 serverName 则有它自己的用法,应以节点提供方给出的说明和 Xray 官方文档为准,不要凭经验改。
常见误解
“SNI 就是服务器地址。” 不是。地址是你连接到哪个 IP 或域名,SNI 是握手时告诉对方“我要哪张证书”。两者可以相同,也可以不同,比如地址写 IP、SNI 写域名。
“填错了无所谓,反正能连。” 填错通常表现为握手失败或证书校验报错。很多教程让你打开“允许不安全”来绕过,这会同时放弃证书校验,等于放弃了防冒充的保护,梯子岛不建议当成常规做法。
“SNI 是加密的。” 传统的 SNI 在握手中是明文可见的,是否用 ECH 之类的新机制,取决于服务器和客户端是否都支持,具体以各软件文档为准。
怎么排查与 SNI 有关的问题
- 先看报错里有没有 certificate、x509、handshake 之类字样,这指向证书或 SNI。
- 对照节点提供方给出的参数,逐项核对 sni 与 serverName,注意大小写和多余空格。
- 区分“地址”和“SNI”,不要把两栏填反。
- 如果是从分享链接导入的,可以用节点链接解析工具看一眼解析出的各字段。
- 系统时间偏差也会让证书校验失败,见证书与时间。
下一步
想理解 XTLS 一类的新机制,读 XTLS Vision;想看链接里各字段怎么拼,读节点链接 URI。