# SEC_ERROR_INADEQUATE_KEY_USAGE：Firefox 报错原因和解决方法

> SEC_ERROR_INADEQUATE_KEY_USAGE 表示证书的密钥用途不允许当前操作。多见于自制证书、设备证书和 Firefox 里残留的证书数据。

Source: https://ssl.sh/zh/errors/sec-error-inadequate-key-usage/
Last updated: 2026-11-10

**SEC_ERROR_INADEQUATE_KEY_USAGE 的意思是：证书链里有一张证书“没有权限”做它正在做的事。** 每张证书都可以在[密钥用途](https://ssl.sh/zh/glossary/key-usage/)扩展里声明允许的用途；服务器证书不能为握手签名，或者 CA 证书不能给别的证书签名，Firefox 就会拒绝连接。

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

[SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 能看出服务器证书的密钥用途对不对：有问题就要重签；检测正常而只有 Firefox 报错，就查 Firefox 里导入的证书。命令行检测：

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

- **检测提示密钥用途有问题，或者网站用的是自制证书**：证书要重新签发，访客这边没有安全的办法。
- **检测正常，别的浏览器也正常**：查 Firefox。打开“设置 → 隐私与安全 → 证书 → 查看证书”，在 **“证书颁发机构”** 选项卡里找有没有以这个网站或设备命名的证书。服务器证书被当作 CA 导入到这里，是常被报告的原因；删掉它，用网站正常的证书即可。

## 原因

这个报错有 5 种原因，多数出在证书的密钥用途（Key Usage）扩展上，少数是 Firefox 配置文件里的旧数据。

### 1. 服务器证书缺 digitalSignature

现代 TLS 密钥交换（ECDHE）要求服务器对握手数据签名。密钥用途里只写了 `keyEncipherment` 的证书就会失败。查看方法：

```bash
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -ext keyUsage,extendedKeyUsage,basicConstraints
```

### 2. CA 证书缺 keyCertSign

内部 CA 建的时候密钥用途里没写 `keyCertSign`，它签出来的证书就都无效，Firefox 会拒绝它下面的所有证书。

### 3. 服务器证书被当成 CA 导入

有人为了消除警告，把网站证书导入到了“证书颁发机构”选项卡，Firefox 就把它当成 CA。它没有 `keyCertSign`，就会报这个错。企业内网里给员工电脑“批量导证书”时，最容易出现这种误操作。

### 4. 设备证书的密钥用途不常规

部分路由器、打印机、网络设备生成的证书，密钥用途是给其他场景设计的。升级固件，或者上传一张正确生成的证书。

### 5. 配置文件里的残留数据

配置文件 `cert9.db` 里的旧例外或旧导入证书可能和新证书冲突。在 `about:profiles` 新建配置文件测试。

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

Chrome 把密钥用途问题报成 ERR_SSL_KEY_USAGE_INCOMPATIBLE 或 NET::ERR_CERT_INVALID，OpenSSL 报 unsuitable certificate purpose。

| 浏览器 | 显示内容 |
|---|---|
| Firefox | “建立安全连接失败”或“警告：面临潜在的安全风险”，代码 `SEC_ERROR_INADEQUATE_KEY_USAGE` |
| Chrome / Edge / 360 / QQ 浏览器 | [ERR_SSL_KEY_USAGE_INCOMPATIBLE](https://ssl.sh/zh/errors/err-ssl-key-usage-incompatible/) 或 [NET::ERR_CERT_INVALID](https://ssl.sh/zh/errors/net-err-cert-invalid/) |
| Safari | “此连接非私人连接” |
| OpenSSL | 验证时报 `unsuitable certificate purpose` |

## 站长怎么修

公开 CA 签发的证书自带正确的密钥用途；内部证书要带上 digitalSignature（服务器证书）或 keyCertSign（CA 证书）重新签发。

**1. 能用公开证书就用公开证书。** 公开 CA 签发的证书默认就带正确的密钥用途，宝塔面板或云厂商的免费证书都可以。

**2. 内部证书带上正确扩展重新签发。** 服务器证书：

```bash
printf "basicConstraints=CA:FALSE\nkeyUsage=critical,digitalSignature,keyEncipherment\nextendedKeyUsage=serverAuth\nsubjectAltName=DNS:example.com\n" > server.ext
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
  -days 200 -extfile server.ext -out server.crt
```

CA 证书要带 `basicConstraints=critical,CA:TRUE` 和 `keyUsage=critical,keyCertSign,cRLSign`。

**3. 部署前先解析检查。** 把结果粘到 [证书解析](https://ssl.sh/zh/tools/certificate-decoder/) 里逐项确认扩展，再用 `curl ssl.sh/example.com` 和 Firefox 测试。
