在运维多个网站或服务时,HTTPS证书的维护常常让人头疼。尤其是当手头有几十个域名,每个证书都有不同的到期时间,手动逐个更新不仅费时,还容易遗漏。一旦某个证书过期,网站就会出现安全警告,用户访问直接受影响。
为什么需要批量管理?
举个例子,公司同时运营官网、商城、博客和几个内部系统,每个都用了独立的SSL证书。如果靠人工盯着邮箱提醒、手动下载安装,很容易出错。更现实的做法是建立一套自动化流程,统一查看、更新、部署证书。
使用Certbot结合脚本批量处理
Certbot 是 Let’s Encrypt 官方推荐的工具,支持自动签发和续签。配合简单的 Shell 脚本,可以一次性处理多个域名。
#!/bin/bash
DOMAINS=("example.com" "shop.example.com" "blog.example.com")
for domain in "${DOMAINS[@]}"; do
certbot certonly --webroot -w /var/www/html -d $domain --non-interactive --agree-tos -m admin@example.com
done这个脚本会依次为列表中的每个域名申请证书。只要 webroot 路径配置正确,整个过程无需干预。
用集中式工具统一监控
除了命令行,也可以选择图形化工具。比如 SSLyze 或 CertMonitor,能扫描多个域名的证书状态,列出有效期、颁发机构和是否即将过期。设置定时任务每周跑一次检查,结果发到钉钉或邮件,提前两周就能收到预警。
有些团队还会把证书信息存进配置管理系统,比如用 Ansible 管理所有服务器的证书部署。更新时只需改一遍变量,全量推送,避免漏掉某台测试机。
避免常见坑
批量操作最怕“一错全错”。执行前先在测试环境验证脚本逻辑,特别是自动重载 Nginx 的步骤,万一配置写错可能导致服务中断。建议每次批量更新后加一句检测命令:
nginx -t && systemctl reload nginx这样只有配置合法才会重启服务。另外,别忘了备份旧证书,防止新证书异常时能快速回滚。
实际工作中,一个简单的 cron 任务配上清晰的日志输出,比复杂的工具更可靠。比如每天凌晨跑一次 renew 检查:
0 2 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"只要域名都在自动续签范围内,基本可以做到“设好之后忘了它”。