浏览器

SEC_ERROR_UNKNOWN_ISSUER:Firefox 证书签发者未知怎么修

作者: · 最后核实

报错信息SEC_ERROR_UNKNOWN_ISSUER

SEC_ERROR_UNKNOWN_ISSUER 的意思是:Firefox 不认识、也不信任这张证书的签发者。 只有一个网站报,多半是服务器用私有 CA 的证书却没发完整证书链,或者是自己做的证书;所有网站都报,就是你的设备或网络上有东西在拦截 HTTPS。

先判断是网站的问题还是你电脑的问题

外部检测提示证书链有问题,是网站要改配置;检测正常而所有网站都报,是本机有软件在拦截 HTTPS。用 SSL 检测 从外部查网站:

curl ssl.sh/example.com
  • 检测提示证书链不完整或签发者不受信任:网站要改配置。
  • 检测显示证书链正常:在 Firefox 里点 “高级…” → “查看证书”,看颁发者。写的是某个杀毒软件、你们公司或某个代理设备,就是本地拦截的问题。见 杀毒软件 HTTPS 扫描 和 公司 SSL 解密。

原因

这个报错有 4 种原因,真实网站上最常见的是服务器没发中间证书。

1. 缺中间证书(真实网站上最常见)

服务器只发了站点证书。Firefox 预加载了公开 CA 的中间证书,能掩盖不少这类错误,但私有 CA、刚启用的新中间证书、部分地区性 CA 仍然会失败。看看服务器发了什么:

openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null \
  | grep -E "^ *[0-9] s:|i:"

只有 0 s: 没有 1 s: 就是证书链不完整。详见 缺少中间证书。

2. Firefox 不信任杀软或代理的根证书

做 HTTPS 扫描的安全软件和公司代理会把自己的根证书装进 Windows 或 macOS。Firefox 用自己的证书库,除非这个软件同时注册到 Firefox,或者开启了 security.enterprise_roots.enabled,否则所有网站都会失败。

3. 私有 CA 或自建 CA

公司内网门户、OA 系统用内部 CA 签的证书,没装这个根的人都会报错。应该统一下发根证书,而不是让员工去点“接受风险”。

4. 根证书不在 Mozilla 的列表里

个别 CA 被微软或苹果信任,却不在 Mozilla 的根证书计划里,或者已被 Mozilla 移除。查一下签发 CA,必要时更换。国内购买的一些证书品牌需要确认其根证书在 Mozilla 列表中。

在各浏览器/系统上的样子

Chrome 系浏览器报 NET::ERR_CERT_AUTHORITY_INVALID,但 Chrome 会自动补全中间证书,同一个网站在 Chrome 里可能不报错。

浏览器 显示内容
Firefox “警告:面临潜在的安全风险”,说明证书颁发者未知、证书为自签名或服务器未发送正确的中间证书
Chrome / Edge / 360 / QQ 浏览器 NET::ERR_CERT_AUTHORITY_INVALID;如果 Chrome 自动补了链,则不报错
Safari “此连接非私人连接”
curl / Python / Java unable to get local issuer certificate、CERTIFICATE_VERIFY_FAILED、PKIX path building failed

站长怎么修

修法是发送完整证书链,再用不会自动补链的客户端验证。

1. 发送完整证书链。 站点证书在前,然后依次是中间证书,根证书不用放。Let's Encrypt 用 fullchain.pem:

ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

商业证书按顺序拼接:

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

从阿里云、腾讯云下载的 Nginx 格式证书包,.pem/.crt 文件里一般已经是两段证书,整份粘到宝塔或 CDN 控制台,不要只取第一段。

2. 不确定要哪些中间证书,用 证书链工具 自动生成。

3. 用严格的客户端验证。 curl ssl.sh/example.com 和新建的 Firefox 配置文件都应该能通过。不要只用 Chrome 测,它会悄悄帮你补链。

常见问题

SEC_ERROR_UNKNOWN_ISSUER 危险吗?

可能危险:Firefox 无法确认证书是谁签发的,也就排除不了有人冒充。需要输密码、付款的公开网站不要接受风险;如果是你自己的路由器、测试服务器,一般没事。

Chrome 能正常打开,到底谁对?

可能都对。Chrome 也许自己补全了缺失的中间证书,也许信任了你在 Windows/macOS 里装的、Firefox 不用的根证书。服务器还是应该修好,保证所有客户端都能用。见 只有 Firefox 报这个错。

怎么让 Firefox 信任公司的根证书?

最好让 IT 通过企业策略统一部署;也可以手动导入:设置 → 隐私与安全 → 证书 → 查看证书 → 证书颁发机构 → 导入。或者在 about:config 里把 security.enterprise_roots.enabled 设为 true,让 Firefox 读取 IT 装进操作系统的根证书。

资料来源

  1. Mozilla Support: Error codes on secure websites
  2. Mozilla Support: Set up Certificate Authorities (CAs) in Firefox
  3. Mozilla Wiki: Intermediate preloading
  4. Mozilla Wiki: CA program