allowInsecure=1 到底有多危险,为什么不该图省事打开
节点链接里的 allowInsecure=1 关闭了 TLS 证书校验,等于让 TLS 只剩加密、失去身份验证。本文说明它具体放弃了什么保护、什么情况下会被利用,以及为什么「反正流量已经加密了」这个想法不成立。
本文目录(7 节 · 约 3 分钟) +
- 01 TLS 做的是两件事,不是一件
- 02 为什么只剩加密等于没有保护
- 03 那为什么还有人开
- 04 正确的处理方式
- 05 顺带说 Reality
- 06 检查你手上的链接
- 07 小结
一句话结论:allowInsecure=1(在 Clash 配置里也写作 skip-cert-verify: true)关闭了 TLS 的证书校验,等于放弃「确认对方身份」这一半保护,只保留加密。 加密一个你无法确认身份的对象,安全性接近于零——因为你可能正在和攻击者建立一条加密良好的连接。
TLS 做的是两件事,不是一件
很多人以为 TLS 就是「加密」,其实它同时提供两样东西:
- 加密:中间人看不到传输内容
- 身份验证:确认你连的确实是那台服务器,而不是冒充它的人
第二件事靠证书完成。服务器出示一张由受信任机构签发的证书,客户端验证签名、有效期、域名是否匹配。验证通过才继续握手。
allowInsecure=1 关掉的正是第二步。加密还在,但「和谁加密」不再检查。
为什么只剩加密等于没有保护
设想一个能插进你网络链路的人——同一个 Wi-Fi 下的其他人、被入侵的路由器、恶意的网络运营方。
正常情况下,他冒充服务器时拿不出有效证书,客户端验证失败、连接中断,攻击到此为止。
关掉校验之后,他可以:
- 拦下你的连接请求,用自己的自签名证书和你握手 —— 你不检查,所以接受了
- 同时用自己的身份去连接真正的服务器
- 你的流量在他那里解密一次,看完(或改完)再加密转发给真服务器
整个过程对你完全透明:客户端显示已连接,网速正常,一切看起来都好。但你的所有流量——包括代理协议本身的认证信息、你访问的每个网站、账号密码——都从他手里过了一遍。
这就是经典的中间人攻击。TLS 的证书校验就是为了防它而存在的,关掉它等于把门锁拆了然后说「反正我家有防盗窗」。
那为什么还有人开
几个常见原因,每个都不是好理由:
服务端用了自签名证书。 机场为了省一张证书的钱或者图省事,直接用自签名。客户端验证不过,于是让用户开 allowInsecure。现在 Let’s Encrypt 提供免费证书且自动续期,这个理由早就不成立了。
证书过期了没人管。 说明运维已经放羊。一个连证书续期都不做的服务,你还敢把全部流量交给它吗。
域名不匹配。 证书签给 a.com,但你连的是 IP 或者 b.com。正确做法是配置 sni 指定正确的域名,而不是关掉校验。
「反正流量已经加密了」。 这是最常见的误解——加密的对象是谁不确定,加密本身就没有意义。
正确的处理方式
按优先级:
- 让服务端换成受信任的证书。如果是你自己的服务器,用 Let’s Encrypt,十分钟的事。如果是机场,这属于可以要求他们改的基础问题。
- 配置正确的 SNI。如果只是域名不匹配,在节点配置里指定
sni或servername为证书上的域名即可,不需要关校验。 - 实在没办法时,至少把它限制在单个节点上,不要全局开启,并且清楚知道这条链路是不可信的——不要用它登录任何账号。
顺带说 Reality
近几年出现的 Reality 是另一种思路:它不使用自己的证书,而是借用一个真实存在的第三方网站的 TLS 握手特征。客户端通过预共享的公钥(pbk)验证服务端身份,所以既不需要自己的证书,也不需要关闭校验。
如果你的机场提供 Reality 节点,通常比「自签名 + allowInsecure」的组合安全得多。
检查你手上的链接
把节点链接粘进节点链接解析器,allowInsecure=1 会被单独标为警告而不是混在参数列表里——这是刻意的,它不是一个普通参数,而是一个安全决定。工具还会检查启用 TLS 却没设 SNI 这类容易导致握手失败的情况。
整份配置的话用配置校验器。两个工具都在你的浏览器里运行,链接和配置不会上传。
小结
- TLS = 加密 + 身份验证,
allowInsecure关掉的是后者 - 只有加密没有身份验证,等于可能在和攻击者安全通信
- 域名不匹配应该配 SNI,不是关校验
- 一个需要你关校验才能用的服务,本身就值得怀疑
相关文章
订阅链接为什么等于你的账号密码
订阅地址不只是一个下载链接。拿到它的人可以看到你的套餐、剩余流量,并且能直接使用你付费买的节点。本文说明它的实际权限范围、常见的泄露途径,以及泄露之后该怎么办。
Reality 是什么,它和普通 TLS 差在哪
节点链接里出现 security=reality、pbk、sid 这些参数时,说明它用的是 Reality。本文说明它借用真实网站 TLS 特征的原理、为什么不需要自己的域名和证书,以及 pbk / sid / fp 各是什么。
UUID 和密码是一回事吗?各协议的凭证有什么不同
VMess 和 VLESS 用 UUID,Trojan 和 Shadowsocks 用密码,看起来是两种东西,泄露后果却完全一样。本文说明各协议凭证的形式差异、为什么 UUID 不能当成「不敏感的 ID」,以及分享配置前该抹掉什么。