ssl tls security certificates web-development

解决 'certificate expired' 及常见的 SSL/TLS 错误

一份详尽的指南,帮助您修复 SSL/TLS 错误,如 'ERR_CERT_DATE_INVALID'、'自签名证书' 和 '握手失败'。了解如何保护您的网站安全。

2026-04-11

解决 "certificate expired" 及常见的 SSL/TLS 错误:完整指南

SSL (安全套接层) 及其继任者 TLS (传输层安全) 是保持互联网安全的协议。它们确保您的浏览器与网站之间发送的数据经过加密且私密。然而,当证书出现问题时,浏览器会显示恐怖的警告页面,这可能会吓跑 99% 的访问者。

在本指南中,我们将解释最常见的 SSL/TLS 错误、它们发生的原因,以及如何为用户和网站所有者解决这些问题。


1. 常见的 SSL/TLS 错误消息

根据您使用的浏览器 (Chrome, Firefox, Safari) 或开发环境 (Node.js, Python),您会看到不同的错误代码:

  • Chrome: ERR_CERT_DATE_INVALID (证书日期无效), ERR_CERT_AUTHORITY_INVALID (证书颁发机构无效), ERR_CERT_COMMON_NAME_INVALID, ERR_SSL_PROTOCOL_ERROR
  • Node.js: CERT_HAS_EXPIRED (证书已过期), UNABLE_TO_VERIFY_LEAF_SIGNATURE, SELF_SIGNED_CERT_IN_CHAIN
  • Python (Requests): SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
  • Firefox: SEC_ERROR_EXPIRED_CERTIFICATE, MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT

2. 核心原因与解决方案

2.1 "certificate expired" (证书已过期 / ERR_CERT_DATE_INVALID)

SSL 证书是为特定期限(通常为 90 天到 1 年)颁发的。一旦超过该日期,证书就不再有效。

原因: 网站所有者忘记续订证书,或者自动续订流程(如 Let's Encrypt)失败。

解决方案:

  • 针对网站所有者: 立即续订您的证书。如果使用 Let's Encrypt,请检查您的 certbot 日志或 ACME 客户端配置。
  • 针对用户: 检查您电脑的系统日期和时间。如果您的时钟错误,浏览器会认为一个有效的证书已经过期。

2.2 "self-signed certificate" (自签名证书 / ERR_CERT_AUTHORITY_INVALID)

默认情况下,浏览器仅信任由已知“证书颁发机构”(CA)(如 DigiCert 或 Let's Encrypt)颁发的证书。自签名证书是您自己创建的证书。

原因:

  • 在生产环境网站上使用了自签名证书。
  • 使用了未添加到电脑“受信任根”存储中的私有/公司内部 CA。

解决方案:

  • 针对生产环境: 从 Let's Encrypt 获取免费证书,或从商业 CA 购买。
  • 针对开发环境: 在本地使用自签名证书是可以的,但您需要让您的工具信任它们或绕过验证(尽管后者不安全)。

2.3 "certificate chain incomplete" (证书链不完整 / UNABLE_TO_VERIFY_LEAF_SIGNATURE)

SSL 证书不仅仅是一个文件;它是通往根 CA 的信任链。如果您的服务器配置中缺少“中间”证书(中级 CA),浏览器就无法验证该信任链。

原因: 服务器仅提供了“叶子”(网站)证书,而没有提供“完整链”(网站 + 中间证书)。

解决方案: 确保您的 Web 服务器(Nginx, Apache)配置为使用 CA 提供的 fullchain.pem(或等效文件)。

2.4 "SSL handshake failed" (SSL 握手失败)

这是一个广泛的错误,发生在客户端和服务器之间的初始“握手”期间。

原因:

  • 协议不匹配(例如,客户端仅支持 TLS 1.0,但服务器要求 TLS 1.3)。
  • 密码套件不匹配(没有共同的加密方法)。
  • 服务器端防火墙或代理拦截了连接。

解决方案: 检查服务器的 TLS 配置。我们建议使用 Mozilla SSL 配置生成器 来获取安全且兼容的设置。


3. 进阶故障排查

3.1 SNI (服务器名称指示) 问题

在单个 IP 地址上托管多个网站的现代服务器上,服务器需要知道该显示哪个证书。如果客户端不支持 SNI(现在很少见),服务器可能会显示错误的证书,导致 COMMON_NAME_INVALID 错误。

3.2 HSTS (HTTP 严格传输安全)

如果网站使用 HSTS,浏览器将拒绝允许用户在出现 SSL 错误时“点击继续”。这是一种防止“中间人”攻击的安全特性。 解决方案: 您必须修复 SSL 错误;HSTS 无法绕过。


4. 预防措施与最佳实践

  1. 自动续订: 始终使用带有自动续订的服务(如 Let's Encrypt 配合 Certbot,或 Cloudflare 的托管 SSL)。
  2. 监控: 使用相关服务监控您的 SSL 证书到期时间和健康状况。
  3. 使用完整链: 在服务器配置中始终提供完整的证书链。
  4. 禁用弱协议: 禁用 SSLv2, SSLv3, TLS 1.0 和 TLS 1.1。仅允许 TLS 1.2 和 1.3。

5. 常见问题 FAQ

Q: 在出现 SSL 警告时点击“继续访问”安全吗?

: 仅当您是开发人员并在测试自己的本地网站时才安全。永远不要在公共网站上这样做,尤其是对于银行、电子邮件或社交媒体,因为这会使您面临数据被盗的风险。

Q: 为什么我的网站在电脑上可以访问,但在手机上显示 SSL 错误?

: 这通常是证书链不完整的问题。桌面浏览器在“补全”缺失的中级证书方面能力较强,而移动浏览器则严格得多。

Q: Cloudflare 可以修复 SSL 错误吗?

: Cloudflare 可以隐藏用户与 Cloudflare 之间的 SSL 错误,但您仍然需要在 Cloudflare 与您的服务器之间安装一个有效的(或至少是 Cloudflare Origin 证书)证书,以确保完全安全。


6. 快速检查工具

需要检查证书或验证证书链?使用我们的 SSL 证书检查与解码工具。它允许您:

  • 解码 PEM 和 CRT 文件,查看过期日期和颁发者信息。
  • 验证证书链并识别缺失的中间证书。
  • 在 PEM, DER 和 PFX 等格式之间进行转换

相关错误

  • 解决 'Unexpected token in JSON' 错误
  • 如何修复 'invalid base64 string' 错误
  • 解决 'JWT expired' 错误