Go 1.27.3 / 1.26.10 拦截被泄漏的 CA 中间证书:黑名单在 crypto/x509 里,必须重新编译
信源:[security] Go 1.27.3 and Go 1.26.10 are released(2026-10-19)
相关:发布说明 go1.27.3 · go.dev/issue/82345 · 下载页
发生了什么
Go 官方在 2026-10-19 同时发布 1.27.3 与 1.26.10 两个小版本,只带一个安全修复:
crypto/x509: mitigation for security concerns with a specific Certificate Authority
原因是某个 CA(官方博客摘要指明为 eMudhra)的中间证书私钥泄漏。编号 CVE-2026-111943,Go issue 为 82345。
这次是紧急发版。官方给出的理由是:问题可被利用,且判断私钥很可能在数小时内就会被公开,因此「立即发布是最稳妥的选择」:
Due to the urgent nature of this issue and its exploitability, and with the belief that the private keys would likely become publicly known within hours, we decided an immediate release was the most prudent option.
公告对升级的措辞是 We highly recommend immediately upgrading to this release.
Go 做了什么:Verify 过滤链,不是改系统根证书库
补丁的作用点只有一个:Verify 在验证证书链时,把包含这批中间证书的链过滤掉,不再返回给调用方。
We're blocking trust in a small set of intermediate certificates due to specific security concerns around their operation.
Verify will now filter out chains which contain these intermediates, preventing them from being returned to the caller.
也就是说,这不是往系统根证书库里塞一条吊销记录,而是改在 Go 自己的 crypto/x509 校验逻辑里。哪些中间证书进了黑名单,以发布说明为准。
从源码编译的话,切到 tag 后照常构建:
git checkout go1.27.3
二进制与源码分发包在 go.dev/dl 下载。
为什么必须重新编译,而不是只更新系统 CA
因为这份黑名单编在二进制内部的 crypto/x509 逻辑里,不读系统证书库的吊销状态。以下几种部署形态都受影响:
- 容器镜像:镜像里可能同时有系统 CA 包和 Go 二进制,只更新前者不解决问题。
- 静态二进制:没有系统 CA 包可更新,只能重建。
- 通过
net/http、crypto/tls,或 gRPC 这类依赖走 TLS 的服务:只要跑的是旧版本编译出来的二进制,链过滤逻辑就还是旧的。
发行方的做法可以看 Prometheus 3.13.5(2026-10-21)的容器镜像发布说明,它同时列了三件事:
- Update CA certificates to distrust "emSign ECC Root CA - G3" and "Comodo AAA Services root" following the compromise of eMudhra intermediate CA private keys
- Build with Go 1.26.10 to fix vulnerabilities
- Bump golang.org/x/net to v0.60.0
即系统 CA 证书包与 Go 二进制要在同一次镜像重建里一起更新,缺一不可。
怎么核对自己是否受影响
官方给的检查路径:
- 看当前工具链版本:
$ go version
- 看某个二进制是用哪个 Go 版本编译的:
$ go version -m
- 直接用 govulncheck 判断二进制是否受该问题影响:
$ GOTOOLCHAIN=go1.27.3+auto go install golang.org/x/vuln/cmd/govulncheck@latest
$ govulncheck -mode=binary
用 Go 1.27.3 / 1.26.10 重新编译过的二进制,会自动拒绝由涉事 eMudhra 中间证书签发的证书:
Binaries rebuilt with Go 1.27.3 and 1.26.10 will automatically reject certificates issued by the compromised eMudhra intermediates.
边界与遗留问题
- 补丁只覆盖 Go 自家
crypto/x509这条链路。用 OpenSSL 或其他系统 CA 库做校验的程序、以及非 Go 客户端,不受这个补丁影响,需要各自处理。 - 官方博客摘要提到,这次事件也推动了发布流程的改进,并把 Linux 上的证书吊销支持列入优先事项——该项仍在排期,尚无具体时间。
同一时间窗的其他发布
- Go 1.27.2 / 1.26.9(2026-10-08):修 15 个安全漏洞,包括 net/http HTTP/2 HPACK encoder race(CVE-2026-97032)、HTTP/2 Trailer 头导致内存耗尽(CVE-2026-78659)、crypto/tls ECH 外层扩展引用(CVE-2026-97031)、cmd/go 对 golang.org/fips140 与 golang.org/toolchain 的校验绕过(CVE-2026-94444 / CVE-2026-94447)。
- Go 1.27.1(2026-09-01)。