腾讯云 &阿里云自动申请续费ssl证书

作者:

腾讯云阿里云只要配置一次 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。