查看 Let's Encrypt 续签失败日志时,最直接的方法是定位 Certbot 默认日志文件,筛选包含 "Failed" 的关键行,并使用 dry-run 模式在终端复现错误以便实时调试。
先说结论:日志通常位于 /var/log/letsencrypt/(需 sudo 权限查看),错误多由网络验证失败或权限问题引起。
- 确认安装方式对应的日志路径(apt 或 snap)
- 检查防火墙是否放行 80 端口或 DNS 解析是否生效
- 使用 sudo 权限运行手动续签测试验证修复结果
日志路径与权限说明
Certbot 日志路径取决于安装方式,普通用户直接查看可能遭遇权限拒绝,务必配合 sudo 使用。
- apt/yum 安装:/var/log/letsencrypt/letsencrypt.log
- snap 安装:/var/snap/certbot/common/logs/letsencrypt.log
查看日志命令示例:
sudo tail -n 50 /var/log/letsencrypt/letsencrypt.log核心命令与参数修正
使用 grep 筛选错误关键字,并通过 dry-run 模式在不消耗速率限制的情况下复现问题。注意命令参数不应包含反引号。
sudo grep -i "failed\|error" /var/log/letsencrypt/letsencrypt.log
sudo certbot renew `--dry-run` `--verbose`典型错误日志案例分析
根据日志中的具体报错信息,可以快速锁定问题根源:
1. Connection refused(连接被拒绝)
Challenge failed for domain example.com
http-01 challenge: Connection refused解决方案:检查服务器安全组或防火墙是否放行了 80 端口,确认 Web 服务器(Nginx/Apache)正在运行。
2. Unauthorized(403 禁止访问)
HTTP Error 403: Unauthorized
The request was refused by the server解决方案:检查 Web 服务器配置是否阻止了 /.well-known/acme-challenge/ 目录的访问,或存在重定向冲突。
3. Too many requests(速率限制)
Error: Too many requests for this IP解决方案:暂停重试,等待一小时后再试,或添加 `--staging` 参数使用测试环境排查配置。
验证续签结果
修复错误后,需确认证书是否成功更新。
- 运行
sudo certbot certificates查看证书有效期是否更新。 - 使用 OpenSSL 检查服务器实际加载的证书:
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates - 直接在浏览器地址栏查看锁形图标详情,确认有效期。
常见坑与排查
- Cron 任务环境变量缺失:定时任务执行时可能找不到 certbot 命令,建议在 crontab 中写绝对路径(如 /usr/bin/certbot)。
- 云服务防火墙:安全组未放行 80 端口,导致 HTTP-01 验证失败,需在云控制台检查。
- DNS 传播延迟:如果是 DNS-01 验证,修改 TXT 记录后需等待全球 DNS 生效,可使用 dig 命令验证。