跳到正文
certbot:证书这一摊我交给它

certbot:证书这一摊我交给它

Let's Encrypt 签发、90 天到期、一行续期、一条 dry-run。证书这件最不能出事也最该自动化的活,我交给 certbot。这篇记我为什么固定它、90 天 + dry-run 的纪律从哪来,以及它和 Cloudflare 之间我留的边界。

certbot:证书这一摊我交给它

状态:在用 · 2026-05 至今 · 本身不换,管的范围随 CF 覆盖度收缩

速读#

证书到期不能靠记忆,certbot 接走的是「到期续期」这条最容易被人忘掉的链路。90 天有效期不是麻烦,而是在逼我自动化;真正要养成的动作,是用 dry-run 确认续期路径一直通。这篇也写清楚:哪些场景其实不该选它。

90 天有效期是设计,不是缺陷#

Let’s Encrypt 把证书卡在 90 天,不是「太短不方便」,是故意的。逻辑很直接:一年一续的事,人靠记忆还能勉强撑住;90 天一续,谁也不会靠记忆撑——它等于把「必须自动化」写进了有效期里。短有效期还有个附带收益:证书泄露或配置出错,最多也就错 90 天。

这件事比证书本身更大:

有期限的东西,不能靠「我记得」,必须靠「系统自动 + 我演练过」。

续期交给 timer,但人要验证 timer 真能续上——和 systemd 拉进程、fail2ban 封 IP 同一范式:人定规则并验证,机器 7×24 执行。

为什么是它#

证书这件最不能出事、也最该自动化的活,我交给 certbot。开源仓库:certbot/certbot(Python,ACME 流程能翻,不是黑盒)。

选项判断
acme.sh轻,不带 Python 依赖;但几千行 shell,真出问题时读它比读 Python 痛苦
自己撸 ACME 客户端协议是公开的,但验证、续期、部署钩子每一样都要自己扛着不出错
certbotEFF 维护、Let’s Encrypt 官方推荐、--nginx 插件把签发、改配、跳转一把过

场景卡得很准:个人几台机器、跑着 Nginx、要省心、也要能看懂实现——这个格子里没有更合适的。

什么情况下不该选它#

推荐一个工具,得同时写清它的失效场景,不然就是安利:

  • 要泛域名证书*.example.com 只能走 DNS-01 验证,得给 certbot 配 DNS 服务商的 API 插件。域名多、服务商杂的时候,acme.sh 那边的 DNS API 覆盖面反而更省事。
  • 整站已经在 Cloudflare 后面:CF 的源站证书(Origin CA)有效期 15 年,只被 CF 信任,但「回源这一段」正好够用——那种站再跑 certbot 属于多余。
  • 愿意换 Web 服务器:Caddy 把 ACME 直接内建进服务器,证书这个「问题」整个消失。我没走这条路,是因为 Nginx 的配置和肌肉记忆攒了一堆,不值得为证书搬家——但从零开始的新手,这条路确实更短。

工具没有全场景最优。certbot 赢的是「Nginx + 个人机器」这一格,不是所有格。

先 dry-run#

Terminal window
apt install certbot python3-certbot-nginx -y
certbot --nginx -d app.example.com
# 走完续期流程,但不真签发——验通路
certbot renew --dry-run

renew --dry-run 验通,你才能信到期那条 certbot renew 会真的成。它走的是 Let’s Encrypt 的 staging 环境:流程完整走一遍,但不消耗正式环境的签发额度——所以演练可以随便跑,不心疼。

装完还要核对一件事:续期到底挂在哪。

Terminal window
systemctl list-timers | grep certbot

Debian 系装包时会自动注册 certbot.timer,一天摸两次到期状态。「应该有个定时任务」和「我看到了那个定时任务」是两回事——核对过才算数。

我每年还会手动跑一次 dry-run,不为别的,就为确认「自动续期这条路还通」——这是我对一切 set-and-forget 系统的纪律。续期路径是会漂移的:防火墙某次收紧把 80 端口关了(HTTP-01 验证要走 80)、Nginx 配置改了验证路径、CF 代理规则动了——每一样都可能让当年验通的路悄悄断掉。dry-run 演练的真正对象不是 certbot,是这条路上的一切。

会不会换#

certbot 本身不换

要标清的是管的范围:

  • 现在管:Cloudflare 回源到我服务器这一段,以及没套 CF 的子域
  • 哪天某站整站交给 CF Full (strict)、证书全用 CF 签发,certbot 才从那个站退场

那是按站点迁,不是换工具。准答案是:工具不动,覆盖范围随 CF 收缩。

证书这件事最反人性的地方:到期日是死的,人记不住。certbot 接走「到期续期」;我对它的唯一要求是——续期这条路我一直验得通。

s1oopX

登录 s1oopX