let's encrypt免费证书在有效期内,网站时长出现net::ERR_CERT_AUTHORITY_INVALID
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 换行符问题)
如何诊断问题
使用在线工具检查
- SSL Labs (https://www.ssllabs.com/ssltest/) - 最权威的检测工具
- 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 检测您的域名,查看具体的证书链状态。
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
微信
支付宝