跳到正文
不翻车专注 VPN 软件评测

升级完节点报证书错误?Xray 新版不再信任你电脑里的证书

不翻车编辑部 · 更新于

Xray PR

先说结论:Xray 在 2026 年 10 月 10 日合并了一个改动,新版的 TLS 客户端默认只信 Xray 自带的一份根证书名单,不再信你电脑系统里的证书。节点证书是公开机构签的(比如 Let’s Encrypt),或者用的是 REALITY,基本不受影响;自己建了私有证书机构、又把根证书装进系统的,升级以后会报 certificate signed by unknown authority,连不上。解决办法有两个,写在后面。

这篇有视频版:YouTube 上看《Xray 新版不再信任系统证书》。

这个改动目前在 Xray v26.10.10 预发布版里,v2rayN 7.25.6、v2rayNG 2.3.11 两个测试版已经带上,正式版还没出。下面的内容来自 GitHub 上的 PR 原文、维护者评论和发布页,核对日期 2026 年 10 月 12 日。

报错长什么样

用一张私有证书机构签的证书搭一个测试节点,再用 Xray v26.10.10 去连,日志里是这一行:

Xray v26.10.10 连接私有证书机构签的节点:tls: failed to verify certificate: x509: certificate signed by unknown authority

certificate signed by unknown authority 的意思是:这张证书的签发机构,不在客户端信任的名单里。

证书是怎么验证的

节点用 TLS 加密时,客户端要先确认对面真是你的服务器,不是半路冒充的。服务器拿出一张证书,上面有证书机构的签名;客户端手里有一份名单,叫根证书,写着哪些证书机构信得过。签名和名单对得上,才放行。

以前 Xray 用的是系统自带那份名单:Windows 版直接交给系统去验证,其他系统读系统的证书库。系统名单有个特点,别的软件、公司的管理员都能往里加。

为什么要改

往系统里加根证书,出过真事。

2015 年,美国网络安全部门(CISA)发布警告:联想部分电脑预装的 Superfish 软件,往系统里装了一张根证书,能解开浏览器的加密流量,浏览器还不报警。

CISA 警报 TA15-051A:Superfish 安装了一张非唯一的受信任根证书,攻击者可以伪造 HTTPS 流量

2019 年,Mozilla 发文说,哈萨克斯坦的网络服务商要求用户在所有设备、所有浏览器上安装一张政府发的证书,火狐和 Chrome 随后把它拉黑。

Mozilla 博客 2019-08-21:哈萨克斯坦要求用户在所有设备和浏览器上安装政府发的证书

谁拿着这类根证书的密钥,就能冒充网站。客户端只要信系统名单,节点连接一样分不出真假。

所以有了 PR #7105。标题写着:TLS 客户端默认使用 Xray 内置的根证书,避免系统里被恶意植入的证书机构。

PR #7105:TLS client: Use Xray-core’s built-in RootCAs by default (avoids maliciously injected CA in the OS)

这份内置名单来自 Go 语言官方打包的根证书,说明里写着是从 NSS 信任库解析的,NSS 就是火狐浏览器用的那套。

pkg.go.dev:x509roots/fallback/bundle 的根证书来自 NSS trust store

作者在评论里说,打包进去大约 154 KB。另外,这个改动的起因之一是在安卓上跑 Linux 版取不到系统证书,现在这类环境也能正常验证了。

PR 作者评论:打包的证书链大概 154 kb

PR 作者评论:这个改动来自在安卓跑 Linux arm 取不到 CA

现在到哪一步了

  • Xray v26.10.10:2026-10-10 发布,预发布版。

Xray-core v26.10.10 发布页,标着 Pre-release

  • v2rayN 7.25.6 测试版(10-11):更新说明最后一行链到 Xray v26.10.10。v2rayNG 2.3.11 测试版的提交记录里也更新了内核库。

v2rayN 7.25.6 更新说明:链到 Xray-core v26.10.10

  • 维护者 RPRX 在 10 月 10 日的评论里说,目前只覆盖底层传输显式调用的 TLS,以后会改成覆盖内核里所有 TLS 请求,再加环境变量开关。

RPRX 评论:目前只覆盖底层传输显式调用 TLS/uTLS,后续会改成覆盖 core 内所有 TLS 请求、环境变量开关

正式版出来以后,会跟着客户端更新推给很多人。

谁会受影响

你的节点 升级后
证书是公开机构签的(Let’s Encrypt 等) 不受影响,内置名单里本来就有
REALITY 不受影响,它不走证书机构这一套
自建私有证书机构,根证书装进了系统 连不上,报 unknown authority

REALITY 的说明里写着“证书链攻击无效”:

REALITY README:若用 REALITY 取代 TLS……证书链攻击无效

还有一种情况是按代码推断的,没有在公司网络里复现:公司在电脑上装了自己的根证书,用来检查加密流量。以前节点连接被这样解开了也看不出来,升级后会直接报错。

怎么解决

办法一:把私有证书机构写进节点配置。 在节点的 tlsSettings 里加上你的证书机构,usage 写 verify,表示只拿来验证。这样只信你自己这一张,不用信整个系统。同一个测试节点加上以后再连,返回 204,正常通过:

"tlsSettings": {
  "serverName": "你的域名",
  "certificates": [
    { "usage": "verify", "certificateFile": "ca.pem" }
  ]
}

加上 usage: verify 的证书机构后,同一个测试节点返回 204

办法二:打开 useSystemCA。 新版加了这个配置项,在 tlsSettings 里写 "useSystemCA": true,就回到以前用系统名单的做法。图省事可以这么改,但等于把这次的保护关掉了。

PR #7105 代码改动:TLSConfig 新增 UseSystemCA,对应配置项 useSystemCA

v2rayN、v2rayNG 的界面里有没有这两个选项,以正式版为准;没有的可以用自定义配置。

更省心的是直接换:节点改用 Let’s Encrypt 签的证书,或者改用 REALITY。自建 REALITY 节点见 3x-ui 面板添加节点。

顺手查一下电脑里的根证书

Windows:

  1. 按 Win + R,输入 certmgr.msc,回车。
  2. 打开“受信任的根证书颁发机构”,再点“证书”。
  3. 看“颁发者”一栏有没有不认识的名字。

公司电脑别自己删,先问管理员。自己的电脑,不认识的先搜一下名字,确认了再删。

常见问题

用 mihomo 或 sing-box 内核的客户端,受不受影响? 这次改的只是 Xray,这两个内核不涉及。

自己用 3x-ui 搭的服务器要不要改? 不用。改的是客户端怎么验证,服务器那边出示证书的方式没变。

以前开了“跳过证书验证”的呢? 那是另一件事。v2rayN 的说明写着,Xray 在 2026 年 8 月 1 日已经彻底禁用 allowInsecure。

v2rayN 讨论 #9460:Xray 将于 2026 年 8 月 1 日彻底禁用 allowInsecure

内置名单会不会过期? Go 官方说明写着,这份名单必须保持更新。它只能跟着内核升级,所以内核别停在老版本。

pkg.go.dev:This package must be kept up to date for security and compatibility reasons

资料来源