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"
相关推荐
启雀AI5 小时前
AI 驱动的视频课程自动摘要与知识点提取:ASR + LLM 流水线工程实践
人工智能·阿里云·华为云·音视频·培训saas平台
画中有画6 小时前
自动化脚本开发最佳实践
运维·自动化
m0_525724729 小时前
Jenkins共享库目录规范解析
自动化
llgdwuhan10 小时前
CPO 架构革新撕开设备缺口:测试 + 耦合双赛道,国产迎来黄金窗口期
自动化·光模块·耦合测试设备·光模块耦合设备·芯片测试设备
测试_AI_一辰14 小时前
AI Agent 评测最隐蔽的坑-记忆
人工智能·算法·ai·自动化·ai编程
学习和思考14 小时前
非自动化专业如何自学PLC?我的6个月学习路线图
笔记·学习·自动化·学习方法
微硬创新15 小时前
如何让4-20mA信号跑上PROFINET高速路?耐达讯自动化NY-PN-A160C给出答案
人工智能·物联网·网络协议·自动化·信息与通信
m0_5257247215 小时前
Jenkins共享库实现流水线复用
自动化·k8s·devops
Black蜡笔小新17 小时前
从智慧社区到雪亮工程:国标GB28181公网平台EasyCVR如何构建视频“一张网”?
人工智能·自动化·easycvr
梦想的旅途217 小时前
企业微信自动化实战:客户资料自动修改与备注同步
运维·自动化·企业微信