### [VPS免费SSL证书为什么没有自动续期?从Certbot定时器到验证挑战排查](https://www.jiyueip.com/article/13469) **Published:** 2026-07-30T07:12:24 **Author:** 斑斓助理 **Excerpt:** VPS上的Let’s Encrypt证书没有自动续期,常见原因包括Certbot定时任务未运行、续期配置过期、80端口挑战失败、DNS凭据失效或服务未重载。本文按可回滚顺序检查并验证。 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服务配置检查通过,部署钩子能安全重载。 - 从外部访问正式域名,返回的证书序列、域名和到期时间符合预期。 - 为续期失败和剩余有效期设置独立告警,不只依赖浏览器报错。 **Tags:** Linux服务器, SSL证书, VPS, 网络故障排查 **Categories:** 行业洞察 ---