SNI 是 TLS 协议的扩展,客户端在握手最初的 ClientHello 中携带要访问的域名,使一台服务器、一个 IP 能为多个网站提供不同的 HTTPS 证书。它是虚拟主机时代 HTTPS 普及的关键技术,其明文特性也带来了隐私与封锁问题。

| 中文名 | 服务器名称指示 |
| 标准文档 | RFC 6066 |
| 所属协议 | TLS 扩展 |
| 作用 | 单 IP 托管多 HTTPS 站点 |
| 隐私演进 | ESNI → ECH |
SNI(Server Name Indication,服务器名称指示)是 TLS 传输层安全协议的一个扩展,定义于 RFC 6066。客户端在发起 TLS 握手的第一条 ClientHello 消息中附带想要访问的主机名,让服务器在建立加密通道之前就知道该出示哪一张证书,从而实现单 IP 多 HTTPS 站点共存。
HTTP 时代,一台服务器凭请求头中的 Host 字段即可托管成千上万个虚拟主机。但 HTTPS 的证书交换发生在 TLS 握手阶段,早于任何 HTTP 数据,服务器若只凭 IP 和端口无法判断客户端想访问哪个域名,只能所有站点共用一张证书或一站一 IP,成本高昂。SNI 于 2003 年前后提出并逐步普及,让共享主机、CDN 与云平台能够大规模提供 HTTPS 服务,是 HTTPS 全面普及的重要基石。
CDN 与云服务在同一组 IP 上服务海量域名,全靠 SNI 区分;Nginx、Apache 等服务器据 SNI 匹配虚拟主机配置;负载均衡器可按 SNI 做四层分流而无需解密流量。另一方面,防火墙与审查系统也常读取明文 SNI 实施域名级封锁或过滤,这正是 ECH 想要解决的隐私问题。
问:不支持 SNI 的老客户端会怎样?答:服务器只能返回默认证书,若与目标域名不符则出现证书错误;Windows XP 上的 IE 是典型的不支持 SNI 的历史客户端,如今已基本淘汰。
问:SNI 泄露隐私吗?答:会。虽然通信内容被 TLS 加密,但明文 SNI 暴露了你访问的域名,网络中间人可据此记录或阻断,需 ECH 配合 DoH 才能隐藏。
问:SNI 和 Host 头是一回事吗?答:作用类似但层次不同:SNI 在 TLS 握手层供选证书,Host 头在 HTTP 层供选站点,HTTPS 请求两者通常一致。

| 中文名 | 服务器名称指示 |
| 标准文档 | RFC 6066 |
| 所属协议 | TLS 扩展 |
| 作用 | 单 IP 托管多 HTTPS 站点 |
| 隐私演进 | ESNI → ECH |
登录 后参与讨论
暂无讨论,来发表第一条评论吧