站点证书只剩 7 天,ACME 任务却标记“成功”,Nginx 仍使用旧证书,新私钥还与证书不匹配。只看续期脚本退出码,会漏掉证书到期、服务未重载与密钥错配三个故障点。
如果你正在选机器,或者想先把线路和配置跑通再谈长期方案,可以先看看这几家的线路说明和技术参数:rapidproxy(海外服务器),先看清带宽线路、流量策略和退款条款,再决定要不要迁。
一、ACME续期真正完成到哪一步
ACME 客户端创建订单后,通过 HTTP-01 或 DNS-01 完成域名控制权质询,CA 验证后签发证书。私钥通常由客户端保管,新证书必须与其成对使用。“Issued”只代表 CA 已签发,不等于文件已部署,更不等于运行中的 Nginx 已加载。

部署时先把证书、私钥和完整链写入临时目录,校验后整组切换,避免半写入或新旧文件错配。随后平滑重载:Nginx 主进程校验配置并启动新 worker,旧 worker 处理完连接后退出。触发 HUP 或执行 nginx -s reload 返回成功,只说明信号已发送;配置错误、权限异常或新 worker 启动失败,都可能让旧 worker 继续服务。
30 天剩余期适合作为巡检点,但不是所有 CA 的固定阈值。监控应记录证书指纹、序列号和 notAfter,并与 ACME 下次续期时间核对,避免“已签发、文件已换、线上仍旧”的假成功。ServLlama 可汇总证书与任务日志,最终仍要以外部握手结果为准。
二、从文件到进程逐层判断
先验文件:证书必须能解析,notAfter 覆盖监控周期,证书公钥与私钥导出的公钥摘要必须一致。分别计算 SHA-256 摘要即可检查配对;不同就阻断部署。证书链也要检查顺序,站点证书置于中间,根证书通常不直接发送。

再验进程:重载前后建立不复用 keep-alive、携带正确 SNI 的全新 TLS 连接,读取对端证书的序列号、指纹和有效期,不使用可能缓存旧结果的浏览器。若磁盘是新证书而探针仍返回旧序列号,应检查重载错误日志、虚拟主机引用路径及服务是否仍由旧进程承接。
最后验告警:按 DNS 质询、HTTP 路由、CA 签发、文件部署和进程重载标记失败阶段;摘要不一致归为密钥错配,重载后线上指纹未变归为服务未重载。进入 14 天、7 天仍无新签发记录,或多次探测仍返回旧指纹时,应立即升级。有效闭环必须同时具备文件一致、进程加载和外部握手三项证据,不能只看 cron 退出码。
ACME 质询与密钥一致性
自动续期不是“到点换文件”。客户端先创建 ACME 订单,再完成ACME质询:HTTP-01 要从公网 80 端口访问临时路径,DNS-01 则要求在 _acme-challenge 写入随机令牌。CA 验证后才签发证书。常见坑包括 80 端口被拦截、反向代理误处理验证路径、DNS API 权限不足、递归 DNS 尚未刷新,以及过早删除令牌导致并发续期失败。
部署前要做密钥一致性校验:导出叶证书和私钥中的公钥并比较摘要,RSA、ECDSA 均须覆盖;不一致就停止切换。同时核对域名、有效期和证书链;链文件通常包含叶证书与中间证书,私钥应单独存放并限制权限。

续期上线与告警闭环
先用 certbot renew --dry-run 验证质询、签发与 DNS 清理,再启用生产任务;定时器需加互斥锁,防止重复执行。新证书下载后先校验,再原子更新 Nginx 软链接,执行 nginx -t,通过后才执行 systemctl reload nginx。热加载失败要保留旧证书并回滚;命令成功也不等于线上已更新,还应从公网核对指纹、序列号和到期时间。
证书到期监控应采集剩余天数、任务状态、最近成功时间和下次执行时间,并设置 30、15、7、1 天分级阈值。续期失败告警须包含域名、失败阶段、CA 返回码、验证方式和日志位置,也要捕捉“任务成功但线上仍是旧证书”的异常。
可执行检查清单:① dry-run 通过;② 验证路径或 DNS API 可用;③ 证书域名和链路正确;④ 证书与私钥公钥摘要一致;⑤ 文件可原子切换并可回滚;⑥ nginx -t 与热加载成功;⑦ 公网握手指纹已更新;⑧ 到期阈值和失败告警已实测。八项全部闭环,自动续期才真正可持续。


喜欢
顶
难过
囧
围观
无聊





