指南 · 约 4 分钟阅读

SSL 证书错误:原因与修复

简短回答:证书错误表示浏览器无法确认它真的在和你的网站通信。常见原因有:证书已过期(ERR_CERT_DATE_INVALID)、证书没有包含准确的域名(ERR_CERT_COMMON_NAME_INVALID)、缺少中间证书或使用自签名证书(ERR_CERT_AUTHORITY_INVALID),或者服务器只支持旧版 TLS。一条 openssl 命令就能看出是哪一种;修复几乎总是在服务器端,而自动续期可以避免大部分问题。

更新于 · HackGrade

先检查你的网站。 免费扫描会告诉你需要做哪些修复。 SSL 与 HTTPS 检测

快速步骤

  1. 从外部读取证书. 用 openssl 检查证书的日期、域名和证书链。
  2. 把错误对应到原因. 已过期、域名不对、证书链不受信任,或协议问题。
  3. 在服务器上修复. 续期、包含所有主机名重新签发,或安装完整证书链。
  4. 允许 TLS 1.2 和 1.3. 关闭 TLS 1.0 和 1.1,并确保现代客户端可以连接。
  5. 自动续期. 证书现在最长只有 200 天有效期,很快将缩短到 100 天,因此续期必须自动化。

代码和配置保持英文。

第一步:从外部查看证书

浏览器会在警告下方显示错误代码(点击高级)。然后看看服务器实际发送了什么。下面的命令显示证书颁发给谁、由谁签发、有效期以及覆盖的所有主机名:

Terminal
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates -ext subjectAltName

下面的命令显示证书链以及是否验证通过(查找 Verify return code: 0 (ok)):

Terminal
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com </dev/null 2>/dev/null \
  | grep -E '^ *[0-9]+ s:|Verify return code'

NET::ERR_CERT_DATE_INVALID:已过期(或时钟错误)

证书的 notAfter 日期已过;如果只有某一位访客看到这个错误,则可能是他设备的时钟不对。续期证书并重新加载 Web 服务器。如果使用 Certbot,请确认自动续期确实在运行:

Terminal
sudo certbot renew --dry-run
systemctl list-timers | grep -i certbot
sudo systemctl reload nginx   # or: sudo systemctl reload apache2

续期已不再是一年一次的事。根据 CA/Browser Forum 的规则,2026 年 3 月 15 日起签发的公共证书最长有效 200 天;2027 年 3 月 15 日起上限为 100 天;2029 年 3 月 15 日起为 47 天。手动续期将跟不上节奏,请使用主机商的自动证书或 Certbot 等 ACME 客户端。

NET::ERR_CERT_COMMON_NAME_INVALID:域名不匹配

证书本身有效,但不适用于地址栏中的域名。把地址与第一条命令输出的 subjectAltName 列表对比。典型原因:证书覆盖 yourdomain.com 但不包括 www.yourdomain.com;新增了子域名却没有证书;或服务器发送了同一 IP 上另一个网站(默认站点)的证书。用你使用的所有域名重新签发证书:

Terminal
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com --expand

如果域名都正确,但仍收到其他网站的证书,请检查该域名的 server 块或虚拟主机是否有自己的证书配置行和正确的 server_name。

NET::ERR_CERT_AUTHORITY_INVALID:签发者不受信任或证书链断裂

要么证书是自签名的(测试可以,公开网站绝对不行),要么服务器只发送了你自己的证书,没有发送把它连接到受信任根证书的中间证书。有些桌面浏览器会自行补全缺口,所以网站在你那里正常,在手机或其他工具上却会失败。请始终配置完整证书链文件:

nginx / Apache
# nginx
ssl_certificate     /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;

# Apache 2.4.8+
SSLCertificateFile    /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
SSLProtocol -all +TLSv1.2 +TLSv1.3

如果证书是从商业供应商购买的,请下载“full chain”或“bundle”版本,用它代替单独的证书文件。

ERR_SSL_PROTOCOL_ERROR 和 ERR_SSL_VERSION_OR_CIPHER_MISMATCH

浏览器和服务器无法就协议达成一致。常见原因:服务器只提供当前浏览器已不再接受的 TLS 1.0 或 1.1;443 端口返回的是未加密的 HTTP;或证书与私钥不匹配。测试服务器接受哪些版本:

Terminal
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -tls1_2 </dev/null 2>/dev/null | grep -E 'Protocol|Cipher'
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com -tls1_3 </dev/null 2>/dev/null | grep -E 'Protocol|Cipher'

两条命令都应输出协议和加密套件。Mozilla 的 SSL Configuration Generator 为 nginx、Apache 等服务器提供经过测试的最新配置。

Cloudflare 526 错误与重定向循环

当网站前面有 Cloudflare 时,会有两张证书:Cloudflare 面向访客的证书,以及你的服务器用于与 Cloudflare 连接的证书。在 Full (strict) 模式下,526 错误表示服务器证书无效或已过期;请续期,或安装免费的 Cloudflare Origin Certificate。避免使用 Flexible 模式:到服务器的连接没有加密,再加上服务器端的 HTTPS 重定向,就会导致 ERR_TOO_MANY_REDIRECTS。

问题出在访客一侧时

  • 设备日期或时间错误,会让所有网站都出现日期错误。
  • 杀毒软件或企业的“HTTPS 检查”会替换证书,可能引发签发者错误。
  • 公共 Wi-Fi 的登录页面会拦截第一个 HTTPS 请求,直到访客登录。

如果只有一个人看到错误,而上面的 openssl 检查都正常,很可能就是这些情况之一。

HackGrade 会检查什么

免费扫描会检查证书是否受信任,在证书三周内到期时发出警告,并标记旧版 TLS 和缺失的 HTTP 到 HTTPS 重定向。Site、Business 和 Agency 套餐每周重复扫描,并在发生变化时发送提醒。更多背景请参阅我的 SSL 证书配置正确吗?

常见问题

如何修复 NET::ERR_CERT_DATE_INVALID?

续期证书并重新加载 Web 服务器。如果再次发生,说明自动续期没有生效:运行“certbot renew --dry-run”或检查主机控制面板。如果只有一位访客看到,可能是他设备的时钟不对。

为什么网站在我的电脑上正常,在手机上却显示证书错误?

通常是缺少中间证书。有些桌面浏览器会自己获取,很多其他客户端不会。请配置完整证书链(fullchain.pem 或供应商提供的 bundle)。

我可以让访客点击“继续前往”吗?

不可以。警告之所以存在,是因为连接无法验证;让客户习惯忽略它会使他们面临风险。请修复证书。

现在 SSL 证书的有效期是多久?

2026 年 3 月 15 日起签发的公共证书最长有效 200 天。2027 年 3 月 15 日起上限降为 100 天,2029 年 3 月 15 日起降为 47 天,因此续期必须自动化。

参考资料

相关指南

免费 · 即时 · 无需注册

抢在别人之前了解你的评级。

被动扫描。未经你的许可,不会进行任何攻击性检测。

免费开始。Pro 每月 29 美元起(按年付费约合每月 24 美元),或 29 美元购买一次性完整报告。 查看价格