Let’s Encrypt 证书自动更新失败的常见原因

作为一名运维工程师,我在使用 Let’s Encrypt 的过程中遇到过各种证书自动更新失败的情况。今天就来分享这些踩坑经历,希望能帮助大家快速定位和解决问题。
1. 证书续期时间设置不当
我第一次遇到更新失败就是因为续期时间设置得太晚。Let’s Encrypt 证书有效期只有90天,建议在到期前30天就开始自动续期。
# 检查证书过期时间
certbot certificates
# 手动测试续期(不实际更新)
certbot renew --dry-run
如果 –dry-run 测试失败,说明你的自动续期很可能也会失败。
2. 域名解析问题
有一次凌晨收到告警,排查发现是 DNS 解析出了问题。证书更新时需要验证域名所有权,如果域名无法解析,验证就会失败。
# 检查域名解析
nslookup yourdomain.com
dig yourdomain.com
记得检查 A 记录、CNAME 记录是否正确,特别是使用了 CDN 或反向代理的情况。
3. 端口和防火墙限制
Let’s Encrypt 的 HTTP-01 挑战需要使用 80 端口,如果服务器防火墙阻止了该端口,验证就会失败。
# 检查端口是否开放
netstat -tulpn | grep :80
iptables -L -n | grep :80
如果使用 TLS-ALPN-01 挑战,则需要确保 443 端口开放。
4. 证书存储权限问题
这个坑我踩过好几次!certbot 需要读写证书目录的权限,如果权限不足,续期就会静默失败。
# 检查证书目录权限
ls -la /etc/letsencrypt/
ls -la /etc/letsencrypt/live/yourdomain.com/
确保 certbot 用户有足够的权限访问这些目录。
5. 证书数量达到限制
Let’s Encrypt 有速率限制,每周每个域名最多可以签发 50 个证书。如果频繁测试或重新签发,很容易触达限制。
# 查看当前证书数量
certbot certificates | grep "Certificate Name" | wc -l
如果接近限制,建议合并多个子域名到一张证书中。
6. 配置文件中存在错误
配置文件中的小错误往往最难发现。检查你的 certbot 配置文件:
# 检查配置文件
cat /etc/letsencrypt/renewal/yourdomain.com.conf
特别注意 webroot 路径、域名列表等配置项是否正确。
7. 服务器资源不足
有一次在内存不足的 VPS 上,certbot 进程因为 OOM 被系统杀掉了。检查系统资源:
# 检查系统资源
free -h
df -h
确保有足够的内存和磁盘空间来完成证书更新过程。
实用的排查命令
最后分享几个我常用的排查命令:
# 查看续期日志
journalctl -u certbot -f
# 强制更新证书(谨慎使用)
certbot renew --force-renewal
# 查看详细的错误信息
certbot renew --verbose
希望这些经验能帮助你顺利解决证书更新问题。记住,定期检查证书状态,设置合适的监控告警,就能避免很多意外情况的发生。

太实用了!刚踩过权限那个坑 😅