ESA在cname模式下获得泛域名证书方法

域名托管在阿里云 DNS 或第三方, 无法迁移域名 ns, 但需要泛域名. 阿里云 ESA 提供 10 张证书的额度, 显然是不太够的.

这里分享一种方法获得泛域名证书, 最后会说明原理.

需要在两个业务界面进行操作:

  1. ESA
  2. 云解析(或第三方 DNS 解析)

操作步骤

  1. ESA: DNS -> 设置: 转换为 NS 接入模式, 直接确认, 不需要其它操作.
  2. ESA: 申请免费边缘证书, 仅申请*.example.com, 使用自己的域名
  3. ESA: 点开正在申请的证书的下拉条, 获得 txt 记录, 主机记录:_acme-challenge.example.com, 记录值-PewtWrH93avbM_bScUILtcNwCHifNvjZIa2VgT9seQ
  4. 云解析: 创建 TXT 记录, 将上一步获得主机记录和记录值填入
  5. 等待获得泛域名证书, 十分钟内未获得, 则表示有出错, 自行检查错误.
  6. ESA: DNS -> 设置: 转换为 CNAME 接入模式, 直接确认, 不需要其它操作.

原理

免费证书都来自letsencrypt, 其有两种认证方式:

  1. HTTP-01 Challenge, Let’s Encrypt 的验证服务器会通过 HTTP 请求访问你服务器上的一个特定文件(位于.well-known/acme-challenge/路径下),以确认你对域名的控制权。
  2. DNS-01 Challenge:这种方式要求你在你的域名的 DNS 记录中添加一条 TXT 记录。通过在 DNS 中添加特定的 TXT 记录,你可以证明自己对该域名具有控制权。

泛域名证书只能通过 DNS-01 挑战获取, 也就是需要配置 DNS 记录. 因此 ESA 会要求将域名托管到 ESA 平台才能申请泛域名证书, 操作步骤中"ESA: DNS -> 设置: 转换为 NS 接入模式" 是通过分析 ESA 的接口ApplyCertificate返回信息得到的结论, 这一步不产生任何实际作用, 仅仅是为了绕过阿里云的校验.

核心步骤是向 letscrypt 申请证书时, 将预定好的 TXT 记录写入域名的 ns 服务器, 无论这个服务器是来自云解析还是 ESA, 都可以证明域名属于自己.

总结

ESA 和云解析同属阿里云, 却不能数据互通, ESA 明明有验证域名是否属于本账号的能力, 获取泛域名证书只需要在云解析加一条解析规则, 授权一下就可以, 但是却没做. 体验还有提升空间.

这种方法获取的证书可能无法更新, 可以使用其它方式定义同步证书到 ESA: https://api.aliyun.com/api/ESA/2024-09-10/SetCertificate