ACME SSL automation for Alibaba Cloud ESA DNS — ACME SSL 自动化 for Alibaba Cloud ESA DNS
v0.1.4使用Alibaba Cloud ESA DNS + acme.sh自动颁发/更新HTTPS证书(包括wildcard *.example.com + example.com),可选安装到Nginx。 当用户提到ESA、ATrustDNS、_acme-challenge、acme.sh、Let's Encrypt、No TXT record found、InvalidRecordNameSuffix、wildcard certificate或Nginx证书配置时触发此技能。
运行时依赖
安装命令
点击复制技能文档
ESA DNS + ACME 证书自动化设计决策(重要) 本技能将 acme.sh + ESA DNS 结合成一个单一的集成流程,而不是分成两个技能。 原因: 两个步骤紧密耦合:ACME 挑战令牌必须立即写入 ESA DNS。 最常见的用户错误是“验证失败 / 记录写入错误的面板”——集成流程可以最小化错误。 通配符场景通常会产生多个 TXT 值用于相同的 FQDN;分离会增加手动同步成本。 如果未来对“仅 DNS 操作”有显著需求,可以提取一个单独的 esa-dns-records 辅助技能。 何时触发 当以下任一条件成立时触发: 域名 NS 记录位于 .atrustdns.com(ESA 托管的 DNS) 用户说“使用 acme.sh 发行证书”、“Let's Encrypt”、“DNS-01” 错误:未找到 _acme-challenge... 的 TXT 记录 需要同时发行 example.com + .example.com 需要自动写入 ESA DNS 记录并安装到 Nginx 支持环境 Linux 主机(推荐:Ubuntu 测试) 系统级 Nginx(LNMP 测试) Docker/容器化环境不支持 未在 Windows/macOS 上测试 先决条件 在使用本技能之前,从官方项目安装 acme.sh,并查看您选择的安装方法,而不是直接将远程脚本管道到 shell: https://github.com/acmesh-official/acme.sh 本技能期望 acme.sh 可以在 PATH 中使用。 脚本也会回退到 ~/.acme.sh/acme.sh 如果存在。 要求: 通过 ALIYUN_AK / ALIYUN_SK 或 ALIBABACLOUD_ACCESS_KEY_ID / ALIBABACLOUD_ACCESS_KEY_SECRET 的凭证 可选的 ESA 区域提示通过 ALIYUN_ESA_REGION / ALIBABACLOUD_ESA_REGION / ESA_REGION 或 --region 支持 STS 令牌通过 ALIYUN_SECURITY_TOKEN、ALIBABACLOUD_SECURITY_TOKEN 或 --sts-token 如果用户在 OpenClaw 聊天/TUI 中直接提供凭证作为纯 id / secret / token 值而不使用 env 名称,则将其视为通用 Alibaba Cloud AccessKeyId / AccessKeySecret / SecurityToken,并将其传递给 --ak / --sk / --sts-token。 不要阻止用户是否说 Aliyun 或 Alibaba Cloud;让脚本自动检测 ESA 区域/站点。 运行脚本 脚本路径:scripts/esa_acme_issue.py 默认行为(优化):证书安装到 Nginx 默认禁用;使用 --install-cert 启用 --dns-timeout 默认为 600 秒 区域自动发现是尽力而为的;如果 ESA 不暴露 DescribeRegions,则传递 --region 以种子站点发现,脚本将探测一个回退区域列表 可选的 IPv4/IPv6 记录管理:--ensure-a-record host=ip(带有权威 NS 推送检查) 覆盖保护:现有的 A 值不会被覆盖,除非传递 --confirm-overwrite --lang 选择输出语言(默认:en;可用语言自动生成来自 scripts/i18n/) 如果使用 --install-cert,请在具有写入目标证书路径和重新加载 Nginx 权限的受控 Linux 主机上运行。 自动续期 cron 安装 使用 scripts/install_cron.sh 当用户希望此工作流程在主机上自动续期时。 安装内容: 一个包含 AK/SK(和可选的 STS 令牌 / 区域提示)的根拥有的 env 文件 一个位于 /usr/local/sbin/ 的包装脚本 一个 cron 条目,它在请求的时间表上运行包装脚本并记录到 /var/log/ 示例: sudo bash scripts/install_cron.sh \ --wrapper-name dogeow \ --domains "dogeow.com,.dogeow.com" \ --ak YOUR_AK \ --sk YOUR_SK \ --region cn-hangzhou \ --with-nginx-reload 重要:这是推荐的方式来自动续期 ESA 区域,因为默认的 acme.sh --cron 不知道如何创建 ESA DNS TXT 记录。 如果用户希望安装 Nginx 证书路径,也可以传递 --cert-path / --key-path 和可选的 --reload-cmd。 单域导出 export ALIYUN_AK='YOUR_AK' export ALIYUN_SK='YOUR_SK' export ALIYUN_SECURITY_TOKEN='YOUR_STS_TOKEN' # 可选但推荐 python3 scripts/esa_acme_issue.py \ -d test.example.com 等效的 Alibaba Cloud env 名称也被接受: export ALIBABACLOUD_ACCESS_KEY_ID='YOUR_AK' export ALIBABACLOUD_ACCESS_KEY_SECRET='YOUR_SK' export ALIBABACLOUD_SECURITY_TOKEN='YOUR_STS_TOKEN' # 可选 顶级域 + 通配符(推荐顺序) export ALIYUN_AK='YOUR_AK' export ALIYUN_SK='YOUR_SK' python3 scripts/esa_acme_issue.py \ -d example.com \ -d '.example.com' 仅通配符 python3 scripts/esa_acme_issue.py \ -d '*.example.com' 正确的 Nginx 配置 ssl_certificate /etc/nginx/ssl/example.com.crt; ssl_certificate_key /etc/nginx/ssl/example.com.key; 完成标准(反假阳性) 在报告“记录创建 / DNS 准备就绪”之前,两个条件必须满足: ListRecords 返回目标 RecordName + Type + Value; 权威 NS dig @ns TXT 返回预期令牌。 如果仅 CreateRecord API 返回成功(RequestId/RecordId 仅)而没有通过上述两个检查,则报告“请求接受”,而不是“完成”。 故障排除