腾讯云CDN自动更新Acme.sh证书

致谢:本文是对 Noam’s Blog 的优化

Background

  1. SSL证书强制3个月失效
  2. 不用腾讯云DNS就不能自动更新CDN证书,需要手动加DNS解析或者上传文件
  3. 我有很多域名
  4. 每个月都要手动更新,很烦人

技术方案

  1. acme.sh 自动签发证书
  2. 腾讯云 tccli 命令行工具自动上传、绑定证书
  3. acme.shinstall-cert 功能,在 reload-cmd 上传证书。
  4. acme.sh自动更新 并调用 reload-cmd 上传、绑定。

特别注意:因为使用DNS签发,所以我选择了一个中央服务器负责所有CDN证书的签发。即 CDN证书与源站证书的解耦。

脚本

上传脚本

注意权限问题

sudo mkdir -p /opt/tencentcdn/ 
sudo chown $(whoami) /opt/tencentcdn/ -R
touch /opt/tencentcdn/upload_cert.sh && chmod +x /opt/tencentcdn/upload_cert.sh

写入以下内容

#!/bin/bash

domain_name=$1

# /opt/tencentcdn 是我自己选择的目录。
# 同时cert_path和key_path也是我自己选择的命名方法。
# 可以按照自己需求调整

base_dir="/opt/tencentcdn/${domain_name}_ecc" 
cert_path="${base_dir}/fullchain.cer" 
key_path="$base_dir/${domain_name}.key"

# 上传(禁止重复上传,重复时返回已存在的ID)
resp=$(tccli ssl UploadCertificate --cli-unfold-argument --CertificatePublicKey "$(cat ${cert_path})" --CertificatePrivateKey "$(cat ${key_path})" --Repeatable false)
echo $resp
cert_id=$(echo $resp | grep -oP '"CertificateId":\s*"\K[^"]+')
echo $cert_id

# 遍历域名列表,选中域名更新
for domain in $(tccli cdn DescribeDomains --cli-unfold-argument --endpoint cdn.ap-beijing.tencentcloudapi.com --Filters.0.Name status --Filters.0.Value online | grep -oP '"Domain":\s*"\K[^"]+'); do
  if [[ $domain == ${domain_name} ]]; then
    echo update online cdn domain deployment $domain
    tccli cdn ModifyDomainConfig --cli-unfold-argument --Domain "$domain" --Route 'Https.CertInfo.CertId' --Value "{\"update\":\"$cert_id\"}"
  fi
done
echo done

签发脚本

touch /opt/tencentcdn/issue_cert.sh && chmod +x /opt/tencentcdn/issue_cert.sh

写入以下内容

#!/bin/bash

domain_name=$1
acme="${HOME}/.acme.sh/acme.sh"

mkdir -p /opt/tencentcdn/${domain_name}_ecc
$acme --issue --dns dns_cf -d ${domain_name} --keylength ec-384 # 我使用了 Cloudflare DNS,使用其他厂商的在这里改
$acme --install-cert -d  ${domain_name} --ecc \
        --fullchain-file /opt/tencentcdn/${domain_name}_ecc/fullchain.cer \
        --key-file /opt/tencentcdn/${domain_name}_ecc/${domain_name}.key \
        --reloadcmd  "/opt/tencentcdn/upload_cert.sh ${domain_name}"

使用方法

/opt/tencentcdn/issue_cert.sh example.com
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇