证书的自动续期通常需要在到期前30天左右进行,Let's Encrypt的证书有效期为90天,所以工具一般会设置为每60天续期一次,确保有足够的时间处理失败的情况。自动化SSL证书的申请和续期可以通过以下步骤和工具实现,保障HTTPS服务的持续安全运行:
1. 选择证书颁发机构(CA)
Let's Encrypt(推荐):提供免费、自动化的SSL证书(支持通配符证书),有效期90天,支持ACME协议。
商业CA(如DigiCert、Sectigo等):适合企业级需求,需确认是否支持ACME协议。
2. 使用自动化工具
(1) Certbot (官方推荐)
适用场景:Nginx/Apache等常见Web服务器,支持HTTP-01和DNS-01验证。
安装与使用:
bash
复制
安装Certbot(以Ubuntu为例)
sudo apt install
certbot python3-certbot-nginx
申请证书(HTTP-01验证,自动配置Nginx)
sudo certbot --nginx -d example.com -d
www.example.com
仅申请证书(不修改配置)
sudo certbot certonly --webroot -w /var/www/html -d example.com
自动化续期:Certbot默认创建定时任务(/etc/cron.d/certbot),每日检查并自动续期。手动测试续期:
bash
复制
sudo certbot renew --dry-run
(2) acme.sh
适用场景:Shell脚本、无服务器环境、DNS-01验证(支持阿里云、Cloudflare等50+ DNS服务商)。
安装与使用:
bash
复制
安装acme.sh
curl https://get.acme.sh | sh
source
~/.bashrc
使用DNS API申请证书(以Cloudflare为例)
export CF_Key="your_api_key"
export CF_Email="your@email.com"
acme.sh
issue --dns dns_cf -d example.com -d
example.com
安装证书到指定目录
acme.sh --install-cert
d example.com \
key-file /etc/ssl/private/example.com.key
fullchain-file /etc/ssl/certs/example.com.crt
reloadcmd "systemctl reload nginx"
3. 选择验证方式
HTTP-01验证:需开放80端口,工具会在网站根目录生成临时文件供CA验证。
DNS-01验证:需在DNS解析中添加TXT记录,适合无法开放端口的场景(如CDN/内网服务),支持通配符证书。
4. 自动化部署与重载服务
脚本示例(Nginx续期后重载):
bash
复制
在Certbot的renew-hook中添加
sudo certbot renew --quiet --renew-hook "systemctl reload nginx"
Kubernetes环境:使用 cert-manager 自动管理证书。
yaml
复制
示例ClusterIssuer配置
apiVersion: cert-
manager.io/v1
kind:
ClusterIssuer
metadata:
name:
letsencrypt
spec:
acme:
server: https://acme-
v02.api.letsencrypt.org/directory
email:
your@email.com
privateKeySecretRef:
name: letsencrypt-account-
key
solvers:
http01:
ingress:
class: nginx
5. 监控与通知
监控证书过期时间:
bash
复制
检查证书剩余天数
openssl x509
enddate -noout -in /etc/letsencrypt/live/example.com/cert.pem
设置告警:
使用工具如 Nagios、Prometheus 或简单脚本监控证书有效期。
通过Cron定时任务发送邮件或Slack通知:
bash
复制
示例脚本发送邮件
echo "SSL证书将在7天内过期" | mail -s "证书警告" admin@example.com
6. 进阶场景
通配符证书:必须使用DNS-01验证,需配置DNS服务商的API密钥。
多服务器同步:通过Ansible/SSH分发证书,或存储到云存储(如AWS S3)。
容器化部署:在Dockerfile中集成证书申请逻辑,或使用Kubernetes的Secrets自动更新。
最佳实践
1. 备份证书:定期备份 /etc/letsencrypt 目录。
2. 最小权限:确保证书私钥权限为 600(仅root可读)。
3. 冗余验证:混合使用HTTP-01和DNS-01,防止单点故障。
4. 日志检查:定期查看工具日志(如 /var/log/letsencrypt/)。
按照以上述六个步骤,就可全自动处理SSL证书的申请、续期和部署,避免因证书过期导致的服务中断。