# SEC_ERROR_REUSED_ISSUER_AND_SERIAL：证书序列号重复怎么办

> Firefox 提示 SEC_ERROR_REUSED_ISSUER_AND_SERIAL，说明两张证书的签发者和序列号相同，常见于路由器、NAS 重新生成了自签名证书。

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

**SEC_ERROR_REUSED_ISSUER_AND_SERIAL 的意思是：Firefox 已经记住了一张签发者、序列号都和眼前这张相同、内容却不同的证书。** 这违反了 X.509 的规则，Firefox 因此拒绝连接。实际情况几乎都是：路由器、NAS 或测试服务器重新生成了自签名证书，却沿用了同一个序列号，而 Firefox 还记着旧的那张。

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

两边都有责任：设备生成了序列号重复的证书，你的 Firefox 配置文件又存着上一张。如果是公网主机，用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 查一下：

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

公开信任的证书不应该出现这个问题，因为公开 CA 必须使用唯一的随机序列号。如果是你自家网络里的设备，在本地处理就是安全的。

## 原因

最常见的原因是光猫、家用路由器、NAS 重新生成自签名证书时沿用了固定序列号，另外 3 种情况也都和自签名或内部证书有关。

### 1. 设备重新生成了自签名证书

固件升级、恢复出厂、改主机名之后，很多设备会用同样的签发者名称和固定序列号（常见 0、1、1000）生成新证书，而 Firefox 里还存着以前加例外时的旧证书。查看序列号：

```bash
echo | openssl s_client -connect 203.0.113.10:443 2>/dev/null | openssl x509 -noout -serial -issuer -dates
```

### 2. 多台设备出厂证书一模一样

同型号的两台设备可能出厂证书的签发者和序列号相同，密钥却不同。两台都访问过就会触发这个错误。

### 3. 测试证书用了固定序列号

每次都用 `-set_serial 1` 生成证书的脚本会产生重复，新测试证书总和上一张冲突。

### 4. 内部 CA 的序列号计数器乱了

恢复了 CA 备份或重置了序列号文件，可能会重复签发已经用过的序列号。

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

只有 Firefox 会报这个代码，Chrome、Edge 和 Safari 通常只显示普通的自签名证书警告。

| 浏览器 | 显示内容 |
|---|---|
| Firefox | “建立安全连接失败”，说明证书与该 CA 签发的另一张证书序列号相同，代码 `SEC_ERROR_REUSED_ISSUER_AND_SERIAL` |
| Chrome / Edge / 360 / QQ 浏览器 | 通常只是普通的自签名警告（[NET::ERR_CERT_AUTHORITY_INVALID](https://ssl.sh/zh/errors/net-err-cert-authority-invalid/)） |
| Safari | 自签名证书对应的“此连接非私人连接” |

## 站长怎么修

给设备换一张随机序列号的证书能解决所有人的问题；清除 Firefox 里的旧证书只解决这一个浏览器。

**1. 清除 Firefox 里存的旧证书。** 设置 → 隐私与安全 → 证书 → 查看证书，在“服务器”“证书颁发机构”“其他”几个选项卡里找以设备名或 IP 命名的条目，删除后刷新。

**2. 给设备换一张随机序列号的证书。** 不指定 `-set_serial` 时，OpenSSL 默认使用随机序列号：

```bash
openssl req -x509 -newkey rsa:2048 -nodes -days 365 \
  -keyout router.key -out router.crt -subj "/CN=router.example.com" \
  -addext "subjectAltName=DNS:router.example.com,IP:203.0.113.10"
```

[自签名证书生成器](https://ssl.sh/zh/tools/self-signed-certificate-generator/) 生成的证书同样带随机序列号。

**3. 更好的办法：** 给设备起一个真实域名，用 DNS 验证申请公开信任的证书，自签名警告和序列号冲突就都没了。用 [证书解析](https://ssl.sh/zh/tools/certificate-decoder/) 确认新证书的序列号是一串很长的随机数。
