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 ID 和 AccessKey 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"
相关推荐
专注API从业者2 分钟前
告别手工盯盘:用 Open‑Claw 搭建电商商品自动化监控与数据分析实战
运维·数据结构·数据挖掘·数据分析·自动化
Rebecca_aLi4 分钟前
码匠教育:从手工表格到脚本自动化,Python 改造工作流的思路
运维·python·自动化
会议咨询10 分钟前
2026年云计算、交通与机电控制国际会议(CTMC 2026)
云计算·交通·机电控制
qq_2842740529 分钟前
电气控制与PLC·HMI触摸屏组态与自动伸缩门控制系统 CSDN发布稿
笔记·学习·自动化
玄芯散人36 分钟前
【金丹·88】Makefile从入门到放弃:手动编译自动化之路
运维·自动化
Geek-Chow1 小时前
05.2 · AWS Lambda 别名(Alias)详解:加权路由、金丝雀发布与秒级回滚
云计算
yunlaodacom1 小时前
腾讯云国际站代理商:COS跨域请求失败怎么办?CORS配置步骤、OPTIONS预检与403错误排查
云计算·腾讯云
海宇大数据1 小时前
零信任架构实战:基于海宇企业综合风险报告构建自动化供应链保理对公尽调网关
运维·人工智能·架构·自动化
代码方舟2 小时前
零信任架构实战:基于天远普通维保查询构建自动化二手车融资租赁资产入库审计网关
人工智能·架构·自动化
做运维的阿瑞2 小时前
Terraform 循环与动态资源:count、for_each 与 dynamic
云原生·云计算·terraform