直接修改 Let's Encrypt 内部存储目录风险较高,更推荐通过配置文件指定参数或在自动化任务中补充路径参数来实现续签。若必须变更存储位置,需同步更新 Certbot 的 renewal 配置文件和定时任务命令,否则自动续签会失败。
核心要点:修改路径后,Certbot 默认不再感知新位置,必须显式告知续签脚本和 Web 服务器。
- 适合必须变更存储位置的场景
- 操作前务必备份原有配置和证书文件
- 验收时执行 dry-run 测试
命令速用版
在手动续签或脚本中,需要显式指定配置目录参数:
certbot renew `--config-dir` /your/new/path
如果是 systemd 托管的任务,建议使用 systemctl edit certbot.timer 覆盖 ExecStart 参数。
分步处理
- 备份现有数据:移动前务必打包备份整个证书目录,防止操作失误导致线上服务中断。
- 修改 renewal 配置:如果已经移动了文件,需要编辑 renewal 目录下对应的 conf 文件,更新 cert_path、privkey_path 等字段为新路径。默认配置文件位于 /etc/letsencrypt/renewal/。
- 更新自动化任务:检查 crontab 或 systemd timer,确保调用 certbot 时加上了 config-dir、work-dir 等参数,指向新位置。
- 调整权限:新目录需要确保 certbot 进程用户有读写权限,Web 服务器用户有读取权限。
- 同步 Web 服务器配置:修改 Nginx 或 Apache 配置,将 ssl_certificate 和 ssl_certificate_key 指向新路径。
Systemd 定时任务安全修改方法
不要直接编辑 /lib/systemd/system/certbot.timer,系统更新可能会覆盖修改。请使用 override 机制:
systemctl edit certbot.timer
在编辑器中输入以下内容,指定新的执行参数:
[Timer]
OnCalendar=*-*-* 00:00:00
[Service]
ExecStart=
ExecStart=/usr/bin/certbot renew `--config-dir` /your/new/path `--quiet`
保存退出后,重载配置:
systemctl daemon-reload
systemctl restart certbot.timer
Web 服务器配置文件同步更新指南
证书路径变更后,Web 服务器仍需知道新位置才能加载证书。以 Nginx 为例:
server {
listen 443 ssl;
ssl_certificate /your/new/path/live/example.com/fullchain.pem;
ssl_certificate_key /your/new/path/live/example.com/privkey.pem;
}
修改后测试配置并重载:
nginx -t
systemctl reload nginx
怎么验证是否生效
执行干运行命令,观察是否报错:
certbot renew `--dry-run` `--config-dir` /your/new/path
查看证书列表确认路径识别正确:
certbot certificates `--config-dir` /your/new/path
常见坑
- Web 服务器配置中引用的证书路径还是旧地址,续签成功后服务无法加载新证书。
- SELinux 或防火墙限制了新目录的访问权限,导致续签进程无法写入文件。
- 只修改了定时任务命令,没修改 renewal 配置文件,导致路径不一致。
- 手动编辑 renewal 配置文件时格式错误,导致续签彻底失败。
参考来源
- Certbot 官方文档,Certbot 命令参数说明,https://certbot.eff.org/docs/