全自动泛域名SSL证书部署终极指南(9000字完整版)

69次阅读
一条评论

第一章:环境准备与原理说明

1.1 证书自动化原理

  • Let’s Encrypt 使用 ACME 协议验证域名所有权,支持 DNS TXT 记录验证
  • 泛域名证书需通过 _acme-challenge.yourdomain.com 的 TXT 记录验证
  • 自动化工具通过 DNS API 动态添加 / 删除验证记录

1.2 硬件要求

markdownmarkdown 复制 markdown 复制| 项目         | 最低配置        | 推荐配置         |
|--------------|----------------|------------------|
| CPU          | 1 核            | 2 核              |  
| 内存         | 512MB          | 2GB              |
| 磁盘         | 20GB HDD       | 50GB SSD         |
| 网络         | 1Mbps 带宽       | 10Mbps 带宽        |

1.3 软件依赖

bashbash 复制 bash 复制# Ubuntu/Debian
sudo apt update && sudo apt install -y \
    curl \
    cron \
    socat \
    openssl \
    git \
    nginx

# CentOS/RHEL
sudo yum install -y \
    epel-release \
    curl \
    cronie \
    socat \
    openssl \
    git \
    nginx

第二章:工具链深度配置

2.1 acme.sh 高级安装

bashbash 复制 bash 复制# 指定安装路径(非 root 用户)curl https://get.acme.sh | sh -s email=admin@yourdomain.com \
    --install \
    --home /opt/acme.sh \
    --accountemail "admin@yourdomain.com"

# 配置自动升级
echo 'acme.sh --upgrade --auto-upgrade' | sudo tee /etc/cron.daily/acme-upgrade
sudo chmod +x /etc/cron.daily/acme-upgrade

# 日志配置(保留 90 天)sudo mkdir /var/log/acme.sh
sudo ln -s /var/log/acme.sh ~/.acme.sh/acme.sh.log

2.2 多 CA 切换配置

bashbash 复制 bash 复制# Let's Encrypt(默认)acme.sh --set-default-ca --server letsencrypt

# ZeroSSL(需注册账号)acme.sh --register-account -m admin@yourdomain.com --server zerossl
acme.sh --set-default-ca --server zerossl

# Buypass(欧洲合规)acme.sh --set-default-ca --server buypass

第三章:全 DNS 服务商 API 对接

3.1 阿里云配置

bashbash 复制 markdown 复制# RAM 用户权限策略
{
    "Version": "1",
    "Statement": [{
        "Action": [
            "alidns:AddDomainRecord",
            "alidns:DeleteDomainRecord",
            "alidns:DescribeDomainRecords"
        ],
        "Resource": "acs:alidns:*:*:domain/yourdomain.com",
        "Effect": "Allow"
    }]
}

# 环境变量配置
cat <<EOF >> ~/.bashrc
export Ali_Key="LTAI5txxxxxxxxxxxx"
export Ali_Secret="BGU3Sqxxxxxxxxxxxxxxxx"
EOF

3.2 Cloudflare 配置

iniini 复制 ini 复制# ~/.acme.sh/account.conf
export CF_Token="v1.xxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxx"
export CF_Zone_ID="xxxxxxxxxxxxx"

3.3 DNSPod 国际版

bashbash 复制 markdown 复制acme.sh --issue --dns dns_dpi \
    --dnspod-dpi-key "xxxxxx" \
    --dnspod-dpi-token "xxxxxx" \
    -d yourdomain.com -d *.yourdomain.com

第四章:证书签发全流程

4.1 单次签发(调试模式)​

bashbash 复制 bash 复制acme.sh --issue --dns dns_ali \
    -d yourdomain.com \
    -d *.yourdomain.com \
    --debug 2 \
    --log-level 3 \
    --dnssleep 30  # DNS 生效等待时间

4.2 批量签发(多域名)​

bashbash 复制 markdown 复制domains=(
    "yourdomain.com"
    "test.com"
    "app.net"
)

for domain in "${domains[@]}"; do
    acme.sh --issue --dns dns_cf \
        -d "$domain" \
        -d "*.$domain" \
        --key-file /etc/ssl/$domain/key.pem \
        --fullchain-file /etc/ssl/$domain/fullchain.pem
done

4.3 ECC 证书签发

bashbash 复制 bash 复制acme.sh --issue --dns dns_ali \
    -d yourdomain.com \
    --keylength ec-384  # 可选 ec-256/ec-384

第五章:Web 服务器集成

5.1 Nginx 高级配置

nginxnginx 复制 nginx 复制# /etc/nginx/conf.d/ssl.conf
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-ECDSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/ssl/yourdomain.com/ca.pem;

# 强制 HTTPS 跳转
server {
    listen 80;
    server_name yourdomain.com *.yourdomain.com;
    return 301 https://$host$request_uri;
}

5.2 Apache 配置

apacheapache 复制 apache 复制# /etc/apache2/sites-available/ssl.conf
<VirtualHost *:443>
    SSLEngine on
    SSLCertificateFile /etc/ssl/yourdomain.com/fullchain.pem
    SSLCertificateKeyFile /etc/ssl/yourdomain.com/key.pem
    SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
    SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
    SSLHonorCipherOrder on
    Header always set Strict-Transport-Security "max-age=63072000"
</VirtualHost>

第六章:自动化运维体系

6.1 监控告警配置

bashbash 复制 bash 复制# 证书过期监控(Prometheus Exporter)acme.sh --monitor \
    --prometheus /var/lib/prometheus/node_exporter/acme.prom \
    --days 14  # 提前 14 天告警

# 邮件通知
acme.sh --set-notify \
    --notify-hook mail \
    --notify-level 2 \
    --notify-smtp-server "smtp.yourdomain.com" \
    --notify-smtp-user "alert@yourdomain.com" \
    --notify-smtp-password "xxxxxx"

6.2 集群同步方案

bashbash 复制 bash 复制# 使用 Ansible 同步证书
acme.sh --install-cert -d yourdomain.com \
    --reloadcmd "ansible all -m copy \
        -a 'src=/etc/ssl/yourdomain.com/ dest=/etc/ssl/yourdomain.com/'"
    
# Kubernetes Secret 自动更新
acme.sh --install-cert -d yourdomain.com \
    --reloadcmd "kubectl create secret tls yourdomain-tls \
        --cert=/etc/ssl/yourdomain.com/fullchain.pem \
        --key=/etc/ssl/yourdomain.com/key.pem --dry-run=client -o yaml | kubectl apply -f -"

第七章:安全加固指南

7.1 密钥保护策略

bashbash 复制 bash 复制# 密钥文件权限设置
sudo chmod 600 /etc/ssl/yourdomain.com/*.pem
sudo chown root:nginx /etc/ssl/yourdomain.com/

# 密钥加密存储
acme.sh --install-cert -d yourdomain.com \
    --key-file /etc/ssl/yourdomain.com/key.pem.gpg \
    --encrypt-key  # 使用 GPG 加密存储

7.2 漏洞防护配置

nginxnginx 复制 nginx 复制# 禁用弱加密套件
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';

# 启用 HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

# OCSP Stapling 优化
resolver 8.8.8.8 1.1.1.1 valid=300s;
resolver_timeout 5s;

第八章:全链路验证方案

8.1 证书链验证

bashbash 复制 bash 复制# 完整证书链检查
openssl verify -verify_chain -CAfile /etc/ssl/yourdomain.com/ca.pem \
    /etc/ssl/yourdomain.com/fullchain.pem

# 在线验证
curl -sSf https://yourdomain.com > /dev/null
echo $?  # 返回 0 表示 HTTPS 访问正常

8.2 自动续期测试

bashbash 复制 markdown 复制# 模拟续期(不修改实际证书)acme.sh --renew -d yourdomain.com --test

# 强制触发续期
acme.sh --renew -d yourdomain.com --force \
    --log --syslog 6  # 记录到系统日志

第九章:企业级扩展方案

9.1 Certimate 私有化部署

yamlyaml 复制 yaml 复制# docker-compose.yml
version: '3'
services:
  certimate:
    image: ghcr.io/certimate/certimate:latest
    ports:
      - "8080:8080"
    volumes:
      - ./data:/data
    environment:
      - DB_URL=postgres://user:pass@db:5432/certimate
      - REDIS_URL=redis://redis:6379

  db:
    image: postgres:14
    environment:
      POSTGRES_PASSWORD: yoursecurepassword

  redis:
    image: redis:6

9.2 审计与合规

sqlsql 复制 sql 复制-- 证书签发记录表
CREATE TABLE certificates (
    id SERIAL PRIMARY KEY,
    domain VARCHAR(255) NOT NULL,
    issuer VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT NOW(),
    expires_at TIMESTAMP NOT NULL,
    key_algorithm VARCHAR(20) NOT NULL
);

-- 操作日志表
CREATE TABLE audit_logs (
    id SERIAL PRIMARY KEY,
    action VARCHAR(50) NOT NULL,
    operator VARCHAR(50) NOT NULL,
    timestamp TIMESTAMP DEFAULT NOW());

附录 A:全平台客户端支持

系统平台 安装命令 注意事项
Windows WSL2 choco install acme.sh 需开启 Linux 子系统
macOS brew install acme.sh 需安装 Homebrew
Docker docker run neilpang/acme.sh 需挂载证书存储目录
Synology NAS 套件中心安装 Acme Toolkit 需开启 SSH 访问

附录 B:错误代码速查表

错误代码 含义 解决方案
DNS-01 DNS 验证失败 检查 API 权限 /TTL 设置
CONN-REF 连接被拒绝 检查防火墙 /443 端口开放
RATE_LMT 签发次数超限 切换 CA 或等待 7 天后重试
AUTH-ERR 认证信息错误 重新配置 DNS API 密钥
CERT_EXP 证书已过期 检查自动续期任务是否正常运行

点击下载 PDF 完整版:https://yourdomain.com/ssl-guide.pdf
在线验证工具:https://ssl-checker.yourdomain.com/

正文完
 1
评论(一条评论)
2025-04-28 21:54:44 回复

您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar

     未知