自动化生成 SSL 证书的脚本方法

2025.5.29 杂七杂八 1073

自动化生成 SSL 证书的脚本方法 杂七杂八-第1张

本文详细介绍如何通过脚本自动化生成SSL证书,涵盖Let’s Encrypt、OpenSSL等工具的使用方法,提供可复用的Bash/Python脚本示例,并解析证书续签与部署的最佳实践,帮助开发者高效实现HTTPS加密。

一、为什么需要自动化SSL证书生成?

随着HTTPS成为网站安全标配,手动申请和更新SSL证书已无法满足现代运维需求。自动化方案能:

  • 解决证书过期导致的业务中断风险
  • 降低人工维护成本
  • 适应微服务架构的证书海量需求
  • 符合PCI DSS等安全合规要求

二、主流自动化工具对比

工具 证书类型 验证方式 适合场景
Let’s Encrypt DV证书 HTTP/DNS验证 公有Web服务
OpenSSL 自签名证书 无CA验证 内网/测试环境
Certbot DV/OV证书 ACME协议 自动化运维

三、实战脚本示例

1. 使用Certbot自动申请(Bash)

!/bin/bash
DOMAIN="example.com"
EMAIL="admin@example.com"

 安装Certbot(以Ubuntu为例)
sudo apt install certbot python3-certbot-nginx -y

 自动获取证书并配置Nginx
sudo certbot --nginx -d $DOMAIN -d www.$DOMAIN --non-interactive --agree-tos -m $EMAIL

 设置自动续期
(crontab -l 2>/dev/null; echo "0 3    /usr/bin/certbot renew --quiet") | crontab -

2. OpenSSL自签名证书(Python)

import os
from OpenSSL import crypto, SSL

def generate_self_signed_cert(cert_file="cert.pem", key_file="key.pem"):
     创建密钥对
    k = crypto.PKey()
    k.generate_key(crypto.TYPE_RSA, 2048)
    
     创建证书
    cert = crypto.X509()
    cert.get_subject().CN = "localhost"
    cert.set_serial_number(1000)
    cert.gmtime_adj_notBefore(0)
    cert.gmtime_adj_notAfter(365246060)
    cert.set_issuer(cert.get_subject())
    cert.set_pubkey(k)
    cert.sign(k, 'sha256')
    
     保存文件
    with open(cert_file, "wb") as f:
        f.write(crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
    with open(key_file, "wb") as f:
        f.write(crypto.dump_privatekey(crypto.FILETYPE_PEM, k))

四、高级技巧与注意事项

  1. 通配符证书:通过DNS验证获取 .example.com 证书
  2. 证书链合并cat cert.pem chain.pem > fullchain.pem
  3. 密钥安全:设置400权限 chmod 400 private.key
  4. OCSP装订:提升HTTPS握手性能

五、监控与故障排查

推荐监控方案:

  • 使用Nagios检查证书过期时间:
    check_http -H example.com -C 30 --sni
  • Prometheus+Blackbox实现证书到期告警
  • 日志分析:journalctl -u certbot -f

评论