问题出现得很突然,日志倒是留得挺全。域名之前配过 CAA 记录,只允许 letsencrypt.org 签发,换成商业证书后 CA 一直拒绝签发,控制台提示 CAA 校验失败,域名解析本身完全正常。
刚开始盯着「TTL 设成了 24 小时,改了记录 CA 那边还没刷新」,折腾了半个多小时,排掉了。
真正麻烦的地方在于,几个原因的现象几乎一样。CAA 记录里没有新 CA 的授权条目,校验直接不通过。少数情况下是记录写在子域上,主域查询时命中了另一条更严格的规则。
不容易想到的是,有多条 CAA 记录冲突,issuer 列表被合并后互斥。
上来先查一下当前生效的 CAA 记录
dig +short CAA example.com @8.8.8.8
补上新 CA 的 issue 条目
example.com. IN CAA 0 issue "digicert.com"
随后确认子域没有覆盖主域的策略
dig +short CAA www.example.com @8.8.8.8
末了等 TTL 过期后重新触发签发
dig +short CAA example.com @1.1.1.1
别只看报错消失,验证要多做一步。CAA 查询里出现新 CA 的授权,签发流程通过,证书链和到期时间在浏览器里显示正常。
补一句。CAA 是签发前的硬门禁,换 CA 之前先查这条记录,比等签发失败再回头找原因快得多。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
