浏览器

ERR_SSL_KEY_USAGE_INCOMPATIBLE:Chrome 强制检查 RSA 密钥用途

作者: · 最后核实

报错信息ERR_SSL_KEY_USAGE_INCOMPATIBLE

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

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

内网系统报这个错,要由管 CA 的人重签证书;公开网站报这个错,问题在你设备或网络上的 HTTPS 拦截。如果这台主机能从公网访问,用 SSL 检测 查一下证书:

curl ssl.sh/example.com
  • 用公司内部 CA 证书的内网系统:证书必须由管 CA 的人重新签发。作为用户,报给 IT 部门。
  • 公开网站:公开证书都是合规的,要找你设备或网络上的 HTTPS 拦截(杀毒软件或公司代理用自己的根证书)。见 公司 SSL 解密。

原因

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

1. 密钥用途只写了 keyEncipherment

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

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,也可能正常打开
Safari 取决于证书,常常能打开

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

站长怎么修

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

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

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. 验证。 部署前用 证书解析 检查新证书,再在 Chrome 里确认。

常见问题

为什么 Chrome 一升级就开始报这个错?

以前 Chrome 对本地信任 CA 签发的 RSA 证书不检查密钥用途。Chrome 124 开始强制检查,于是内网里用了好几年的证书突然失败。这些证书一直都不合规,只是 Chrome 不再容忍了。

有没有策略可以关掉这个检查?

Chrome 提供过一个临时企业策略 RSAKeyUsageForLocalAnchorsEnabled,给管理员留出重签证书的时间。只能当权宜之计,它目前是否还可用请查 Chrome Enterprise 政策列表,根本办法还是重新签发证书。

公开网站会遇到这个错误吗?

几乎不会。公开 CA 签发的 RSA 证书早就带 digitalSignature。如果公开网站报这个错,要怀疑是拦截类产品在用它自己本地安装的根证书重新签发流量。

资料来源

  1. Chromium net_error_list.h
  2. Chrome Enterprise 政策列表
  3. RFC 5280 4.2.1.3 节:Key Usage
  4. RFC 8446 4.4.3 节:Certificate Verify