首页/网络/协议速查/certbot 常用命令

certbot 常用命令

最常用的 ACME 客户端:申请、续期、吊销一条命令完成;nginx 插件还能自动改配置,但生产建议先 dry-run 验证。

协议速查网络更新于 2026-10-13

certbot 是什么

certbot 是 EFF 出品的 ACME 协议客户端,用于向 Let's Encrypt 等 CA 自动申请、续期与吊销免费证书。它支持 Nginx/Apache 插件自动改配置,也支持 webroot、standalone、dns-01 等验证方式;申请完成后由系统自带的 systemd timer(或 cron)定期执行 certbot renew 完成续期。

基本信息

适用平台Linux 各发行版(CentOS/RHEL、Ubuntu/Debian)
安装方式系统包管理器、pip、snap
配置目录/etc/letsencrypt/,证书在 live/<name>/ 下
证书文件cert.pem、chain.pem、fullchain.pem、privkey.pem
自动续期systemd timer 或 cron 调用 certbot renew
权限需 root 或可写 /etc/letsencrypt 与 Web 根目录

典型使用场景

  • 给新站点一键签发证书并让插件自动写入 Nginx 配置
  • 给已有 Web 服务补证书,只申请文件不碰现有配置
  • 给泛域名签发证书(必须走 DNS 验证)
  • 续期演练与到期日核对,避免线上突然过期
  • 证书迁移或重建时列出、吊销、删除指定证书

高频命令

高频命令
# 首次申请:Nginx 插件会自动改配置并 reload
certbot --nginx -d example.com -d www.example.com
# 只签证书不改配置(webroot 方式)
certbot certonly --webroot -w /var/www/html -d example.com
# 泛域名必须用 DNS 验证
certbot certonly --manual --preferred-challenges dns -d '*.example.com'
certbot certificates                       # 列出已管理证书与剩余天数
certbot renew --dry-run                    # 演练全部续期,不触碰线上
certbot renew --deploy-hook 'systemctl reload nginx'   # 续期成功后重载服务
openssl x509 -in /etc/letsencrypt/live/example.com/fullchain.pem -noout -enddate

验证方式对比

方式适用场景注意点
nginx/apache 插件服务器可控,希望自动改配置会改写 server 块,改前先备份配置
webroot已有 Web 服务占用 80 端口需保证 .well-known 路径外网可达
standalone机器上没有 Web 服务验证期间独占 80/443,需临时停服
dns-01泛域名、内网机器无法暴露 80需 DNS API 凭据或手工添加 TXT 记录
续期成功但服务没重载,等于线上仍在用旧证书:必须配置 --deploy-hook,或让服务统一引用 /etc/letsencrypt/live/<name>/ 下的文件并定期 reload。
正式环境先跑 certbot renew --dry-run。Let's Encrypt 有速率限制(同域名每周签发数与重复证书数都有上限),反复试验会触发限流,影响真实签发。

常见报错与处理

  • Challenge failed / Invalid response:http-01 挑战路径外网不可达,检查安全组、防火墙与 Web 服务是否放行 80
  • Too many certificates already issued:触发速率限制,等待窗口期恢复后再试,不要反复重试加重计数
  • Problem binding to port 80:standalone 模式与正在运行的 Web 服务抢端口,先停服或改用 webroot 方式
  • Certificate not yet due for renewal:证书未进入 30 天窗口,renew 主动跳过,这是正常行为而非故障
  • 续期任务没跑:确认 systemctl list-timers 里 certbot.timer 存在,并翻看 /var/log/letsencrypt/letsencrypt.log 的错误行

易错点

  • 续期成功却没重载服务,线上证书照旧过期:deploy-hook 或统一证书路径两者必居其一
  • 用 --manual 手工验证签的证书不会自动续期,需要 --manual-auth-hook 或改用 DNS API
  • cron/timer 里的 certbot renew 默认只处理 30 天内到期的证书,机器时间错乱会让续期判断失准,需保证 NTP 同步
  • 只看文件系统里的到期日不验证线上实际下发的证书,改错路径或没 reload 都会漏掉
  • 用 Nginx 插件时它按 server_name 匹配块,配置不规范可能改到错误的站点

数据来源与参考

  • certbot 官方文档
  • RFC 8555

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌