跳至正文
首页 » 使用 Certbot 通过阿里云 DNS 申请与续订域名证书

使用 Certbot 通过阿里云 DNS 申请与续订域名证书

直接通过 Certbot 通过DNS方式申请域名证书后,因为在续订时需要更新 DNS 记录,所以不能直接使用 certbot renew 更新。本文介绍使用 certbot-dns-aliyun 脚本自动调用阿里云接口,自动申请和续订域名证书。

aliyun cli 工具

安装

wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
tar xzvf aliyun-cli-linux-latest-amd64.tgz
sudo cp aliyun /usr/local/bin
rm aliyun

配置

登录 https://ram.console.aliyun.com/ 添加用户,开启 OpenAPI 调用访问权限,开启 AliyunDNSFullAccess 授权。

sudo aliyun configure

根据引导填入信息,其中 AccessKeyID 和 AccessKeySecret 在阿里云RAM中,创建完用户后获取。

Access Key Id []: AccessKeyID
Access Key Secret []: AccessKeySecret
Default Region Id []: cn-beijing
Default Output Format [json]: json (Only support json)
Default Language [zh|en] en: zh

后面 certbot 需要在root 用户运行,所以这里也需要使用 root 用户配置,否则会报错

Hook '--manual-cleanup-hook' for beekc.top reported error code 3
Hook '--manual-cleanup-hook' for beekc.top ran with error output:
 ERROR: region can't be empty
 Configuration failed, use `aliyun configure` to configure it

没有在阿里云RAM中给用户授权 AliyunDNSFullAccess,会报错

Hook '--manual-auth-hook' for beekc.top ran with error output:
 ERROR: SDK.ServerError
 ErrorCode: Forbidden.RAM

配置成功会显示

Configure Done!!!
..............888888888888888888888 ........=8888888888888888888D=..............
...........88888888888888888888888 ..........D8888888888888888888888I...........
.........,8888888888888ZI: ...........................=Z88D8888888888D..........
.........+88888888 ..........................................88888888D..........
.........+88888888 .......Welcome to use Alibaba Cloud.......O8888888D..........
.........+88888888 ............. ************* ..............O8888888D..........
.........+88888888 .... Command Line Interface(Reloaded) ....O8888888D..........
.........+88888888...........................................88888888D..........
..........D888888888888DO+. ..........................?ND888888888888D..........
...........O8888888888888888888888...........D8888888888888888888888=...........
............ .:D8888888888888888888.........78888888888888888888O ..............

cerbot-dns-aliyun

安装

wget https://cdn.jsdelivr.net/gh/justjavac/certbot-dns-aliyun@main/alidns.sh
sudo cp alidns.sh /usr/local/bin
sudo chmod +x /usr/local/bin/alidns.sh
sudo ln -s /usr/local/bin/alidns.sh /usr/local/bin/alidns
rm alidns.sh

申请&续订

# 测试申请
certbot certonly -d *.example.com --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run

# 测试续期
certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --dry-run

# 正式申请和续期时去掉 --dry-run 参数

自动续期

添加定时任务

crontab -e

输入

1 4 1 */1 * root certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload"

在Crontab中,定时任务的格式由五个星号组成,这五个星号分别代表分钟(0 – 59)、小时(0 – 23)、日期(1 – 31)、月份(1 – 12)、星期几(0 – 7,0和7都表示星期日)。1 4 1 */1 * 表示每个月的第一天的凌晨4点1分执行任务

最后的--deploy-hook "nginx -s reload" 表示在续期成功后自动重启 nginx,需根据实际情况调整。

参考

  1. justjavac/certbot-dns-aliyun: 阿里云 DNS 的 certbot 插件,用来解决阿里云 DNS 不能自动为通配符证书续期的问题 (github.com)
  2. 如何完成交互式配置凭证_阿里云CLI(CLI)-阿里云帮助中心 (aliyun.com)
  3. 使用 Certbot 自动申请并续订阿里云 DNS 免费泛域名证书 – tabsp – 博客园 (cnblogs.com)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注