↓ 跳过正文

SNI 阻断是什么?TLS 握手阶段被掐的表现

·876 字·2 分钟
作者
吾便宜
SNI 阻断原理示意图

插图来源:Storyset

先说 SNI 是干嘛的
#

你访问一个 HTTPS 网站时,浏览器要先和服务器"握手"。握手的第一步,浏览器会明文告诉服务器:“我想访问的是 www.example.com”。这个明文报上名的字段,就叫 SNI(服务器名称指示)。

为什么要明文?因为一台服务器上可能托管着上百个网站,服务器得先知道你要找谁,才能拿出对应的证书。SNI 就是握手阶段的"报名字"环节。

SNI 阻断是怎么回事
#

既然 SNI 是明文的,那中间设备就能看到你在访问哪个网站。SNI 阻断就是:在握手阶段看到 SNI 是某个目标,直接把连接掐断。你的浏览器会看到"连接被重置"之类的错误,页面一片白。

被 SNI 阻断时的典型症状
#

  • 特定网站打不开,换浏览器、清缓存都没用。
  • 同一个网站,HTTP 能开(如果还支持的话),HTTPS 不行。
  • 开代理后能打开,关掉就不行——因为代理把 SNI 藏在了隧道里。
  • 有意思的是:同一 IP 上的其他网站能正常打开,只有目标网站不行。这是 SNI 阻断区别于 IP 封锁的关键特征。

它和 DNS 污染的区别
#

这两个经常被搞混,一张表分清:

SNI 阻断DNS 污染
发生阶段TLS 握手时域名解析时
现象连接被重置、打不开解析到错误的 IP,跳到奇怪页面
针对目标按域名精确打击按域名,但可能误伤
绕过思路把流量包进隧道(代理/VPN)换可信 DNS 或同样走代理

简单记:DNS 污染是"指错路",SNI 阻断是"认出你然后拦下"。

普通人需要做什么
#

  • 大多数情况下什么都不用做:你用的代理本身就是 SNI 阻断的解法,流量进隧道后 SNI 对外不可见。
  • 如果你发现"开了代理某个站还是打不开",那可能不是 SNI 的问题,按IP 被墙排查走。
  • 对技术细节感兴趣:Trojan 协议的设计就是围绕"让 SNI 和握手看起来正常"展开的;Cloudflare 相关的握手异常见这篇。

一句话总结
#

SNI 是握手时明文报的名字,SNI 阻断就是按名字拦人。代理把名字藏进隧道,问题自然消失。理解这个概念,很多"为什么这个站打不开"的疑惑就通了。