# ERR_SSL_KEY_USAGE_INCOMPATIBLE：Chrome 强制检查 RSA 密钥用途

> ERR_SSL_KEY_USAGE_INCOMPATIBLE 表示私有 CA 签发的 RSA 证书缺少 Chrome 要求的密钥用途。重新签发并加上 digitalSignature 即可。

Source: https://ssl.sh/zh/errors/err-ssl-key-usage-incompatible/
Last updated: 2026-11-10

**ERR_SSL_KEY_USAGE_INCOMPATIBLE 的意思是：服务器 RSA 证书声明它的密钥“不能用于”TLS 握手正要它做的事。** Chrome 从 2024 年开始对本地信任（私有）CA 签发的证书执行这项检查，于是用了多年的内网系统、设备管理后台突然打不开了。

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

内网系统报这个错，要由管 CA 的人重签证书；公开网站报这个错，问题在你设备或网络上的 HTTPS 拦截。如果这台主机能从公网访问，用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 查一下证书：

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

- **用公司内部 CA 证书的内网系统**：证书必须由管 CA 的人重新签发。作为用户，报给 IT 部门。
- **公开网站**：公开证书都是合规的，要找你设备或网络上的 HTTPS 拦截（杀毒软件或公司代理用自己的根证书）。见 [公司 SSL 解密](https://ssl.sh/zh/errors/corporate-ssl-inspection/)。

## 原因

多数情况下是 RSA 证书的密钥用途只写了 keyEncipherment。

### 1. 密钥用途只写了 keyEncipherment

老的 RSA 证书模板常常只写 `keyEncipherment`，这对已经淘汰的 RSA 密钥交换套件够用。现代握手（ECDHE 以及所有 TLS 1.3）要求服务器签名，需要 `digitalSignature`。查看方法：

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

### 2. 只写了 digitalSignature，却在用 RSA 密钥交换

反过来的情况：服务器协商出老的 `TLS_RSA_*` 套件，而证书没有 `keyEncipherment`。在服务器上禁用 RSA 密钥交换，它本来也没有前向保密。

### 3. 设备固件生成证书的方式过时

防火墙、存储阵列、服务器远程管理卡、视频监控平台等设备会用老模板自己生成证书。升级固件，或者上传一张正确签发的证书。

### 4. 拦截类产品

用 RSA 密钥和过时密钥用途重新签发流量的安全软件，会让所有网站都报这个错。升级产品。

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

只有 Chrome 内核的浏览器报 ERR_SSL_KEY_USAGE_INCOMPATIBLE，Firefox 和 Safari 遇到同一张证书常常能打开。

| 浏览器 | 显示内容 |
|---|---|
| Chrome / Edge / 360 极速模式 / QQ 浏览器 | “此网站无法提供安全连接”，代码 `ERR_SSL_KEY_USAGE_INCOMPATIBLE` |
| Firefox | 某些配置下报 [SEC_ERROR_INADEQUATE_KEY_USAGE](https://ssl.sh/zh/errors/sec-error-inadequate-key-usage/)，也可能正常打开 |
| Safari | 取决于证书，常常能打开 |

国产双核浏览器的内核版本通常落后于 Chrome，升级后才开始报错也很常见。

## 站长怎么修

修法是重新签发证书，在 keyUsage 里写上 digitalSignature。

**1. 用正确的密钥用途重新签发。** 基于 OpenSSL 的 CA：

```bash
printf "basicConstraints=CA:FALSE\nkeyUsage=critical,digitalSignature,keyEncipherment\nextendedKeyUsage=serverAuth\nsubjectAltName=DNS:intranet.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
```

Windows AD CS 上复制一份“Web 服务器”模板，在“扩展 → 密钥用法”里确认勾选了“数字签名”，再重新签发。

**2. 新的内部证书可以考虑 ECDSA 密钥**，它总是使用数字签名，不会遇到这类问题。

**3. 从服务器的套件列表里去掉老的 RSA 密钥交换。**

**4. 验证。** 部署前用 [证书解析](https://ssl.sh/zh/tools/certificate-decoder/) 检查新证书，再在 Chrome 里确认。
