2026 在阿里云(Aliyun)上实现 Certbot 自动化申请

在阿里云(Aliyun)上实现 Certbot 自动化申请(特别是申请泛域名 证书,如 *.example.com),必须使用 DNS-01 验证

由于 Certbot 官方并未内置阿里云插件,我们需要安装一个第三方的 Python 插件 certbot-dns-aliyun

以下是完整的操作步骤:


第一步:准备阿里云 RAM 账号 (AccessKey)

为了安全,绝对不要直接使用阿里云的主账号 Key。请创建一个只有 DNS 权限的子账号。

  1. 登录 阿里云控制台 -> 搜索 RAM 访问控制
  2. 创建用户: 设置用户名(例如 certbot-user),勾选 OpenAPI 调用访问
  3. 授权: 点击刚创建的用户 -> 添加权限 -> 搜索并添加 AliyunDNSFullAccess(管理云解析 DNS 的权限)。
  4. 保存密钥: 复制下来的 AccessKey IDAccessKey Secret,稍后要用。

第二步:安装 Certbot 和 阿里云插件

由于 Snap 版本的 Certbot 在加载第三方插件时权限管理较严,推荐直接使用 pip (Python包管理器) 来安装,这样兼容性最好。

  1. 安装 Python3 和 Pip (如果未安装):
bash 复制代码
# Ubuntu/Debian
sudo apt update
sudo apt install python3-pip python3-venv libaugeas0

# CentOS/Alibaba Cloud Linux
sudo yum install python3-pip
  1. 创建虚拟环境并安装 (推荐):
    为了不污染系统环境,建议在虚拟环境中安装:
bash 复制代码
sudo python3 -m venv /opt/certbot/
sudo /opt/certbot/bin/pip install --upgrade pip
# 安装 Certbot 和 阿里云 DNS 插件
sudo /opt/certbot/bin/pip install certbot certbot-dns-aliyun
  1. 建立软连接 (方便使用):
bash 复制代码
sudo ln -s /opt/certbot/bin/certbot /usr/bin/certbot

第三步:配置阿里云凭证

  1. 创建配置文件:
    在服务器上找个安全的地方(例如 /etc/letsencrypt/)创建一个文件 aliyun.ini
bash 复制代码
sudo vim /etc/letsencrypt/aliyun.ini
  1. 填入内容 (替换为你第一步获取的 Key):
ini 复制代码
dns_aliyun_access_key = 你的AccessKeyID
dns_aliyun_access_key_secret = 你的AccessKeySecret
  1. 设置权限 (非常重要):
    为了防止密钥泄露,Certbot 要求该文件权限必须严格:
bash 复制代码
sudo chmod 600 /etc/letsencrypt/aliyun.ini

第四步:自动申请证书

现在可以运行命令申请证书了。Certbot 会自动调用阿里云 API 添加一条 TXT 记录,验证成功后自动删除。

申请命令:

bash 复制代码
sudo certbot certonly \
  --authenticator dns-aliyun \
  --dns-aliyun-credentials /etc/letsencrypt/aliyun.ini \
  -d example.com \
  -d *.example.com
  • certonly: 只申请证书,暂不修改 Nginx/Apache 配置(推荐,手动配置更稳妥)。
  • -d *.example.com: 申请泛域名。

如果成功,你会看到 Congratulations,证书文件会保存在 /etc/letsencrypt/live/example.com/ 目录下。


第五步:验证自动续期

Let's Encrypt 证书有效期 90 天。我们需要确认自动续期是否正常工作。

bash 复制代码
sudo certbot renew --dry-run
  • 如果显示 Simulated renewal success,说明配置无误。
  • 你可以将该命令加入 crontab,或者依赖系统自带的 timer(通常安装时会自动配置)。
  • 注意: 续期后,Nginx/Apache 不会自动加载新证书。你需要加一个 deploy-hook 让它续期后自动重启 Nginx。

完善的自动续期命令 (添加到 Crontab):

bash 复制代码
# 每月1号凌晨4点检查并续期,如果续期成功则重载 Nginx
0 4 1 * * /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx"
相关推荐
2501_94198205几秒前
RPA 自动化推送中的多任务调度与并发控制
运维·自动化
天空属于哈夫克36 分钟前
基于图像识别与句柄操作的企业微信外部群自动化实践
运维·自动化·企业微信
2401_865854887 分钟前
腾讯云云手机的质量如何
智能手机·云计算·腾讯云
天空属于哈夫克317 分钟前
基于 UI 自动化实现企业微信外部群主动推送的架构设计
运维·自动化·企业微信
rockmelodies18 分钟前
基于AI的智能Suricata规则生成、优化与自动化验证平台
人工智能·自动化·suricata·ids·入侵检测规则
宇钶宇夕28 分钟前
CoDeSys入门实战一起学习(八):CoDeSys库文件详解——从概念到分类,高效编程的基础
运维·自动化·软件工程
乾元40 分钟前
兵器谱——深度学习、强化学习与 NLP 在安全中的典型应用场景
运维·网络·人工智能·深度学习·安全·自然语言处理·自动化
宇钶宇夕42 分钟前
CoDeSys入门实战一起学习(十):CoDeSys库文件详解——从零搭建CoDeSys自定义库
运维·自动化·软件工程
2501_941982051 小时前
企业微信自动化:精准推送技术揭秘
运维·自动化·企业微信
Solar20251 小时前
机械制造企业数据采集系统选型指南:从技术挑战到架构实践
java·大数据·服务器·架构·云计算