浏览器拦截 sha-1 证书是因该算法已被证实不安全,需替换为 sha-256 或更高签名的证书,并在 nginx 中禁用 tlsv1.0/v1.1 及弱密码套件,最后通过 ssl labs 验证签名算法与协议支持。

浏览器拦截 SHA-1 证书,本质是拒绝使用已被证实不安全的签名算法。Nginx 本身不生成证书,但若你配置了含 SHA-1 签名的旧证书(比如多年前签发、未更新的 GoDaddy 或自签名证书),现代浏览器(Chrome、Firefox、Edge)会直接阻止访问,显示“您的连接不是私密连接”或“NET::ERR_CERT_SIGNATURE_ALGORITHM_DISABLED”。解决关键不在 Nginx 配置本身,而在于替换证书 + 强化 TLS 协议与密码套件。
确认问题根源:先验证是不是 SHA-1 证书
别急着改配置,先用命令行快速定位:
- 在服务器上运行:openssl x509 -in your_domain.crt -noout -text | grep "Signature Algorithm",如果输出包含 sha1WithRSAEncryption,就坐实了问题。
- 也可用在线工具如 SSL Checker 输入域名,查看“Signature Algorithm”字段。
- 注意:SHA-1 是证书签名算法,和你在 CSR 里选的哈希算法(如 sha256)无关——哪怕你当初用
openssl req -sha256生成 CSR,CA 若用 SHA-1 签发最终证书,照样被拦截。
获取并部署符合现代标准的新证书
必须使用由可信 CA 用 SHA-256(或更高)签名的证书。推荐方案:
-
Let’s Encrypt 免费证书:最常用,天然支持 SHA-256。用 Certbot 自动申请并续期,生成的
fullchain.pem和privkey.pem直接可用。 - 商业证书升级:若已购买付费证书但过期或为 SHA-1,登录 CA 后台重新申请,务必勾选“SHA-256”或“RSA-SHA256”选项,下载时选择 Nginx 格式。
-
合并证书链:很多 CA(如 GoDaddy)下发多个 .crt 文件(域名证书 + 中间证书)。需合并为一个文件供 Nginx 使用:
cat your_domain.crt gd_bundle-g2-g1.crt > your_domain_full.crt
Nginx 配置加固:禁用老旧协议与弱套件
即使换了新证书,若 Nginx 允许 TLSv1.0/v1.1 或 SHA-1 密码套件,仍可能被安全扫描工具标为“弱加密”。在 server 块中加入以下指令:
- 强制 TLS 版本:ssl_protocols TLSv1.2 TLSv1.3;(彻底禁用 TLSv1.0/v1.1)
- 指定强密码套件:ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:!NULL:!aNULL:!MD5:!SHA1:!RC4:!DH:!EXPORT;
- 启用 OCSP Stapling(可选但推荐):ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid=300s; 加速证书状态验证,提升首屏速度。
验证与上线前检查
改完配置别直接重载,按顺序走完这三步:
- 执行 nginx -t 确保语法无误;
- 用 curl -I https://your-domain.com 查看响应头是否返回
200 OK; - 打开 SSL Labs Test 全面扫描,重点确认:
- “Certificate #1” 的 Signature Algorithm 显示为 sha256WithRSAEncryption;
- “Protocol Support” 中 TLS 1.0/1.1 为 No;
- 最终评级达到 A 或 A+。











