V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
jqknono
V2EX  ›  程序员

分享一个冷门的域名记录相关的坑: CNAME 与 TXT 记录冲突影响泛域名证书申请

  •  
  •   jqknono · 140 天前 · 1353 次点击
    这是一个创建于 140 天前的主题,其中的信息可能已经有所发展或是发生改变。

    相同前缀的 CNAME 与 TXT 不能共存

    折腾过域名的可能知道(A,AAAA)记录不能与 CNAME 共存, 但未必碰到过 TXT 与 CNAME 冲突的情况.

    什么情况下 TXT 会与 CNAME 同时使用一个前缀?

    有一种场景, 就是在 LetsEncrypt 证书申请, 使用 DNS-01 挑战来验证域名所有权时.

    1. Certbot 会使用 ackey 和 acsecret 或者 token, 创建一条_acme-challenge.example.comTXT 记录
    2. Letsencrypt 会查询 TXT 记录, 确认申请方有权创建 DNS 记录, 证明有域名所有权.
    3. Letsencrypt 签发证书
    4. Certbot 清理_acme-challenge.example.comTXT 记录

    倘若创建TXT 记录时, 已经有一条_acme-challenge.example.comCNAME记录, 则TXT记录可能会创建失败, 导致域名挑战验证失败.

    为什么会出现_acme-challenge.example.com 的CNAME记录?

    阿里云新推出的 ESA 边缘安全加速, 类似 cloudflare, 是原 DCDN 全站加速的改名增强版. 在早期使用时, 不支持自助申请泛域名, 我是使用脚本周期性将自己申请的泛域名证书传上去, 管理起来稍有不便. 后来出了托管 DCV, 可以自助申请更新泛域名证书, 按照说明操作, 的确可以自助管理泛域名证书. 但埋下的隐患隔了数月才发现. 这个 CNAME 记录持续存在, 会导致不能创建相同前缀的 TXT 记录, 导致我不能在别处证明域名所有权.

    解决方案

    方案一: 不使用托管 DVC

    托管 DVC 要求将_acme-challenge.example.com写入指定值, 本质上是声明该域名属于第三方, 自己不再拥有该域名的控制权.

    需要泛域名的话, 可以使用任务脚本调用 ESA 的 API, 定时将泛域名证书上传到 ESA.

    方案二: 不使用 DNS-01 验证域名所有权

    Certbot 提供几种域名所有权验证(challenge, 挑战)方法, 除了根域名验证(DNS-01)外, 还可以使用 HTTP-01 和 TLS-ALPN-01 等方法.

    HTTP-01 和 TLS-ALPN-01 方法需要现先有服务, 验证可访问性之后, 再给证书.

    DNS-01 可以在搭建服务之前就获取证书.

    方案三: 打破 ESA 和云解析 DNS 的业务墙

    这俩业务同属阿里云, 但各自实现了一套 DNS API, 如果ESA可以自助在云解析 DNS设置 CNAME 或 TXT 记录, 获取完证书后, 删除记录, 则不会影响在别处使用 DNS-01 挑战.

    方案四: 不使用阿里 ESA

    cloudflare 上没这事, 证书随便给.

    2 条回复    2025-05-29 17:22:12 +08:00
    aG6uncl6Syb0brhs
        1
    aG6uncl6Syb0brhs  
       107 天前
    我之前也碰到了,但后来发现不太对。 cname 方式接入套路云或 cf ,cf 申请泛域名时候确实不需要使用配置托管 dcv (即一条 cname 记录),但是证书续签的时候就会出问题,即每 3 个月续签都需要客户手动 TXT 校验一次,我当时业务都挂了才知道,cf 官方有说明 https://developers.cloudflare.com/ssl/edge-certificates/changing-dcv-method/methods/txt/

    然后为了上面这个泛域名解决续签的问题,cf 提供了“托管 DCV”,需要配置一条长期的 CNAME ,这个和套路云的 ESA 机制就完全一致了。

    综上,2 家其实一样
    jqknono
        2
    jqknono  
    OP
       107 天前
    @armstrongvs 原来如此.
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2572 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 11:55 · PVG 19:55 · LAX 04:55 · JFK 07:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.