VPS免费SSL证书为什么没有自动续期?从Certbot定时器到验证挑战排查

先判断任务未运行、挑战失败,还是服务仍在加载旧证书
发布于 更新于
3

VPS上的Let’s Encrypt证书没有自动续期,先确认是“没有发起续期”“续期验证失败”,还是“新证书已经签发但Web服务仍加载旧文件”。Certbot通常只会在证书接近到期窗口时执行实际更新,所以手动运行定时任务后显示无需续期,并不等于自动化故障。

先保留证据,不要直接删除证书重申请

在修改配置前记录域名、当前证书到期时间、签发机构、证书文件路径、Web服务类型和最近一次失败时间。删除续期配置或反复申请可能触发签发频率限制,也会丢失真正的失败原因。

sudo certbot certificates
systemctl list-timers --all | grep -i certbot
systemctl status certbot.timer
journalctl -u certbot.service --since "7 days ago"

不同发行版和安装方式可能使用systemd timer、cron、Snap或面板自己的调度器;以当前主机实际安装结果为准,不要同时启用多套未知任务。

第一类故障:续期任务根本没有运行

如果日志里没有对应执行记录,检查定时器是否启用、下次运行时间是否存在、系统时间是否正确,以及主机在计划时间是否关机。使用cron时还要检查PATH、工作目录、权限和邮件或日志输出。

修复完成后,先验证调度器能启动Certbot命令,再验证续期流程本身。不要为了看到证书变化而手动缩短系统时间或覆盖生产证书。

第二类故障:HTTP-01验证到不了当前VPS

HTTP-01验证要求域名解析到能响应挑战的服务器,并能从公网访问相应HTTP入口。常见问题包括DNS仍指向旧地址、CDN或负载均衡未把挑战路径转发到当前节点、80端口被安全组或防火墙阻断,以及Web服务器重定向或规则覆盖挑战目录。

  • 核对域名的A和AAAA记录,IPv6存在时也要确认其目标可用。
  • 从主机外部检查80端口和挑战路径,不能只在本机访问。
  • 确认多个Web节点共享挑战文件,或使用适合当前架构的验证方式。
  • 检查反向代理、容器端口映射和站点配置是否仍对应续期文件。

第三类故障:DNS-01凭据或插件失效

DNS-01依赖DNS服务商API、插件和权限。令牌过期、权限范围变化、插件升级或DNS传播时间不足,都可能导致验证记录没有正确创建或未被权威DNS看到。

检查日志中的具体DNS错误,确认凭据文件权限、API权限和当前权威DNS。不要把令牌直接写进命令历史、公开日志或文章;测试时使用最小权限,并在完成后复核临时TXT记录是否按预期清理。

第四类故障:证书已续期,网站仍返回旧证书

Certbot成功写入新证书后,Nginx、Apache、HAProxy或容器内服务仍可能持有旧文件。此时应核对Web服务实际引用的证书路径,并查看续期后的部署钩子是否成功执行。

sudo nginx -t
sudo apachectl configtest
sudo systemctl reload nginx

只运行与当前服务匹配的检查和重载命令。若证书通过卷挂载进入容器,需确认容器看到的新文件及应用的重载机制;不要在未验证配置时直接重启全部服务。

用模拟续期验证整条链路

Certbot提供模拟续期能力,可验证账户、插件、挑战和部署钩子的主要链路,而不替换生产证书:

sudo certbot renew --dry-run

模拟成功后,再检查定时器状态和日志去向。模拟失败时以输出的具体证书名称和验证阶段定位,不要通过关闭防火墙、放开全部端口或删除现有配置来掩盖问题。

恢复后的验收清单

  • Certbot能列出目标证书与续期配置。
  • 定时器或cron有明确的下次运行时间和可追踪日志。
  • 模拟续期成功,挑战路径或DNS权限满足当前架构。
  • Web服务配置检查通过,部署钩子能安全重载。
  • 从外部访问正式域名,返回的证书序列、域名和到期时间符合预期。
  • 为续期失败和剩余有效期设置独立告警,不只依赖浏览器报错。

常见问题(FAQ)

Certbot renew没有更新证书就是失败吗?
不一定。Certbot通常只在证书进入续期窗口后执行实际更新;尚未到期时显示无需续期属于正常结果。应结合证书到期时间、定时器和日志判断。
Let's Encrypt自动续期需要开放80端口吗?
使用HTTP-01挑战时,需要让公网验证请求到达对应HTTP入口;使用DNS-01等其他方式时要求不同。应以当前证书续期配置和验证插件为准。
证书已经续期,浏览器为什么仍显示旧证书?
Web服务或容器可能仍加载旧文件,也可能引用了不同证书路径。需要检查服务实际配置、部署钩子和安全重载结果,再从外部核对正式域名返回的证书。
可以用什么命令安全测试自动续期链路?
通常可使用sudo certbot renew --dry-run模拟续期,验证账户、插件、挑战和部署钩子的主要链路。运行前仍应保留日志与配置,并按当前安装方式判断。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600