我是用了acme脚本来自动生成免费的证书,但是证书只有3个月有效期,人工更新可能会经常忘记,我编辑了脚本定时更新
文章链接为:https://wenda.zuncuang.com/article/1152
证书定时更新后,还有一个问题要解决,那就是我的图片是用了阿里云的CDN,这个也需要通过脚本定时更新,阿里云提供了cli工具,通过shell脚本可以命令操作:
一,下载阿里云CLI工具
curl -O https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz && tar xf aliyun-cli-linux-latest-amd64.tgz && mv aliyun /usr/local/bin
二,申请阿里云的AK和SK,我是通过子账号,授予了此账号的的AliyunCDNFullAccess 权限
三,生成配置文件(profile文件)
aliyun configure set --profile cdn --mode AK --region cn-hangzhou --access-key-id <AK> --access-key-secret <SK>
把<AK>和<SK>换成你申城的appid和secret。
四,编写脚本如下:
#!/usr/bin/env bash
# 安装 CLI:
# 配置: aliyun configure set --profile cdn --mode AK --region cn-hangzhou --access-key-id <AK> --access-key-secret <SK>
DOMAIN="oss.xxx.cn" # 要换证书的 CDN 加速域名
#CERT_PUB="/root/.acme.sh/matrixshop.cn/fullchain.cer" # 新证书(含中间链)
#CERT_PRI="/root/.acme.sh/matrixshop.cn/xxx.cn.key" # 新私钥
CERT_DIR="/root/.acme.sh/matrixshop.cn" # 新证书(含中间链)
SSLPubContent=$(cat "${CERT_DIR}/fullchain.cer")
SSLPriContent=$(cat "${CERT_DIR}/matrixshop.cn.key")
# 1. 证书链里至少两段
cert_cnt=$(grep -c 'BEGIN CERTIFICATE' <<< "$SSLPubContent")
[[ $cert_cnt -ge 2 ]] || { echo "缺少中间链"; exit 1; }
# 2. 密钥匹配
mod_crt=$(openssl x509 -noout -modulus -in "$SSLPubContent" | openssl md5)
mod_key=$(openssl rsa -noout -modulus -in "$SSLPriContent" | openssl md5)
[[ "$mod_crt" == "$mod_key" ]] || { echo "证书与私钥不匹配"; exit 2; }
# 3. 签名算法必须是 RSA
#algo=$(openssl x509 -noout -text -in "$SSLPubContent" | grep "Public Key Algorithm" | head -1)
#[[ $algo =~ rsaEncryption ]] || { echo "证书不是 RSA 签名"; exit 3; }
#--RegionId cn-hangzhou \
# 读取文件并调用接口(CertType=upload 表示直接上传证书)
aliyun cdn SetCdnDomainSSLCertificate \
--DomainName "$DOMAIN" \
--SSLProtocol on \
--CertType upload \
--SSLPub="${SSLPubContent}" \
--SSLPri="${SSLPriContent}" \
--RegionId cn-hangzhou \
--profile cdn
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!