安全删除 nginx 中旧 ssl 证书需先确认停用→清理引用→再删除文件:查 nginx -t 确认证书路径,检查多站点与依赖,重命名后 reload 并观察 24–48 小时,无误再 rm,同时记录日志、归档备份以保回滚能力。

安全删除 Nginx 中旧的 SSL 证书,核心是确保不中断 HTTPS 服务、不误删仍在使用的证书,并保留可回滚能力。关键不是“直接删”,而是“确认停用→清理引用→再删除文件”。
确认证书是否还在被 Nginx 使用
先查当前生效的配置中引用了哪些证书路径:
- 运行
nginx -T | grep ssl_certificate(-T输出全部生效配置),找出所有ssl_certificate和ssl_certificate_key指向的实际文件路径 - 检查所有
server { ... }块,尤其是监听 443 端口的块,确认没有遗漏 include 或多站点配置 - 若使用 Let's Encrypt,注意
fullchain.pem和privkey.pem通常成对出现;不要只删其中一者
检查证书文件是否被其他服务或脚本依赖
有些自动化工具(如 certbot hook 脚本、监控脚本、备份任务)可能硬编码了旧证书路径:
- 搜索全系统:
grep -r "old_cert\.pem" /etc/nginx/ /etc/letsencrypt/renewal/ /opt/scripts/ 2>/dev/null - 查看定时任务:
crontab -l和systemctl list-timers,确认无残留续期或部署逻辑指向旧证书 - 若证书曾用于其他服务(如 HAProxy、Docker 容器、Node.js 应用),需同步评估
执行安全删除操作
确认无引用且无依赖后,按顺序操作:
- 先重命名而非直接删除,例如:
mv /etc/letsencrypt/live/example.com/privkey.pem /etc/letsencrypt/live/example.com/privkey.pem.deleted-20260707 - 重新加载 Nginx:
nginx -t && nginx -s reload,观察日志(journalctl -u nginx -n 50 -f)是否报证书读取错误 - 持续观察 24–48 小时,确认服务稳定、无客户端报错(如 TLS handshake failed)、监控告警正常
- 确认无问题后,再执行最终删除:
rm -f /etc/letsencrypt/live/example.com/*.deleted-20260707
保留审计与回滚能力
生产环境建议留痕,便于追溯:
- 删除前记录操作:
echo "$(date) - Removing old cert for example.com (sha256:$(sha256sum /etc/letsencrypt/live/example.com/fullchain.pem | cut -d' ' -f1))" >> /var/log/nginx/cert-rotation.log - 若使用版本控制管理 Nginx 配置(如 Git),提交删除前后的 diff
- 对关键证书,可先打包归档:
tar -cf /backup/certs-old-example-com-20260707.tar -C /etc/letsencrypt/live/ example.com/











