如何修复 ERR_CERT_AUTHORITY_INVALID:完整指南

ERR_CERT_AUTHORITY_INVALID 是 Chrome 最常见的 SSL 警告之一。当浏览器无法将网站的 SSL 证书追溯到操作系统或浏览器内置的受信任根证书颁发机构(CA)时,就会出现该错误。Chrome 不会加载页面,而是显示"您的连接不是私密连接",并将 NET::ERR_CERT_AUTHORITY_INVALID 标为根本原因。

该错误并不代表网站是恶意的 — 它仅仅表示 Chrome 无法验证证书的签发者。这种情况有几种正当原因:服务器使用了自签名证书、连接叶证书与受信任根的中间证书缺失、根 CA 已过期或被弃用、企业防火墙用自己的 CA 拦截流量、操作系统的 CA 证书包过时,或者证书被绑定到 Chrome 不再信任的机构。本指南将逐一解释这些原因,并提供完整的六步修复流程。

什么是 ERR_CERT_AUTHORITY_INVALID?

当浏览器连接到 HTTPS 网站时,服务器会在 TLS 握手期间发送其 SSL/TLS 证书。随后,Chrome 尝试从该叶证书出发,经过一个或多个中间 CA,构建一条通往其信任库中预装的根 CA 的信任链。如果这条链无法完成 — 因为中间证书缺失、根证书不被识别,或签发者完全不为人知 — Chrome 就会中止握手并抛出 ERR_CERT_AUTHORITY_INVALID

区分相关错误很重要。ERR_CERT_DATE_INVALID 指向过期问题,而 ERR_CERT_COMMON_NAME_INVALID 指向主机名不匹配。ERR_CERT_AUTHORITY_INVALID 专门针对签发者的身份与可信度,而非证书上的日期或名称。正因如此,一张证书可能完全有效、未过期且签发给正确的域名,但当通往受信任根的链路断裂时,仍会触发此错误。

常见原因

六个根本原因几乎涵盖了 ERR_CERT_AUTHORITY_INVALID 的每一次出现。识别出哪一条适用,是通往修复的最快路径。

分步修复指南

按顺序执行以下六个步骤。前三步解决最常见的服务器端原因;后三步涵盖客户端和应用层问题。

1. 使用 OpenSSL 检查证书链

首先查看服务器实际发送的内容。使用 openssl s_client 连接并检查链中的每一张证书:

openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null

查看底部的 Verify return code 行。值为 0 (ok) 表示链受信任;其他任何值(如 unable to get local issuer certificate)都确认存在信任缺口。数一下证书块 — 健康的链至少发送叶证书加一张中间证书。

2. 识别自签名或不受信任的颁发者

检查叶证书的颁发者以了解谁为其签名:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -issuer -subject

如果颁发者和使用者相同,说明是自签名证书,默认没有浏览器会信任它。如果颁发者是真实的 CA 但验证仍失败,问题在于缺少中间证书或根证书库过时 — 继续后续步骤。

3. 安装缺失的中间证书

最常见的服务器端修复是提供完整链。从你的 CA 下载中间证书,将叶证书和中间证书合并为单个 fullchain.pem,并让 Web 服务器指向它:

cat example.com.crt intermediate.crt > fullchain.pem

# 重新加载服务器
sudo nginx -t && sudo systemctl reload nginx
sudo apachectl configtest && sudo systemctl reload apache2

在 Nginx 中将 ssl_certificate 设为 fullchain.pem;在 Apache 中将 SSLCertificateFile 设为 fullchain.pem。重新加载并用 openssl s_client 重新测试,直到验证码显示 0 (ok)

4. 更新操作系统和浏览器的 CA 证书包

如果证书有效且链完整,但错误仅在一台机器上持续出现,说明本地信任库可能已过时。更新 CA 软件包和浏览器:

# Debian / Ubuntu
sudo apt-get update && sudo apt-get install --only-upgrade ca-certificates

# RHEL / CentOS / Fedora
sudo dnf upgrade ca-certificates

# 更新 Chrome,然后检查版本
chrome://settings/help

更新后重启计算机以加载新的根证书库。这能解决由近期新增的根(如 ISRG Root X1)或移除旧版根引起的错误。

5. 信任或绕过企业 MITM 代理

如果错误仅在公司网络出现,很可能是安全设备用自己的 CA 拦截了 HTTPS。检查颁发者即可确认 — 如果它以你的雇主或 Zscaler、Netskope、Fortinet 等厂商命名,就说明存在 MITM 代理。将代理的根证书安装到系统信任库,以便 Chrome 能验证重新签名的证书:

# Linux:将代理 CA 复制到信任库
sudo cp corporate-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# Windows:添加到"受信任的根证书颁发机构"存储区
certutil -addstore -f "Root" corporate-ca.crt

如果无法安装该 CA,唯一安全的办法是更换网络或请 IT 发布证书。绝不要为了绕过警告而全局禁用证书验证。

6. 修复绑定到错误 CA 的证书绑定

当错误只出现在某个移动或桌面应用中,而 Chrome 中没有时,该应用很可能使用了证书绑定。证书由不同的 CA 重新签发后,存储的绑定不再匹配,应用便会拒绝连接。将绑定更新为新 CA 的公钥,或更好的做法是绑定到叶证书的 SPKI,并在过渡期间轮换绑定:

# 为新证书提取 SPKI 哈希
openssl x509 -in example.com.crt -pubkey -noout \
  | openssl pkey -pubin -outform der \
  | openssl dgst -sha256 -binary \
  | openssl base64

在应用更新中发布新绑定,并在重叠期内保持旧绑定有效,使现有安装继续工作直到用户升级。

SSL 诊断命令

下面的命令能让你全面了解证书、其证书链以及本地信任库。在出现错误的机器上从终端运行它们。

# 1. 打印服务器提供的完整证书链
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null

# 2. 显示有效期、颁发者、使用者和 SAN
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -dates -issuer -subject -ext subjectAltName

# 3. 对照系统信任库验证证书链
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt example.com.crt

# 4. Windows:列出受信任的根 CA
certutil -store Root | findstr /C:"Cert:"

# 5. Java:列出 JDK 信任的 CA
keytool -list -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit

# 6. 检查某个根证书是否存在
trust anchor --list | grep -i "ISRG Root X1"

快速参考表

用此表将症状匹配到其根本原因及相应的修复方法。

症状 原因 修复方法
仅你的机器看到错误 企业 MITM 代理或 CA 证书包过时 安装代理 CA(步骤 5)或更新操作系统(步骤 4)
所有人都看到错误;证书来自真实 CA 缺少中间证书 提供 fullchain.pem(步骤 3)
错误仅出现在内部或开发站点 自签名证书 使用真实 CA 或在本地安装证书
证书续期后立即出现 新 CA 尚未受信任或绑定不匹配 更新绑定(步骤 6)或等待 CA 生效
新系统正常,旧系统报错 CA 证书包过时,缺少较新的根 更新操作系统 CA 证书包(步骤 4)
错误仅出现在某个应用,Chrome 中没有 证书绑定到错误的 CA 将绑定更新为新 CA 的 SPKI(步骤 6)

常见问题

看到 ERR_CERT_AUTHORITY_INVALID 时点击"继续访问网站"安全吗?

通常不安全。点击继续会关闭 Chrome 的保护,使你面临潜在的中间人攻击。仅在你能控制证书的受信任内部网络(如开发服务器)上绕过警告,绝不在公开网站或输入凭据时这样做。请先用上述步骤排查原因。

为什么错误在公司网络出现,在家里却没有?

你的公司很可能运行着 HTTPS 检查代理,用它自己的证书颁发机构对流量重新签名。在家里没有拦截,因此 Chrome 信任网站原有的证书。解决方法是将公司的根 CA 安装到你的信任库(步骤 5),IT 应提供该证书。

如何修复 localhost 上自签名证书导致的此错误?

使用 mkcert 生成受本地信任的证书,而非原始的自签名证书。mkcert 会将本地根 CA 安装到系统信任库,因此 Chrome 会接受它为 localhost 和任何开发域名签发的证书。或者,通过 ngrok 之类的隧道暴露开发服务器,以自动获得由 CA 签发的证书。

即使我的网站证书有效,过期的根证书也会导致 ERR_CERT_AUTHORITY_INVALID 吗?

会。如果最终为你的链签名的根 CA 已过期或被弃用,即使叶证书有效且未过期,Chrome 也无法构建受信任路径。典型例子是 2018 年对旧版赛门铁克根证书的弃用。解决方法是通过当前受信任的 CA 重新签发证书并提供新的链。

总结

ERR_CERT_AUTHORITY_INVALID 始终表示同一件事:Chrome 无法从服务器证书构建一条通往它所认可的根的信任链。原因几乎总是六种之一 — 自签名证书、缺少中间证书、根 CA 过期或被弃用、企业 MITM 代理、CA 证书包过时,或陈旧的证书绑定。按顺序执行这六个步骤:检查证书链、识别签发者、安装中间证书、更新信任库、处理代理,并修复绑定。

错误消除后,请保持证书自动续期、始终提供完整链,并定期更新操作系统以保持根证书库最新。少量的主动维护即可避免此警告干扰你的用户。

相关指南