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

> SEC_ERROR_UNKNOWN_ISSUER 表示 Firefox 无法把证书追溯到受信任的根：缺中间证书、私有 CA，或者 HTTPS 被拦截。

Source: https://ssl.sh/zh/errors/sec-error-unknown-issuer/
Last updated: 2026-11-10

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

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

外部检测提示证书链有问题，是网站要改配置；检测正常而所有网站都报，是本机有软件在拦截 HTTPS。用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 从外部查网站：

```bash
curl ssl.sh/example.com
```

- **检测提示证书链不完整或签发者不受信任**：网站要改配置。
- **检测显示证书链正常**：在 Firefox 里点 **“高级…” → “查看证书”**，看颁发者。写的是某个杀毒软件、你们公司或某个代理设备，就是本地拦截的问题。见 [杀毒软件 HTTPS 扫描](https://ssl.sh/zh/errors/antivirus-https-scanning-ssl-error/) 和 [公司 SSL 解密](https://ssl.sh/zh/errors/corporate-ssl-inspection/)。

## 原因

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

### 1. 缺中间证书（真实网站上最常见）

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

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

只有 `0 s:` 没有 `1 s:` 就是证书链不完整。详见 [缺少中间证书](https://ssl.sh/zh/errors/missing-intermediate-certificate/)。

### 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](https://ssl.sh/zh/errors/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`：

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

商业证书按顺序拼接：

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

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

**2. 不确定要哪些中间证书**，用 [证书链工具](https://ssl.sh/zh/tools/chain-builder/) 自动生成。

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