背景

由于域名的SSL证书到期时间都不是在一起,所以造成续签混乱,很烦!

前置

https://help.aliyun.com/zh/cli/?spm=a2c4g.11186623.0.0.4c8376f1EAx8dO

安装阿里云CLI工具

/bin/bash -c "$(curl -fsSL https://aliyuncli.alicdn.com/install.sh)"

创建RAM 访问控制

代码

此处参考:使用阿里云CLI在1panel申请证书后自动上传阿里云DCDN

upload-aliyun-cdn-ssl.sh

#!/bin/bash

# 检查参数数量
if [ "$#" -lt 3 ]; then
    echo "用法: $0 <AccessKey Id> <AccessKey Secret> <域名> [证书目录路径]"
    echo "示例: $0 AKID123456 SECRET789 example.com /path/to/certs"
    echo "注:如果不指定证书目录,默认使用当前目录"
    exit 1
fi

ACCESS_KEY_ID=$1
ACCESS_KEY_SECRET=$2
DOMAIN_NAME=$3
CERT_DIR=${4:-$(pwd)}

# 检查证书文件是否存在
if [ ! -f "$CERT_DIR/fullchain.pem" ] || [ ! -f "$CERT_DIR/privkey.pem" ]; then
    echo "错误:在 $CERT_DIR 目录下找不到 fullchain.pem 或 privkey.pem"
    exit 1
fi

# 配置阿里云CLI
aliyun configure set \
  --access-key-id "$ACCESS_KEY_ID" \
  --access-key-secret "$ACCESS_KEY_SECRET" \
  --region cn-nanjing-a \
  --profile AkProfile \
  --mode AK

# 上传SSL证书到CDN
aliyun dcdn SetDcdnDomainSSLCertificate \
  --region cn-hangzhou \
  --DomainName "$DOMAIN_NAME" \
  --CertType upload \
  --SSLProtocol on \
  --SSLPub "$(cat "$CERT_DIR/fullchain.pem")" \
  --SSLPri "$(cat "$CERT_DIR/privkey.pem")" \
  --endpoint dcdn.aliyuncs.com

echo "SSL证书上传完成"

使用

需要将upload-aliyun-cdn-ssl.sh与证书、密钥放在同一目录

如图:

进阶

如果觉得重复创建脚本麻烦,可以将脚本移动到系统 PATH 目录中,可以在任何位置使用

sudo mv upload-aliyun-cdn-ssl.sh /usr/local/bin/upload-aliyun-cdn-ssl

sudo chmod +x /usr/local/bin/upload-aliyun-cdn-ssl

使用示例

与上面的使用一样,指定了证书与密钥目录则不推送到本地目录,反之则推送。

upload-aliyun-cdn-ssl AKID123456 SECRET789 example.com
# or
upload-aliyun-cdn-ssl AKID123456 SECRET789 example.com /path/to/certs