You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动删除certbot中未被Nginx使用的所有证书?

自动清理Certbot中未被Nginx使用的证书

Certbot本身没有内置自动删除Nginx未使用证书的功能,你可以通过以下命令组合快速实现批量清理,无需手动逐一比对:

操作前请先备份/etc/letsencrypt目录和/etc/nginx目录,避免误删导致服务异常

步骤1:提取Nginx正在使用的证书列表

执行以下命令,扫描所有已启用的Nginx配置,过滤注释行后提取出所有被引用的Certbot证书名称,去重后存入临时文件:

grep -r "ssl_certificate" /etc/nginx/sites-enabled/ \
  | grep -v "#" \
  | awk '{print $2}' \
  | grep "/etc/letsencrypt/live/" \
  | awk -F '/live/' '{print $2}' \
  | awk -F '/' '{print $1}' \
  | sort | uniq > used_certs.txt

步骤2:提取Certbot管理的所有证书列表

执行以下命令,导出Certbot中所有现存的证书名称,存入临时文件:

certbot certificates 2>/dev/null \
  | grep "Certificate Name:" \
  | awk '{print $3}' \
  | sort | uniq > all_certs.txt

步骤3:筛选出未被使用的证书

执行以下命令比对两个临时文件,差集就是未被Nginx引用的证书,先手动核对结果确认无误再进行下一步:

grep -Fxvf used_certs.txt all_certs.txt > unused_certs.txt
# 核对未使用证书列表
cat unused_certs.txt

步骤4:批量删除未使用的证书

确认列表无误后,执行以下命令批量删除:

while read -r cert_name; do
  certbot delete --cert-name "$cert_name"
done < unused_certs.txt

如果不需要交互确认,可以在certbot delete后加-n参数实现全自动删除。


注意事项

  • 如果你的证书同时被Nginx以外的服务使用(如邮件服务、自定义Web服务等),上述方法会将其判定为未使用,删除前务必仔细核对unused_certs.txt内容
  • 删除完成后请执行nginx -t测试Nginx配置合法性,确认无报错后执行systemctl reload nginx重载配置生效
  • 不建议将该流程加入定时任务自动执行,每次清理前人工核对可以规避绝大多数误删风险

内容的提问来源于stack exchange,提问作者Saturnix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:18:03