使用 ACME 自动化证书技术实现全自动部署
源服务器(内网) <-> 安全网关 <-> CDN 网络
本文将演示如何基于 ACME 协议(以 Let’s Encrypt 为例),在“源服务器(内网)—安全网关—CDN网络”的三层架构下实现全自动 TLS 证书部署与续签。本文提供完整的架构图、部署步骤以及自动化实现方案,适用于企业或高校的生产级环境。
一、背景与目标
在现代互联网服务架构中,TLS 证书是保障安全通信的关键环节。然而,传统证书的签发与部署往往需要人工操作,不仅效率低,还可能因为证书过期导致服务中断。
目标:
- 基于 ACME 协议(Let’s Encrypt 或其他 ACME CA),实现证书的全自动签发与续签。
- 在 源服务器(内网)—安全网关—CDN 网络 三层架构下,保证 内外一致性 与 零人工干预。
- 证书自动同步到各层节点(尤其是安全网关和 CDN)。
二、架构设计
整体拓扑如下:
关键点:
- 源服务器 不直接对外暴露,仅需内网 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. 部署自动化逻辑
安全网关负责 ACME 签发
- 通过 DNS API 完成域名验证。
- 自动生成证书并更新本地 TLS 配置(Nginx/HAProxy)。
证书同步
使用 Hook 将证书推送至:
- CDN API(如 Cloudflare/Akamai 提供 API)。
- 源服务器内网 TLS(通过 rsync/SCP + systemd reload)。
自动续签
- 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。
五、自动化流程图
六、运维要点
- 监控:在 Prometheus 中记录证书过期时间。
- 容错:CDN 与网关证书不同步时,以 CDN 为优先。
- 安全性:DNS API Token 建议仅限特定域名写权限。
七、总结
通过 ACME 自动化技术,可以在 源服务器—安全网关—CDN 网络 三层架构下实现:
- 证书全自动签发与续签。
- 自动同步至多层节点,无需人工介入。
- 保证业务服务 7x24 不间断安全运行。
评论区
还没有人评论