使用 ACME 自动化证书技术实现全自动部署


8 观看次数
721 字数
0 评论

使用 ACME 自动化证书技术实现全自动部署

源服务器(内网) <-> 安全网关 <-> CDN 网络

本文将演示如何基于 ACME 协议(以 Let’s Encrypt 为例),在“源服务器(内网)—安全网关—CDN网络”的三层架构下实现全自动 TLS 证书部署与续签。本文提供完整的架构图、部署步骤以及自动化实现方案,适用于企业或高校的生产级环境。


一、背景与目标

在现代互联网服务架构中,TLS 证书是保障安全通信的关键环节。然而,传统证书的签发与部署往往需要人工操作,不仅效率低,还可能因为证书过期导致服务中断。

目标:

  • 基于 ACME 协议(Let’s Encrypt 或其他 ACME CA),实现证书的全自动签发与续签。
  • 源服务器(内网)—安全网关—CDN 网络 三层架构下,保证 内外一致性零人工干预
  • 证书自动同步到各层节点(尤其是安全网关和 CDN)。

二、架构设计

整体拓扑如下:

图1_网络图谱示意图.png

关键点:

  • 源服务器 不直接对外暴露,仅需内网 TLS。
  • 安全网关 是证书签发的主要节点(负责 ACME HTTP-01/ DNS-01 验证)。
  • CDN 网络 的 TLS 证书需定期从安全网关同步(API 或 SCP/OSS)。

三、技术细节

1. ACME 客户端选择

  • Certbot:成熟,支持 Hook 脚本。
  • acme.sh:轻量化,Bash 脚本,易集成。
  • lego:Go 实现,适合容器化场景。

本文选用 acme.sh(原因:依赖少,支持 DNS API,适合内网 + 外网混合场景)。


2. 证书验证模式

  • HTTP-01 验证:需网关 80/443 可通外网(适合直连场景)。
  • DNS-01 验证:通过 API 更新 DNS 记录,适合 CDN/内网环境

推荐:DNS-01 验证(因为源站在内网,直接暴露不现实)。


3. 部署自动化逻辑

  1. 安全网关负责 ACME 签发

    • 通过 DNS API 完成域名验证。
    • 自动生成证书并更新本地 TLS 配置(Nginx/HAProxy)。
  2. 证书同步

    • 使用 Hook 将证书推送至:

      • CDN API(如 Cloudflare/Akamai 提供 API)。
      • 源服务器内网 TLS(通过 rsync/SCP + systemd reload)。
  3. 自动续签

    • acme.sh 自带定时任务(crontab/systemd timer)。
    • 更新后自动触发 Hook。

四、具体实现方案

1. 安装 acme.sh

curl https://get.acme.sh | sh
source ~/.bashrc

2. 使用 DNS API 签发证书

以 Cloudflare 为例:

export CF_Token="xxxxxxxxxx"
export CF_Account_ID="yyyyyyyyyy"

acme.sh --issue \
  --dns dns_cf \
  -d example.com \
  -d '*.example.com'

输出:证书将保存在 ~/.acme.sh/example.com/


3. 自动部署到安全网关(Nginx 示例)

acme.sh --install-cert -d example.com \
  --key-file       /etc/nginx/ssl/example.com.key \
  --fullchain-file /etc/nginx/ssl/example.com.crt \
  --reloadcmd     "systemctl reload nginx"

4. 自动同步至源服务器

--reloadcmd 中增加同步脚本,例如:

#!/bin/bash
SRC_CERT="/etc/nginx/ssl/example.com.crt"
SRC_KEY="/etc/nginx/ssl/example.com.key"

for host in app1.internal app2.internal; do
    scp $SRC_CERT $SRC_KEY root@$host:/etc/ssl/
    ssh root@$host "systemctl reload apache2"
done

5. 自动同步至 CDN

以 Cloudflare 为例(需支持自定义证书上传 API):

#!/bin/bash
CERT_PATH="/etc/nginx/ssl/example.com.crt"
KEY_PATH="/etc/nginx/ssl/example.com.key"

curl -X POST "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/custom_certificates" \
     -H "Authorization: Bearer ${CF_API_TOKEN}" \
     -F "certificate=@${CERT_PATH}" \
     -F "private_key=@${KEY_PATH}"

可替换为 Akamai、阿里云 CDN、腾讯云 CDN 等 API。


五、自动化流程图

图2_定时任务流程图.png


六、运维要点

  • 监控:在 Prometheus 中记录证书过期时间。
  • 容错:CDN 与网关证书不同步时,以 CDN 为优先。
  • 安全性:DNS API Token 建议仅限特定域名写权限。

七、总结

通过 ACME 自动化技术,可以在 源服务器—安全网关—CDN 网络 三层架构下实现:

  • 证书全自动签发与续签。
  • 自动同步至多层节点,无需人工介入。
  • 保证业务服务 7x24 不间断安全运行。

评论区

还没有人评论

添加新评论