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 有关的问题

  1. 先看报错里有没有 certificate、x509、handshake 之类字样,这指向证书或 SNI。
  2. 对照节点提供方给出的参数,逐项核对 sni 与 serverName,注意大小写和多余空格。
  3. 区分“地址”和“SNI”,不要把两栏填反。
  4. 如果是从分享链接导入的,可以用节点链接解析工具看一眼解析出的各字段。
  5. 系统时间偏差也会让证书校验失败,见证书与时间。

下一步

想理解 XTLS 一类的新机制,读 XTLS Vision;想看链接里各字段怎么拼,读节点链接 URI。

哪些文章讲到了SNI

想对照具体机场的记录?

机场榜单和机场目录里,价格、线路、协议、节点地区都是逐家列着的;不确定该装哪个客户端,试试客户端筛选器。