批量管理HTTPS证书的实用技巧

在运维多个网站或服务时,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"

只要域名都在自动续签范围内,基本可以做到“设好之后忘了它”。