Let's Encrypt 证书在有效期内出现 net::ERR_CERT_AUTHORITY_INVALID 错误,通常不是证书本身过期的问题,而是以下几种常见原因导致的:

最常见原因

1. 证书链不完整(最普遍)

这是 Let's Encrypt 证书最常见的问题。服务器只发送了叶子证书(leaf certificate),而没有包含中间证书(Intermediate Certificate)。

Let's Encrypt 的证书链结构:

  • 叶子证书:你的域名证书
  • 中间证书:R3 或 R13(Let's Encrypt 的中间 CA)
  • 根证书:ISRG Root X1(客户端已内置)

解决方案

  • 使用 fullchain.pem 而不是 cert.pem。fullchain.pem 包含了叶子证书 + 中间证书
  • 检查服务器配置,确保配置了完整的证书链

2. Let's Encrypt 根证书兼容性问题(旧设备)

Let's Encrypt 的默认证书链在 2024 年后发生了变化(缩短证书链策略)。这会导致:

  • Android 7.1.1 以下版本无法验证 Let's Encrypt 证书
  • 一些旧版操作系统或浏览器可能缺少 ISRG Root X1 根证书

解决方案

  • 对于需要兼容旧设备的场景,可以申请使用 ISRG Root X1 交叉签名的证书链
  • 或者考虑使用其他 CA 的证书

3. 服务器配置错误

  • 证书文件路径配置错误
  • 只配置了证书,没有配置中间证书
  • 证书文件格式问题(如 Windows 的 CRLF 换行符问题)

如何诊断问题

使用在线工具检查

  1. SSL Labs (https://www.ssllabs.com/ssltest/) - 最权威的检测工具
  2. SSL Checker - 检查证书链完整性

使用命令行检查

# 检查证书链是否完整
openssl s_client -connect yourdomain.com:443 -showcerts

# 如果返回 "Verify return code: 21 (unable to verify the first certificate)"
# 说明证书链不完整

修复步骤

对于 Nginx 用户:

# 使用 fullchain.pem(包含中间证书)
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

对于 Apache 用户:

SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem
# 必须添加这一行!
SSLCertificateChainFile /etc/letsencrypt/live/yourdomain.com/chain.pem
# 或者使用 fullchain.pem 替代 cert.pem

对于其他服务器/负载均衡器:

  • 确保上传完整证书链(fullchain)
  • 有些平台需要单独上传中间证书到"CA Chain"或"Intermediate Certificate"字段

总结

问题现象 可能原因 解决方案
证书有效期内报错 证书链不完整 使用 fullchain.pem
旧设备/浏览器报错 根证书不受信任 使用兼容链或更换 CA
间歇性报错 服务器配置不一致 检查所有服务器节点配置

如果问题持续,建议先用 SSL Labs 检测您的域名,查看具体的证书链状态。