浏览器

NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM:SHA-1 或 MD5 签名证书

作者: · 最后核实

报错信息NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM

NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM 的意思是:服务器发来的证书是用 SHA-1 或 MD5 签名的,这两种算法可以被伪造。 攻击者有能力造出一张签名相同的另一张证书,所以 Chrome 拒绝接受。修法是重新签发一张用 SHA-256 或更强算法签名的证书。

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

检测结果里有 SHA-1 或 MD5 证书,是网站的问题;全是 SHA-256,是你的设备或网络换掉了证书。用 SSL 检测 查看签名算法:

curl ssl.sh/example.com
  • 检测显示站点证书或中间证书是 SHA-1、MD5:网站或设备需要更新。
  • 检测显示全是 SHA-256:你的设备或网络出示了另一张证书,多半来自老旧的 HTTPS 扫描软件或代理。升级或关闭它。

原因

这个错误的来源都是证书链里还留着 SHA-1 或 MD5 签名的证书:老 CA、老中间证书、老设备或老拦截软件。

1. 老的内部 CA

很多年前搭的 Windows AD CS 或 OpenSSL CA 可能还在用 SHA-1 签名。查看站点证书:

echo | openssl s_client -connect intranet.example.com:443 -servername intranet.example.com 2>/dev/null \
  | openssl x509 -noout -text | grep "Signature Algorithm" | head -1

看到 sha1WithRSAEncryption 或 md5WithRSAEncryption 就是了。

2. 证书链里有 SHA-1 中间证书

站点证书没问题,服务器却还在发一张用 SHA-1 签名的老中间证书。替换证书链文件,证书链工具 会选用当前的中间证书。

3. 设备出厂证书

老的打印机、交换机、UPS 管理卡、KVM 出厂自带 SHA-1 证书。升级固件或上传新证书。

4. 过时的拦截软件

很老的安全产品可能仍用 SHA-1 重新签发流量,这时所有 HTTPS 网站在 Chrome 里都会失败。

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

同一个问题在 Chrome 系浏览器里报这个代码,Firefox 报 SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED,OpenSSL 3.x 报 ca md too weak。

浏览器 显示内容
Chrome / Edge / 360 极速模式 / QQ 浏览器 “您的连接不是私密连接”,代码 NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM
Firefox “警告:面临潜在的安全风险”,代码 SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED
Safari “此连接非私人连接”
OpenSSL 3.x 默认安全级别下报 ca md too weak

站长怎么修

用 SHA-256 重新签发站点证书,并把中间证书换成 SHA-256 的版本,报错就会消失。

1. 生成新私钥和 CSR(当前 OpenSSL 默认就是 SHA-256):

openssl req -new -newkey rsa:2048 -nodes -sha256 \
  -keyout example.com.key -out example.com.csr \
  -subj "/CN=example.com" -addext "subjectAltName=DNS:example.com"

也可以用浏览器里的 CSR 生成器。

2. 从公开 CA 重新签发;内部 CA 把哈希算法改成 SHA-256(AD CS 执行 certutil -setreg ca\csp\CNGHashAlgorithm SHA256,然后重启 CA 服务)。

3. 把中间证书换成 CA 当前的 SHA-256 证书链。

4. 验证。 用 curl ssl.sh/example.com 和 证书解析 检查:除根证书外,每张证书都应显示 sha256WithRSAEncryption 或 ECDSA-SHA256/384 签名。

常见问题

SHA-1 还有地方能用吗?

公开信任的 TLS 证书不能用。有些封闭的内部系统还在用 SHA-1 证书,但新版 Chrome、Firefox、Safari 都会拒绝,当前 OpenSSL 的默认安全级别也会拒绝。

我的根 CA 是 SHA-1 的,需要换吗?

根证书自己的 SHA-1 签名不用换。浏览器信任根证书是因为它在信任库里,而不是看它怎么给自己签名。但它签发出去的证书必须用 SHA-256 或更强的算法,所以 CA 软件要相应配置。

Firefox 遇到同样的问题显示什么?

Firefox 在“警告:面临潜在的安全风险”页面上报 SEC_ERROR_CERT_SIGNATURE_ALGORITHM_DISABLED。

国密(SM2/SM3)证书在 Chrome 里会报这个错吗?

Chrome、Firefox、Safari 等主流浏览器不支持国密算法签名的证书,通常会报证书无效或不受信任,而不一定是这个代码。需要国密的系统一般采用“国密证书 + RSA/ECC 证书”双证书部署,让国际浏览器使用 RSA/ECC 证书。

老设备只能出示 SHA-1 证书,还能继续用吗?

可以在内网继续用,但不要让它暴露在公网上,只在可信的管理网络里访问它的管理页面。先去厂商官网找能导入新证书的固件,很多设备支持上传 PEM 格式的证书和私钥,可以用内部 CA 以 SHA-256 签发一张。实在无法更新,就要计划替换,因为新版浏览器已经打不开它的 HTTPS 管理界面了。

资料来源

  1. Chromium net_error_list.h
  2. RFC 5280: X.509 certificate profile
  3. Apple:iOS 13 和 macOS 10.15 中的受信任证书要求
  4. Mozilla Support: Error codes on secure websites