腾讯云阿里云只要配置一次 API,以后证书就会全自动续期。
假设你的环境:
- 域名:
aspu.top - DNS:腾讯云 DNSPod
- Nginx 证书目录:
/etc/nginx/ssl/aspu.top_nginx - 服务器:Linux
- 使用 acme.sh
第一步:安装 acme.sh
curl https://get.acme.sh | sh
source ~/.bashrc
查看版本:
acme.sh --version
第二步:创建腾讯云 API 密钥
登录腾讯云控制台:
访问管理(CAM) → API 密钥管理
创建:
SecretId
SecretKey
例如:
SecretId = AKIDxxxxxxxxxxxxxxxx
SecretKey = xxxxxxxxxxxxxxxxx
建议不要使用主账号,而是创建一个 CAM 子账号,只授予 DNS 相关权限(例如 DNSPod 管理权限),这样更安全。
第三步:配置 API
执行:
# 1. 切换到 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
# 2. 设置腾讯云 API
export Tencent_SecretId="你的SecretId"
export Tencent_SecretKey="你的SecretKey"
如果是阿里云
export Ali_Key="xxxx"
export Ali_Secret="xxxx"
例如:
export Tencent_SecretId="AKIDxxxxxxxxxxxxxxxx"
export Tencent_SecretKey="xxxxxxxxxxxxxxxxxxxx"
第一次申请成功后,acme.sh 会把这两个值保存到:
~/.acme.sh/account.conf
以后不用再 export。
第四步:申请证书
如果申请:
aspu.top
www.aspu.top
执行:
腾讯云
acme.sh --issue \
--server letsencrypt \
--dns dns_tencent \
-d aspu.top \
-d www.aspu.top \
--keylength 2048 \
--force
如果是阿里云
acme.sh --issue \
--server letsencrypt \
--dns dns_ali \
-d aspu.top \
-d www.aspu.top \
--keylength 2048 \
--force
如果申请通配符:
*.aspu.top
执行:
腾讯云
acme.sh --issue \
--server letsencrypt \
--dns dns_tencent \
-d aspu.top \
-d '*.aspu.top' \
--keylength 2048 \
--force
如果是阿里云
acme.sh --issue \
--server letsencrypt \
--dns dns_ali \
-d aspu.top \
-d '*.aspu.top' \
--keylength 2048 \
--force
acme.sh 会自动:
调用腾讯云 API
│
新增 _acme-challenge TXT
│
等待解析
│
Let's Encrypt 验证
│
删除 TXT
│
签发证书
整个过程无需登录腾讯云后台。
第五步:安装到你的 nginx
你的 nginx 已经使用:
ssl_certificate /etc/nginx/ssl/aspu.top_nginx/aspu.top_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/aspu.top_nginx/aspu.top.key;
因此执行:
acme.sh --install-cert -d aspu.top \
--key-file /etc/nginx/ssl/aspu.top_nginx/aspu.top.key \
--fullchain-file /etc/nginx/ssl/aspu.top_nginx/aspu.top_bundle.crt \
--reloadcmd "/usr/sbin/nginx -s reload"
如果你的 nginx 是 systemd 管理的,则改成:
--reloadcmd "systemctl reload nginx"
验证
openssl pkey -in /ewomail/nginx/conf/ssl_cert/aspu.top_nginx/aspu.top.key -text -noout
正常应该看到类似:
Private-Key: (2048 bit)
第六步:以后会发生什么?
acme.sh 安装时已经创建了定时任务:
crontab -l
一般能看到:
35 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" >/dev/null
每天执行一次。
流程如下:
每天运行
│
检查证书
│
剩余约30天
│
自动申请新证书
│
覆盖:
/ewomail/nginx/conf/ssl_cert/aspu.top_nginx/
│
执行
/ewomail/nginx/sbin/nginx -s reload
整个过程不需要人工参与。
最后提醒一个关键点: dns_tencent 使用的是腾讯云 API(CAM 的 SecretId/SecretKey),不是 DNSPod 的 Token。如果你的域名是在腾讯云 DNS 控制台管理,使用上面的方式即可。若你的域名是在独立 DNSPod 平台管理,则需要使用对应的 dns_dp 插件和 DNSPod 的 API Token。