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"
相关推荐
Benszen2 天前
Ansible自动化运维实战
linux·运维·自动化·ansible
qqxhb2 天前
23|工具生态全景:本地文件、网络、数据库、浏览器自动化
网络·数据库·自动化·ai编程·最小权限·人工确认
easy_coder2 天前
AI Agent 真正的上限,不在 Skill 数量,而在边界设计
人工智能·云计算
祭曦念2 天前
越权漏洞的克星!用爬虫自动化检测平行越权/垂直越权漏洞
爬虫·安全·自动化
lishutong10062 天前
基于 Perfetto 与 AI 的 Android 性能自动化诊断方案
android·人工智能·自动化
TG_yunshuguoji2 天前
阿里云代理商:百炼大模型技术解析与应用指南
服务器·阿里云·云计算
小猪咪piggy2 天前
【接口自动化】(3) YAML 和 JSON Schema
运维·自动化
gwjcloud2 天前
Ansible自动化运维工具
运维·自动化·ansible
wzl202612132 天前
自动化脚本模拟人工操作 — 基于RPA绕过企微API次数限制
自动化·企业微信·rpa