只有 Chrome 能进的那段时间:一次按 SNI 拦截的排查记录
2026-10-06
现象很怪:我服务器上那几个自用小服务,手机 Chrome 能打开,平板、系统 WebView、别的浏览器
全都打不开;同 IP、同端口、同证书。那时域名 jhfyl.xyz 还没备案,服务器在国内。
最后一节是补记。
先做对照实验,别急着改配置
固定连我这台服务器的 443,只换 TLS ClientHello 里的 SNI 字符串:
openssl s_client -connect 120.26.91.35:443 -servername jz.jhfyl.xyz -tls1_2
openssl s_client -connect 120.26.91.35:443 -servername www.baidu.com -tls1_2
openssl s_client -connect 120.26.91.35:443 -servername 120.26.91.35 -tls1_2
2026-10-06 实测,可复现:
- SNI 填
example.com/github.com/cloudflare.com→ 通, 这几个域名同样没备案;填随手编的some-random-string.xyz也通; - 填
aaa.jhfyl.xyz/play.jhfyl.xyz/test-never-used.jhfyl.xyz→ 全被掐,这些子域我从来没在用; - 填
jz.jhfyl.xyz但目的地址改成1.1.1.1(别人的 IP)→ 照样被掐; 填 IP 字面量 → 通。
结论:拦的不是"未备案域名"这一类,而是我这一个域名
- 域名级:所有子域都拦,包括没用过的;
- 与端口无关:443 和 8443 一样拦;与目的 IP 无关 —— 拦截方只看 SNI 那串明文;
- 只拦 TLS 1.2,TLS 1.3 放行 —— 这正是"Chrome 能进、老设备不行"的来历;
- 明文 HTTP 也拦:接入商侧返回 403,正文写着
Non-compliance ICP Filing, 等于把原因写在脸上。
教训:只信一个工具会出假失败
中间有一阵 openssl 显示"所有 SNI 全部失败",连 IP 和 baidu 都不行,我差点怀疑是自己 nginx 坏了。换 curl 交叉验证才把结论掰回来:
curl -sk --noproxy '*' -o /dev/null -w '%{http_code}\n' --max-time 12 https://jz.jhfyl.xyz/
记下来:200 是通,000 是被拦或连不上。单条命令的输出不算证据,
两条互不依赖的路径同向才算。
"以前明明能用"怎么解释
域名 2026-09-26 注册(服务器 9-25 建的),到出问题只有 10 天。监测不是实时的:刚解析上来的 头几天还没被扫到,那几天确实能访问;被确认"未备案 + 内地节点对外提供服务"之后才拉黑。 所以我看到的是"好好的突然就不行了",不是自己哪步配置改坏了。
当时怎么绕,以及唯一能根治的办法
- 绕:改用 IP 访问
https://120.26.91.35:8443/,SNI 是 IP 字面量、不匹配任何域名, TLS 1.2 的老设备也能连。代价是证书签给域名,浏览器必然提示不受信 —— 想消掉得给 IP 单独签 一张,当时手上的 acme.sh v3.1.5 还不支持; - 无效尝试:换端口、换 CA、手工补根证书,都改变不了结果;
- 根治只有一条路:给域名做 ICP 备案。
补记(2026-10-09)
备案通过后实测:-tls1_2 那条已经能正常拿到证书,http:// 访问两个域名
返回 301 而不是 403 —— 请求真的进到我自己 nginx 了;老平板和 WebView 恢复用域名访问,
IP 入口降级为应急通道。另外:黑名单解除可能要几小时到几天同步,别把"还没通"当成"备案没用"。