首页/安全/加密与证书速查/certbot 实战:签发与续期

certbot 实战:签发与续期

certbot 是常用 ACME 客户端:支持 nginx/apache 插件自动配置,也支持 webroot 与手动模式;续期由定时任务或 systemd timer 触发。

加密与证书速查安全更新于 2026-10-13

certbot 是干什么的

certbot 是最常用的 ACME 协议客户端,用来自动签发与续期 Let's Encrypt 等 CA 的证书。它提供三类工作方式:nginx/apache 插件可直接改写站点配置并重载,webroot 模式把校验文件放进已有站点根目录,manual 模式用于手工或脚本化校验。签发完成后由 systemd timer 或 cron 定时触发续期,当前 Let's Encrypt 证书有效期 90 天,客户端默认在到期前 30 天开始尝试续期。

基本信息

webroot 模式certbot certonly --webroot -w /var/www/html -d example.com
nginx 插件certbot --nginx -d example.com,自动改配置并重载
续期试运行certbot renew --dry-run 验证续期链路
部署钩子--deploy-hook 在续期成功后执行重载命令
证书路径/etc/letsencrypt/live/<域名>/ 下的 fullchain.pem 与 privkey.pem
有效期90 天,默认到期前 30 天自动续期

签发与续期验证

签发与续期验证
# 只签发不安装:证书要分发到多台后端时用这个模式
certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
# 续期演练:用测试环境走完整流程,不消耗签发配额
certbot renew --dry-run
# 确认定时任务确实在跑
systemctl list-timers | grep certbot
# 续期成功后自动重载服务
certbot renew --deploy-hook "systemctl reload nginx"

插件与模式选择

模式适用场景注意点
webroot站点已在提供服务,不想让 certbot 改配置-w 必须是真实站点根目录
nginx 插件单机 Nginx 直接托管站点会自动改配置,改动前先备份
standalone80 端口空闲或可临时停服需先停掉占用端口的进程
dns-01 插件泛域名或不方便开放 80 端口依赖 DNS API 凭据,注意最小权限
certonly 只签发不安装:适合证书要分发到多台后端或负载均衡的场景,避免单机插件改动线上配置。
续期失败的常见根因是校验路径失效:站点根目录搬迁、伪静态把 .well-known 请求重写、CDN 回源配置变化都会让 http-01 校验返回 404。排查时先手工访问一次校验 URL 看真实响应。
注意签发频率限制:同一域名的重复签发有配额,反复试错会触发限速。所有验证性测试一律走 --dry-run;证书链不对外可信的环境可用 --staging 演练。

易错点

  • 只签发了证书但没配置重载,服务仍加载旧证书直到手动重启
  • webroot 路径与实际站点根不一致,导致 http-01 校验返回 404
  • 私钥权限配置过宽,任何本地用户都能读走 privkey.pem
  • 把非 dry-run 的测试请求打到生产 CA,反复失败会命中签发限速
  • 续期完全依赖人工执行:90 天有效期下几乎必然漏续,必须确认 timer/cron 生效并有到期监控

数据来源与参考

  • certbot 官方文档(eff.org)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌