最近用代理上网的时候,经常遇到 TLS 证书异常 或者 HSTS 错误。本来以为是节点抽风或者线路不稳定,今天实在忍不了了,打算深挖一下。
发现怪事
报错的时候我点开证书详情看了一眼,结果一脸懵逼:为什么我访问的网站,返回的证书是 Facebook 的?
我这明明没在刷 FB 啊。
溯源排查
带着这个关键词去 V2EX 考古(搜到了 2018 年的老帖),发现这其实是一个典型的 DNS 中间人攻击 导致的坑。
原理大概是这样:
- 我的本地 DNS 之前图省事设成了网关地址(类似
192.168.0.1)。 - 在开启代理或某些网络环境下,DNS 解析请求被中间人拦截/污染了。
- 由于 DNS 返回了错误的 IP(可能指向了 FB 的服务器或者是被劫持到了某个特定的 IP),浏览器去握手时,发现域名和证书完全对不上。
- 加上现在的网站基本都开了 HSTS,浏览器校验非常严格,直接锁死不让访问。
解决办法
其实就是把 DNS 链路理顺。
- 路由器端: 弃用默认网关 DNS,手动改成了靠谱的公共 DNS(如
1.1.1.1或8.8.8.8)。 - 代理客户端: 检查了 DNS 配置,确保开启了远程解析,防止本地污染。
改完之后重启代理,Nice,报错全部消失,丝滑上网。
总结: 以后遇到 TLS 报错,先别急着换节点,看看证书到底是谁发的,说不定又是 DNS 在背地里搞鬼。
本文著作权归作者 [ 陈十一 ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。