使用acme.sh更新阿里云DCDN证书

0. 前言

0.1. 需求与思路

DCDN 需要一份 SSL 证书,但是阿里云内贩卖的证书过于昂贵,无疑增加了我们的成本。

acme.sh 可以自动获取证书,有效期 90 天,尽管免费了,但是每隔 90 天我们就要上传一次证书,如果忘记了,网站就会显示证书过期。

因此我们期望可以将这个过程自动化,使用 acme.sh 获取证书,然后通过某种方式上传证书。

经过搜索,发现阿里云 CLI 可以做到最后一步。所以整个思路就很清晰了:

  1. 使用 acme.sh 获取证书
  2. 使用阿里云 CLI 上传证书

0.2. 准备工作

首先,想要运行 acme.sh,我们需要一台服务器。其次,acme.sh 申请证书需要进行 DNS Challenge,这个过程想要自动化则我们还需要阿里云的 API 密钥,API 密钥归属于 RAM 用户,因此我们还要申请一个 RAM 用户。注:本文中 DNS 是由阿里云托管。

综上,我们需要:

  • 一台服务器
  • 阿里云的 API 密钥
  • acme.sh
  • 阿里云 CLI

下面的步骤将会介绍这个过程

1. 获取阿里云 API 密钥

1.1. 打开 RAM 控制台并创建 RAM 用户

首先,找到阿里云的 RAM 控制台。

RAM 控制台

选择左侧用户,点击创建用户,输入一个登录名称,并选中 OpenAPI 调用访问。

创建用户

点击确定,并进行一次安全验证(若有的话)。在下个页面,记住 AccessKeyID 和 AccessKeySecret,如果怕忘记,可以下载 CSV 文件。注意,信息只会显示一次,所以一定要记住。

创建完成界面

1.2. 为刚刚的用户添加权限

选中刚刚创建的用户,点击下方的添加权限,添加以下权限

  • AliyunDNSFullAccess 这个权限是为了更新 DNS 记录,目的是给 acme.sh 提供 DNS 记录更新的权限
  • AliyunDCDNFullAccess 这个权限是为了更新 DCDN 证书,目的是给程序与脚本提供 DCDN 证书更新的权限

最后点击下方确定

添加权限

2. 安装 Aliyun CLI

2.1. 下载安装包

来到服务器上,首先我们要下载 Aliyun CLI 安装包:

1
2
3
mkdir $HOME/aliyun
cd $HOME/aliyun
curl https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz -o aliyun-cli-linux-latest-amd64.tgz

Aliyun CLI 是阿里云提供的命令行工具,可以通过命令行管理阿里云资源。

2.2. 解压安装包

1
tar -xzvf aliyun-cli-linux-latest-amd64.tgz

2.3. 安装

1
sudo cp aliyun /usr/local/bin

将文件移动到 bin 中变为全局变量

2.4. 配置

输入以下命令配置:

1
aliyun configure

按照提示输入 AccessKeyID 和 AccessKeySecret,默认地区可以cn-hangzhou,完成配置。

3. 编辑上传证书脚本

在你喜欢的地方创建一个脚本,比如/path/to/reloadcmd.sh,内容如下:

注:第 3-5 行请改为自己的配置

1
2
3
4
5
6
7
8
9
10
#!/bin/bash

PublicCertPath="/path/to/fullchain.cer"
PrivateCertPath="/path/to/keyfile.key"
DomainName="example.com"

publicCert=$(cat $PublicCertPath)
privateCert=$(cat $PrivateCertPath)

aliyun dcdn SetDcdnDomainSSLCertificate --DomainName "$DomainName" --SSLProtocol "on" --SSLPri="$privateCert" --SSLPub="$publicCert"

这个脚本将通过 Aliyun CLI 将证书上传到阿里云 DCDN 服务。记得使用以下命令给脚本添加执行权限:

1
chmod +x /path/to/reloadcmd.sh

4. 申请证书

4.1. 安装 acme.sh

使用以下命令安装 acme.sh:

1
curl https://get.acme.sh | sh

4.2. 导出阿里云 API 密钥

使用以下命令导出阿里云 API 密钥:

1
2
export Ali_Key="<key>"
export Ali_Secret="<secret>"

4.3. 申请一份证书

使用以下命令申请一份证书:

1
acme.sh --issue --dns dns_ali -d example.com

4.4. 安装证书并配置自动更新

使用以下命令安装证书:

注:这里的/path/to/fullchain.cer/path/to/keyfile.key是你的证书的路径,/path/to/reloadcmd.sh是你刚刚创建的脚本的路径。

1
acme.sh --install-cert -d example.com --fullchain-file /path/to/fullchain.cer --key-file /path/to/keyfile.key --reloadcmd "/path/to/reloadcmd.sh"

这里的安装证书其实是指将证书导出到一个合理的地方,方便将证书上传到阿里云 DCDN 服务。

以上步骤,我们就完成了当 acme.sh 发现证书需要更新时,acme.sh 将会自动更新证书,并执行我们上面创建的脚本,将证书传入 DCDN。

5. 参考


使用acme.sh更新阿里云DCDN证书
https://nacldragon.top/2024/DCDN-acmesh/
作者
NaCl
发布于
2024年4月3日
许可协议