配置与更新
自动更新与服务重载
update-certificate 的更新流程:脚本审核、.bak 证书备份、服务重载与成功/失败/回滚日志检查。
本文说明 clmbot 执行证书更新时的完整行为:更新命令、前后脚本、旧证书备份、服务重载与日志检查。
update-certificate 命令
./clm-bot-linux-amd64 update-certificate
该命令依次完成:
- 检查:向上游检查是否有新的证书;
- 抓取:发现新证书后自动抓取到服务器;
- 备份:替换前将旧证书备份为
.bak文件(备份文件位于证书所在目录); - 替换:将新证书写入
config.yaml中servers[]定义的路径; - 重载:执行
after_script脚本(如服务重载),使新证书生效。
没有新证书时命令正常结束、不做任何变更。该命令既可手动执行,也可由定时拉取的计划任务周期执行。
before_script 与 after_script 审核要求
before_script在证书替换前执行,用于准备工作;after_script在证书替换后执行,通常是中间件的 reload/restart 命令(如nginx -t && nginx -s reload)。
审核要求(必须遵守):
- 所有脚本内容在启用前必须经过人工逐行审计;
- 脚本以 clmbot 运行账号权限执行,需要提权的命令通过 sudoers 精确授权(见最小权限);
- 禁止在脚本中调用不受限的
bash、powershell.exe或完整systemctl权限; - 脚本中不得包含明文凭证。
证书备份与回滚
- 每次替换前旧证书自动备份为
.bak,clmbot 运行账号需要在证书目录具有创建和清理.bak的权限; - 如果新证书导致服务异常,可用
.bak文件手动恢复旧证书并重载服务; - 当前公开文档只规定
.bak手工恢复流程,不应假设程序会自动回滚。
服务重载
服务重载由 after_script 完成,各中间件的推荐命令与最小授权方式见最小权限:
- Nginx:
nginx -t && nginx -s reload; - Apache:
systemctl restart httpd.service或systemctl restart apache2.service(取决于发行版); - Tomcat:执行对应实例的
shutdown.sh与startup.sh; - IIS:通过 PowerShell 脚本导入 PFX 并更新 HTTPS 绑定。
成功、失败与回滚日志
- 更新日志默认追加写入运行目录下的
update.log(定时任务示例中通过>> update.log重定向); - 请定期检查日志,确认每次执行的结果:是否检测到新证书、替换是否成功、
after_script是否正常执行; - 更新失败时优先检查日志中的报错,再对照故障排查逐项排除;
- 日志格式可能随版本变化,判断结果时应结合命令退出状态、终端输出和服务检查结果;
- 日志可能包含主机名、路径等敏感信息,对外提供日志前请先脱敏(见安全)。
