Shell脚本实现HTTPS证书批量续签自动化
背景与挑战
随着HTTPS全面普及,IDC服务商及运维团队需要管理大量站点的SSL/TLS证书。证书有效期普遍缩短至90天,手动续签成本极高,且容易因遗漏导致站点安全告警或用户访问异常。Shell自动化脚本成为解决批量续签、降低运维压力的有效手段。
核心实现:基于Shell的批量续签
目前主流方案依托开源工具(如acme.sh、certbot)结合自定义Shell脚本完成。以下为典型实现流程:
- 环境准备:安装curl、openssl及 acme.sh(或certbot),并配置好DNS API或HTTP验证权限。
- 域名列表管理:将待续签站点域名写入文本文件,每行一个域名,支持通配符格式。
- 循环签发脚本:通过
for循环读取列表,调用acme.sh的--issue --force参数强制续签,并指定Webroot或DNS模式。 - 证书部署:续签成功后,通过脚本自动复制证书到Nginx、Apache或CDN配置目录,并重载服务。
- 日志与通知:续签结果写入系统日志,失败时通过邮件或企业微信机器人告警。
#!/bin/bash
DOMAIN_FILE="/etc/ssl/domains.txt"
for domain in $(cat $DOMAIN_FILE); do
acme.sh --issue -d $domain --force --dns dns_cf && \
acme.sh --install-cert -d $domain --key-file /etc/nginx/ssl/$domain.key --fullchain-file /etc/nginx/ssl/$domain.cer && \
nginx -s reload
done自动化调度与可靠性保障
将脚本写入cron任务,建议每周执行一次(避开证书刷新高峰),并设置随机延迟避免DNS API过载。同时增加重试机制(最多3次),确保因网络波动导致的临时失败可自动恢复。对于云平台或CDN场景,可扩展脚本以调用API更新证书,无需手动接入。
安全与合规要点
脚本中涉及的API密钥(如Cloudflare DNS Token、阿里云AK/SK)需限制读取权限(chmod 600),并建议存放于独立配置文件,不硬编码。日志中应过滤敏感信息。此外,批量操作前建议先在测试站验证脚本逻辑,避免因配置错误影响线上服务。
适用场景与价值
该方案适用于IDC自建机房的数十至数千站点的证书管理。相比手动操作,可将续签耗时从数小时缩短至几分钟,续签成功率提升至99%以上(基于社区统计)。无需额外费用,仅依赖开源工具与已有运维环境,特别适合预算有限但要求高可靠性的中小型IDC及企业运维团队。
通过Shell自动化实现HTTPS批量续签,既降低了人为错误风险,也保证了站点持续符合现代安全规范,是IDC运维自动化的基础实践之一。