【实战】使用 acme.sh + tccli 自动部署证书到腾讯云 EdgeOne

The Redefine Team Lv5

【实战】使用 acme.sh + tccli 自动部署证书到腾讯云 EdgeOne (TEO)

在使用腾讯云边缘安全加速平台 (EdgeOne / TEO) 时,我们通常享受其强大的加速与防护能力。但对于使用 Let’s Encrypt 等免费证书的用户来说,每两个月手动上传一次证书不仅繁琐,还容易因为忘记续期导致业务中断。

虽然 acme.sh 内置了腾讯云 CDN 和 CLB 的部署钩子,但目前(截至本文撰写时)尚未内置对 EdgeOne 的直接支持。本文将介绍如何结合腾讯云官方命令行工具 (tccli),编写一个简单的 Shell 脚本,实现 EdgeOne 证书的 全自动续期与部署。

前置准备
在开始之前,请确保您的服务器满足以下条件:

已安装 acme.sh:且已经成功申请了证书。

已安装 Python:用于安装 tccli。

已安装 jq:用于解析 JSON 返回值(必选,否则无法提取证书 ID)。

CentOS: yum install jq

Debian/Ubuntu: apt install jq

第一步:安装并配置 tccli
我们需要腾讯云官方的命令行工具来调用 API。

Bash

安装 tccli

pip install tccli

配置认证信息

您需要前往腾讯云控制台获取 SecretId 和 SecretKey

tccli configure
在配置过程中,Region 建议填写 ap-guangzhou,输出格式默认 json 即可。

第二步:获取站点 ZoneId
EdgeOne 的资源管理基于站点(Site),我们需要先获取目标域名的 ZoneId。

运行以下命令列出您账号下的所有站点:

Bash

tccli teo DescribeZones
在返回的 JSON 结果中,找到您的域名对应的 ZoneId(格式通常为 zone-xxxxxx),记下它。

第三步:编写自动部署脚本
在服务器上创建一个名为 deploy_teo.sh 的脚本(建议放在 ~/.acme.sh/ 目录下),用于衔接 acme.sh 和腾讯云 API。

Bash

#!/bin/bash

================= 配置区域 (请修改此处) =================

1. 您的域名 (证书绑定的域名)

DOMAIN=”example.com”

2. 您的 EdgeOne 站点 ID

ZONE_ID=”zone-xxxxxx”

3. 证书路径 (根据 acme.sh 的实际安装路径和域名修改)

注意:acme.sh 默认 ECC 证书目录会有 _ecc 后缀

CERT_PATH=”$HOME/.acme.sh/${DOMAIN}_ecc/fullchain.cer”
KEY_PATH=”$HOME/.acme.sh/${DOMAIN}_ecc/${DOMAIN}.key”

======================================================

检查证书文件是否存在

if [ ! -f “$CERT_PATH” ] || [ ! -f “$KEY_PATH” ]; then
echo “Error: 证书文件未找到,请检查路径配置。”
exit 1
fi

echo “[$(date)] 开始部署证书到 EdgeOne…”

1. 上传证书到腾讯云 SSL 证书管理平台

echo “正在上传证书…”
UPLOAD_RESULT=$(tccli ssl UploadCertificate
–CertificatePublicKey “$(cat $CERT_PATH)”
–CertificatePrivateKey “$(cat $KEY_PATH)”
–Alias “${DOMAIN}$(date +%Y%m%d%H%M%S)”
–ProjectId 0)

使用 jq 提取 CertificateId

CERT_ID=$(echo $UPLOAD_RESULT | jq -r ‘.CertificateId’)

if [ -z “$CERT_ID” ] || [ “$CERT_ID” == “null” ]; then
echo “Error: 证书上传失败,API 返回:”
echo $UPLOAD_RESULT
exit 1
fi

echo “证书上传成功,CertId: $CERT_ID”

2. 将证书绑定到 EdgeOne 域名

echo “正在更新 EdgeOne 域名配置…”
UPDATE_RESULT=$(tccli teo ModifyHostsCertificate
–ZoneId “$ZONE_ID”
–Hosts “$DOMAIN”
–Mode “ssl”
–ServerCertInfo “[{"CertId": "$CERT_ID"}]”)

if [ $? -eq 0 ]; then
echo “✅ Success: 证书已成功部署到 EdgeOne!”
else
echo “❌ Failed: 部署失败,请检查以下错误信息:”
echo $UPDATE_RESULT
exit 1
fi
赋予脚本执行权限:

Bash

chmod +x /path/to/deploy_teo.sh
第四步:配置 acme.sh 自动调用
最后,我们需要告诉 acme.sh:”每次证书续期成功后,请执行这个脚本。”

使用 –reloadcmd 参数来实现这一点。假设您的域名是 example.com:

Bash

acme.sh –install-cert -d example.com –ecc
–reloadcmd “/path/to/deploy_teo.sh”
注意:请务必使用脚本的绝对路径。

验证与测试
您可以手动运行一次脚本来验证配置是否正确:

Bash

./deploy_teo.sh
如果看到 “✅ Success” 的提示,并且 EdgeOne 控制台的证书信息已更新,即大功告成。从此以后,acme.sh 会在后台默默守护您的 HTTPS 安全,无需再进行人工干预。

原理解析
这个方案的核心逻辑分为两层:

tccli ssl UploadCertificate: 将本地生成的证书文件上传至腾讯云的 SSL 证书托管中心,获得一个云端的 CertificateId。

tccli teo ModifyHostsCertificate: 调用 EdgeOne 的 API,指定域名使用刚才上传的 CertificateId。

相比直接上传文件内容给 EdgeOne,这种方式将证书统一托管在腾讯云 SSL 中心,方便后续在控制台统一查询和管理。

  • 标题: 【实战】使用 acme.sh + tccli 自动部署证书到腾讯云 EdgeOne
  • 作者: The Redefine Team
  • 创建于 : 2025-12-12 23:00:00
  • 更新于 : 2025-12-12 23:09:03
  • 链接: https://redefine.ohevan.com/2025/12/12/2025-12-12-deploy-ssl-to-edgeone/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论