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

> NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM 表示证书或中间证书用 SHA-1、MD5 签名。重新签发 SHA-256 及以上的证书即可。

Source: https://ssl.sh/zh/errors/net-err-cert-weak-signature-algorithm/
Last updated: 2026-11-10

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

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

检测结果里有 SHA-1 或 MD5 证书，是网站的问题；全是 SHA-256，是你的设备或网络换掉了证书。用 [SSL 检测](https://ssl.sh/zh/tools/ssl-checker/) 查看签名算法：

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

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

## 原因

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

### 1. 老的内部 CA

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

```bash
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 签名的老中间证书。替换证书链文件，[证书链工具](https://ssl.sh/zh/tools/chain-builder/) 会选用当前的中间证书。

### 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）：

```bash
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 生成器](https://ssl.sh/zh/tools/csr-generator/)。

**2. 从公开 CA 重新签发**；内部 CA 把哈希算法改成 SHA-256（AD CS 执行 `certutil -setreg ca\csp\CNGHashAlgorithm SHA256`，然后重启 CA 服务）。

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

**4. 验证。** 用 `curl ssl.sh/example.com` 和 [证书解析](https://ssl.sh/zh/tools/certificate-decoder/) 检查：除根证书外，每张证书都应显示 `sha256WithRSAEncryption` 或 ECDSA-SHA256/384 签名。
