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"
相关推荐
阿蔹2 小时前
UI测试自动化-Web-Python-Selenium-2-元素操作、浏览器操作
前端·python·selenium·ui·自动化
专注VB编程开发20年2 小时前
VB6 UIAutomation 自动化查找元素
运维·自动化·uiautomation·uia
秋雨雁南飞4 小时前
FlaUI 自动化
自动化
lifewange4 小时前
100 个接口,1000 个业务场景,如何设计自动化测试用例?框架是如何设计的?
运维·自动化·测试用例
电化学仪器白超4 小时前
20251209Ver8(精密电流源温漂特性测试报告)
python·单片机·嵌入式硬件·自动化
222you4 小时前
智慧社区:调用腾讯云的人脸识别接口完成人脸采集的功能
云计算·github·腾讯云
tap.AI4 小时前
Deepseek(二)五分钟打造优质 PPT:从 DeepSeek 大纲到 Kimi 自动化生成
运维·自动化·powerpoint
彬匠科技BinJiang_tech5 小时前
对账太耗时?跨境ERP实现物流商/供应商自动化对账
大数据·运维·自动化
科士威传动5 小时前
滚珠导轨中的预紧力该如何判断?
人工智能·科技·机器学习·自动化·制造