第05章 - 国内云服务商集成使用
本章详细介绍 acme.sh 与中国各大主流云服务商的集成使用,包括阿里云、腾讯云、华为云、百度云、京东云等,覆盖从 DNS API 配置到证书申请、安装、自动续期的完整流程。
5.1 阿里云(Alibaba Cloud)
阿里云是中国最大的云计算服务商,其 DNS 服务(阿里云 DNS / 万网)拥有广泛的用户群。
5.1.1 创建 RAM 子用户和 API Key
强烈建议使用 RAM 子用户的 AccessKey,而非主账号的 AccessKey,以降低安全风险。
- 登录阿里云 RAM 控制台
- 点击”创建用户”,选择”访问方式”为”OpenAPI 调用访问”
- 创建完成后,立即保存 AccessKey ID 和 AccessKey Secret(Secret 只显示一次)
- 为该用户授权:在用户详情页,点击”添加权限”,搜索并选择
AliyunDNSFullAccess
更安全的做法(最小权限):
在 RAM 控制台 → 权限策略管理 → 创建权限策略,内容如下:
{
"Version": "1",
"Statement": [
{
"Action": [
"alidns:DescribeDomains",
"alidns:DescribeDomainRecords",
"alidns:AddDomainRecord",
"alidns:DeleteDomainRecord",
"alidns:UpdateDomainRecord"
],
"Resource": "*",
"Effect": "Allow"
}
]
}
5.1.2 申请证书
# 配置 API 凭据(首次使用)
export Ali_Key="your_access_key_id"
export Ali_Secret="your_access_key_secret"
# 申请单域名证书
acme.sh --issue --dns dns_ali -d example.com
# 申请通配符证书(推荐)
acme.sh --issue --dns dns_ali -d example.com -d *.example.com
# 申请多域名通配符证书
acme.sh --issue --dns dns_ali \
-d example.com \
-d *.example.com \
-d *.api.example.com
# 指定使用 Let's Encrypt(如果 ZeroSSL 访问有问题)
acme.sh --issue --dns dns_ali --server letsencrypt \
-d example.com -d *.example.com
# 申请 ECC 证书(推荐,性能更好)
acme.sh --issue --dns dns_ali \
-d example.com -d *.example.com \
--keylength ec-256
5.1.3 安装证书到阿里云 ECS 的 Nginx
# 创建证书存放目录
mkdir -p /etc/nginx/ssl/example.com
# 安装证书
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com/privkey.pem \
--fullchain-file /etc/nginx/ssl/example.com/fullchain.pem \
--reloadcmd "systemctl reload nginx"
Nginx 配置示例(/etc/nginx/conf.d/example.com.conf):
# HTTP 重定向到 HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
# HTTPS 站点
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/nginx/ssl/example.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/example.com/privkey.pem;
# 推荐 SSL 配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# HSTS(可选,开启后不可轻易回退到 HTTP)
add_header Strict-Transport-Security "max-age=63072000" always;
root /var/www/html;
index index.html index.php;
}
5.1.4 将证书推送到阿里云 CDN / SLB
如果使用了阿里云 CDN(内容分发网络)或 SLB(负载均衡),可以通过阿里云 API 将证书上传到对应服务。
方式一:使用 acme.sh 的 deploy hook(qiniu)
对于七牛 CDN,acme.sh 提供了内置的 deploy hook:
export QINIU_AK="your_access_key"
export QINIU_SK="your_secret_key"
export QINIU_CDN_DOMAIN="your.cdn.domain.com"
acme.sh --deploy -d your.cdn.domain.com --deploy-hook qiniu
方式二:使用 Shell 脚本上传到阿里云 CDN
# 安装阿里云 CLI
# pip install aliyun-python-sdk-cdn
# 通过 --reloadcmd 触发上传脚本
acme.sh --install-cert -d example.com \
--fullchain-file /tmp/fullchain.pem \
--key-file /tmp/privkey.pem \
--reloadcmd "/path/to/upload_cert_to_aliyun_cdn.sh"
5.2 腾讯云(Tencent Cloud / 云服务器 CVM)
5.2.1 获取 API 密钥
- 登录腾讯云控制台
- 进入”访问管理” → “访问密钥” → “API 密钥管理”
- 创建密钥,保存 SecretId 和 SecretKey
使用子账号(推荐):
- 在 CAM(访问管理)中创建子用户
- 授予
QcloudDNSPodFullAccess权限(仅 DNS 操作) - 使用子用户的密钥
5.2.2 腾讯云 DNS API 两种方式
方式一:腾讯云新版 API(推荐)
export Tencent_SecretId="your_secret_id"
export Tencent_SecretKey="your_secret_key"
# 申请证书
acme.sh --issue --dns dns_tencent \
-d example.com -d *.example.com
# 申请 ECC 证书
acme.sh --issue --dns dns_tencent \
-d example.com -d *.example.com \
--keylength ec-256
方式二:DNSPod 独立账户 API(适合使用独立 DNSPod 账户的用户)
export DP_Id="your_dnspod_id"
export DP_Key="your_dnspod_token"
acme.sh --issue --dns dns_dp \
-d example.com -d *.example.com
5.2.3 安装证书到腾讯云 CVM 的 Nginx
# 创建证书目录
mkdir -p /etc/nginx/ssl/example.com
# 安装证书
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/example.com/privkey.pem \
--fullchain-file /etc/nginx/ssl/example.com/fullchain.pem \
--reloadcmd "nginx -s reload"
5.2.4 将证书同步到腾讯云 SSL 证书管理
腾讯云的 SSL 证书管理、CDN、CLB(负载均衡)可以使用同一套证书。通过 acme.sh 的 --reloadcmd 触发自动上传脚本:
#!/bin/bash
# upload_to_tencent.sh
# 需要提前安装 tccli:pip install tccli
DOMAIN="example.com"
CERT_FILE="/etc/nginx/ssl/example.com/fullchain.pem"
KEY_FILE="/etc/nginx/ssl/example.com/privkey.pem"
# 上传证书
tccli ssl UploadCertificate \
--CertificatePublicKey "$(cat $CERT_FILE)" \
--CertificatePrivateKey "$(cat $KEY_FILE)" \
--CertificateType SVR \
--Alias "acme.sh-$DOMAIN-$(date +%Y%m%d)"
5.3 华为云(Huawei Cloud)
5.3.1 获取 IAM 凭据
- 登录华为云控制台
- 进入”统一身份认证服务 (IAM)”
- 创建 IAM 用户,设置密码
- 为该用户授予
DNS FullAccess权限 - 获取”账号名”(DomainName,在右上角账号信息中可见)
5.3.2 申请证书
export HUAWEICLOUD_Username="your_iam_username"
export HUAWEICLOUD_Password="your_iam_password"
export HUAWEICLOUD_DomainName="your_account_domain_name"
# 申请通配符证书
acme.sh --issue --dns dns_huaweicloud \
-d example.com -d *.example.com
# 如果 DNS 传播较慢,增加等待时间
acme.sh --issue --dns dns_huaweicloud \
-d example.com -d *.example.com \
--dnssleep 120
5.3.3 安装证书到华为云 ECS
# 安装到 Nginx
acme.sh --install-cert -d example.com \
--key-file /etc/nginx/ssl/privkey.pem \
--fullchain-file /etc/nginx/ssl/fullchain.pem \
--reloadcmd "systemctl reload nginx"
5.4 百度云(Baidu Cloud)
5.4.1 获取 API 凭据
- 登录百度云控制台
- 进入”安全认证” → “Access Key”
- 创建 AccessKey,保存 Access Key ID 和 Secret Access Key
5.4.2 申请证书
export BAIDU_Cloud_ID="your_access_key_id"
export BAIDU_Cloud_Key="your_secret_access_key"
acme.sh --issue --dns dns_baidu \
-d example.com -d *.example.com
5.5 京东云(JD Cloud)
5.5.1 获取 API 凭据
- 登录京东云控制台
- 进入”账号管理” → “AccessKey 管理”
- 创建 AccessKey
5.5.2 申请证书
export JD_ACCESS_KEY_ID="your_access_key_id"
export JD_ACCESS_KEY_SECRET="your_access_key_secret"
# 默认区域为 cn-north-1(北京),可按需修改
export JD_REGION="cn-north-1"
acme.sh --issue --dns dns_jd \
-d example.com -d *.example.com
5.6 移动云(China Mobile Cloud)/ 联通云 / 电信天翼云
这些国内电信运营商提供的云服务目前 acme.sh 可能尚无专用 DNS API 插件。建议采用以下方案:
方案一:HTTP-01 验证 如果服务器有公网 IP 且 80 端口可达:
acme.sh --issue -d example.com --standalone
方案二:DNS 别名模式 将域名的 ACME 验证 CNAME 到有 API 支持的 DNS 服务商(如 Cloudflare):
# 在原 DNS 控制台添加 CNAME:
# _acme-challenge.example.com → _acme-challenge.example.cloudflare-managed.com
# 通过 Cloudflare API 验证
export CF_Token="your_cf_token"
acme.sh --issue --dns dns_cf \
-d example.com -d *.example.com \
--challenge-alias example.cloudflare-managed.com
方案三:手动 DNS 模式(不可自动续期)
acme.sh --issue -d example.com --dns
# 按提示手动添加 TXT 记录后执行 --renew
5.7 宝塔面板(BT Panel)完整流程
宝塔面板是国内非常流行的服务器管理工具,以下是完整的配置流程。
5.7.1 安装 acme.sh
# 登录服务器,切换到 root 用户
sudo su
# 安装 acme.sh
curl https://get.acme.sh | sh -s email=your@email.com
source ~/.bashrc
# 建议切换默认 CA 为 Let's Encrypt(在国内更稳定)
acme.sh --set-default-ca --server letsencrypt
5.7.2 申请证书(以阿里云 DNS 为例)
export Ali_Key="your_access_key_id"
export Ali_Secret="your_access_key_secret"
acme.sh --issue --dns dns_ali \
-d your-domain.com -d *.your-domain.com
5.7.3 安装证书到宝塔 Nginx
宝塔面板的证书目录结构:
# 创建证书目录(宝塔 Nginx 站点证书通常放在这里)
mkdir -p /www/server/panel/vhost/cert/your-domain.com/
# 安装证书
acme.sh --install-cert -d your-domain.com \
--key-file /www/server/panel/vhost/cert/your-domain.com/privkey.pem \
--fullchain-file /www/server/panel/vhost/cert/your-domain.com/fullchain.pem \
--reloadcmd "nginx -s reload"
然后在宝塔面板中:
- 进入”网站” → 找到对应域名 → “设置”
- 点击 “SSL” 选项卡
- 选择”其他证书”或”自定义证书”
- 填入证书文件路径,或手动粘贴证书内容
5.7.4 让宝塔识别 acme.sh 申请的证书
如果希望宝塔面板也能显示证书信息,可以按以下方式配置 Nginx 站点的 SSL:
进入宝塔面板 → 网站设置 → SSL → 修改 Nginx 配置文件,添加:
ssl_certificate /www/server/panel/vhost/cert/your-domain.com/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/your-domain.com/privkey.pem;
5.8 LNMP 一键包完整流程
# 1. 安装 acme.sh
curl https://get.acme.sh | sh -s email=your@email.com
source ~/.bashrc
# 2. 申请证书(使用阿里云 DNS 为例)
export Ali_Key="your_access_key_id"
export Ali_Secret="your_access_key_secret"
acme.sh --issue --dns dns_ali -d example.com -d *.example.com
# 3. 安装证书到 LNMP 的 Nginx
mkdir -p /usr/local/nginx/conf/ssl/example.com/
acme.sh --install-cert -d example.com \
--key-file /usr/local/nginx/conf/ssl/example.com/privkey.pem \
--fullchain-file /usr/local/nginx/conf/ssl/example.com/fullchain.pem \
--reloadcmd "/etc/init.d/nginx reload"
# 4. 编辑 LNMP Nginx 配置(通常在 /usr/local/nginx/conf/vhost/example.com.conf)
5.9 主机控制面板环境(cPanel / DirectAdmin / Plesk)
在共享主机或虚拟主机环境下,通常无法直接安装 acme.sh,但可以通过控制面板的 API 进行部署。
5.9.1 cPanel 部署
acme.sh 提供了专门针对 cPanel 的 deploy hook:
# 安装证书到 cPanel
export DEPLOY_CPANEL_USER="cpanel_username"
acme.sh --deploy -d example.com --deploy-hook cpanel_uapi
# 旧版 cPanel(v55 以下)
export DEPLOY_CPANEL_USER="cpanel_username"
export DEPLOY_CPANEL_PASSWORD="cpanel_password"
acme.sh --deploy -d example.com --deploy-hook cpanel
5.10 国内 CDN 服务商证书更新
5.10.1 七牛云 CDN
acme.sh 内置了七牛云 CDN 的 deploy hook:
# 首次配置
export QINIU_AK="your_access_key"
export QINIU_SK="your_secret_key"
export QINIU_CDN_DOMAIN="static.example.com"
# 申请证书并部署到七牛 CDN
acme.sh --issue --dns dns_ali -d static.example.com
acme.sh --deploy -d static.example.com --deploy-hook qiniu
5.10.2 又拍云、白山云、网宿等
目前 acme.sh 暂无这些 CDN 服务商的内置 deploy hook,但可以通过 --reloadcmd 调用自定义脚本,利用各 CDN 的 API 上传证书。
5.11 小结
本章详细介绍了 acme.sh 与国内主流云服务商的集成:
- 阿里云:使用 RAM 子用户的 AccessKey +
dns_ali,推荐最小权限策略 - 腾讯云:推荐使用新版
dns_tencent,也支持旧版dns_dp - 华为云:使用 IAM 账户 +
dns_huaweicloud - 百度云:使用 AccessKey +
dns_baidu - 京东云:使用 AccessKey +
dns_jd - 宝塔/LNMP:按对应目录结构安装证书,配置 Nginx 使用新路径
下一章介绍 acme.sh 与国际主流云服务商的集成。