全自动SSL证书部署指南(支持泛域名与多平台)

80次阅读
没有评论

适用环境

  • 操作系统:Ubuntu 20.04+/CentOS 7+
  • Web 服务:Nginx≥1.18 / Apache≥2.4
  • 证书类型:泛域名证书(*.yourdomain.com)
  • 托管商要求:支持 API 操作的 DNS 服务商

一、基础环境配置

  1. 系统依赖安装
bashbash 复制 bash 复制# Ubuntu
sudo apt update && sudo apt install -y curl cron socat

# CentOS
sudo yum install -y epel-release
sudo yum install -y curl cronie socat
  1. 域名验证准备
  • 拥有域名控制权(如 yourdomain.com)
  • 在 DNS 服务商处创建 API 密钥(阿里云 /Cloudflare/DNSPod)

二、证书工具安装(二选一)

方案 A:acme.sh(CLI 工具)​

bashbash 复制 markdown 复制# 安装证书客户端
curl https://get.acme.sh | sh -s email=admin@yourdomain.com
source ~/.bashrc  # 或重新登录终端

# 配置证书颁发机构
acme.sh --set-default-ca --server letsencrypt  # 默认使用 Let's Encrypt

方案 B:Certbot(带插件管理)​

bashbash 复制 bash 复制# Ubuntu
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

# CentOS
sudo yum install certbot python3-certbot-nginx

三、DNS 服务商 API 配置

以 Cloudflare 为例:

  1. 登录 Cloudflare 控制台生成 Global API Key
  2. 配置环境变量:
bashbash 复制 bash 复制export CF_Key="your_api_key"
export CF_Email="admin@yourdomain.com"
echo "export CF_Key='your_api_key'" >> ~/.bashrc
echo "export CF_Email='admin@yourdomain.com'" >> ~/.bashrc

四、泛域名证书签发

bashbash 复制 bash 复制# 使用 acme.sh 申请(通配符证书)acme.sh --issue --dns dns_cf \
    -d yourdomain.com \
    -d *.yourdomain.com \
    --yes-I-know-dns-manual-mode-enough-go-ahead-please

五、Nginx 证书部署

  1. 创建证书目录
bashbash 复制 bash 复制sudo mkdir -p /etc/ssl/yourdomain.com/{live,archive}
  1. 安装证书
bashbash 复制 bash 复制acme.sh --install-cert -d yourdomain.com \
    --key-file /etc/ssl/yourdomain.com/live/privkey.pem \
    --fullchain-file /etc/ssl/yourdomain.com/live/fullchain.pem \
    --reloadcmd "sudo systemctl reload nginx"
  1. Nginx 配置示例
nginxnginx 复制 nginx 复制server {
    listen 443 ssl http2;
    server_name app.yourdomain.com;
    
    ssl_certificate /etc/ssl/yourdomain.com/live/fullchain.pem;
    ssl_certificate_key /etc/ssl/yourdomain.com/live/privkey.pem;
    
    # 安全增强配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
}

六、自动化管理

  1. 自动续期验证
bashbash 复制 bash 复制crontab -l | grep acme.sh  # 应存在每日自动任务
  1. 手动触发续期
bashbash 复制 bash 复制acme.sh --renew -d yourdomain.com --force
  1. 证书监控(Prometheus 示例)​
yamlyaml 复制 yaml 复制- job_name: 'ssl_monitor'
  static_configs:
    - targets: ['yourdomain.com:443']

七、高级配置

  1. 多服务器同步
bashbash 复制 bash 复制# 使用 rsync 同步证书
acme.sh --install-cert -d yourdomain.com \
    --reloadcmd "rsync -az /etc/ssl/yourdomain.com/ user@backup-server:/ssl/"
  1. 证书链优化
bashbash 复制 bash 复制# 合并中间证书
cat /etc/ssl/yourdomain.com/live/fullchain.pem \
    /etc/ssl/yourdomain.com/live/chain.pem > combined.pem

八、故障排查指南

现象 解决方案
DNS 验证失败 执行 dig TXT _acme-challenge.yourdomain.com 检查解析
443 端口不可用 检查防火墙:sudo ufw allow 443/tcp
证书不生效 验证证书链:openssl s_client -connect yourdomain.com:443 -showcerts

工具对比

工具 优势 适用场景
acme.sh 轻量级、支持多 DNS 服务商 单服务器快速部署
Certbot 官方维护、Web 插件丰富 复杂环境管理
Certimate 可视化操作、多用户协作 企业级证书中台

▶ 证书状态检测工具:https://csr.chinassl.net/ssl-checker.html
▶ Let’s Encrypt 官方文档:https://letsencrypt.org/docs/

正文完
 1
评论(没有评论)