摘要:申请或续期 HTTPS 证书时报 CAA、SERVFAIL 或超时,先核对本域和父域的 CAA 记录:issue、issuewild、iodef 怎么写,多 CA 要写多条,以及 dig CAA 实际解析到什么。依据 RFC 8659、Let's Encrypt CAA 文档和 Cloudflare、阿里云、腾讯云官方 DNS 文档。查询日期 2026-11-14。只放官网普通链接(affiliate_later)。
依据:RFC 8659 *DNS Certification Authority Authorization (CAA) Resource Record*(2019 年 11 月,取代 RFC 6844);Let's Encrypt《Certification Authority Authorization (CAA)》(页面标注更新于 2026-10-04);Cloudflare《Add CAA records》(页面标注更新于 2026-04-21);阿里云帮助中心《如何使用 CAA 记录防止域名证书劫持》;腾讯云《云解析 DNS CAA 记录》(页面标注更新于 2026-05-22)、《使用 CAA 记录防止错误签发 SSL 证书》(页面标注更新于 2025-12-30)。查询日期:2026-11-14(北京时间)。只放官网普通链接(
affiliate_later: 1)。控制台字段名、合作 CA 列表会随服务商页面更新,以你查询当天的文档和dig实际结果为准;本文不编某块面板里的默认值。不构成运维或合规建议。 改 DNS 前先记下当前记录。
独立站申请免费证书,或到期后续期时,客户端日志里突然出现 CAA、SERVFAIL,证书一直发不下来。域名上的 A、CNAME、MX、TTL 怎么读,见域名解析入门;怎么申请和自动续期,见HTTPS 免费证书申请与自动续期;续期现场里各类报错怎么分流,见免费 SSL 续期失败:常见报错与回滚。本文只核对 CAA 这一条记录:格式是什么,多 CA 怎么写多条,签发失败时用 dig CAA 看什么。
1. CAA 管的是「谁可以给你签发证书」
Let's Encrypt 的 CAA 文档写:CAA 是一种 DNS 记录,用来指定哪些证书颁发机构(CA)被允许为包含该域名的证书签发。现行常用版本由 2019 年的 RFC 8659、RFC 8657 标准化。默认情况下,只要通过域名控制权验证,每个公共 CA 都可以为公网 DNS 里的域名签发;CAA 的作用,是让域名持有人把这个范围收窄。
文档也写了另一面:如果你并不打算限制 CA,通常可以什么都不做,但仍可能遇到下面会讲到的 CAA 查询错误。没有 CAA 记录时,腾讯云文档的表述是:任何 CA 机构都可以为该域名颁发证书。这和「已经写了 issue 记录、却漏掉你正在用的那一家」不是同一类问题,核对时要先分清。

2. 记录写在哪,格式怎么读
Let's Encrypt 建议把 CAA 写在注册域本身(例如 example.org 或 mysite.co.uk),这样会覆盖该域和它下面的子域。CA 会从要签发的那个名字开始,向父域逐级查找,在遇到的第一组 CAA 记录处停下。因此子域可以覆盖父域的策略。例如父域只允许 Let's Encrypt,而 api.example.org 另写一组 CAA,就可以单独允许云厂商为这个子域签发。
CAA 查询会跟随 CNAME,和其他 DNS 查询一样。Let's Encrypt 举例:若 community.example.org 是指向 example.forum.com 的 CNAME,CA 会尊重目标名字上的 CAA。Cloudflare 文档也写:CNAME 目标域上的 CAA 同样生效,即便你自己的域没有 CAA。核对签发失败时,要把 CNAME 链上的每一跳都查一遍。
记录的基本格式,Let's Encrypt 写成:
CAA <flags> <tag> <value>
- flags:整数。文档说几乎总是写
0,表示未设置标志位。写成128表示打开 critical bit:如果 CA 不认识这条记录的 tag,就应立即停止、不得签发。 - tag:常见是
issue或issuewild。RFC 8659 另外定义了iodef,用来指定违规报告地址。阿里云、腾讯云帮助中心的字段表里,这三种 tag 都有列出。 - value:最多包含一个 CA 标识(Let's Encrypt 的标识是
letsencrypt.org),后面可以跟分号分隔的参数。

RFC 8659 对 issue 还写过:可以只写 tag、不写颁发机构域名,用来请求不要为该名字签发。实际写法以 RFC 里的语法为准,改之前先在测试环境或预发布环境验证。
3. issue、issuewild、iodef,以及多 CA 怎么写
Let's Encrypt 对两个签发类 tag 的说明是:
issue:控制该域及子域的证书签发。在没有其他记录时,它同时管普通证书(如example.org)和通配符证书(如*.example.org)。多数情况下只需要这一条。issuewild:只控制通配符证书。只有当你希望通配符和普通证书的权限不一样时,才需要单独写issuewild。
RFC 8659 把优先级写得更清楚:处理非通配符请求时,必须忽略 issuewild;处理通配符请求时,只要相关记录集里至少有一条 issuewild,就必须忽略全部 issue。所以只写了 issue "letsencrypt.org" 时,Let's Encrypt 仍可为通配符签发;一旦另外出现任何 issuewild,通配符就只看 issuewild,不再沿用 issue。
多 CA 的写法是:同一 tag 可以有多条,效果是累加的。Let's Encrypt 写:只要其中任意一条允许该 CA 签发,它就被允许。常见做法是每家 CA 各写一条 issue,需要单独控制通配符时再为每家补 issuewild。只允许一家、却要在另一家申请或续期,就会签发失败。
iodef 用来指定报告地址。RFC 8659 允许的 URL 方案是 mailto:、http 或 https。阿里云帮助中心的示例是再加一条 0 iodef "mailto:你的邮箱"。这只影响违规报告,不会单独构成签发授权。
Let's Encrypt 的标识域名是 letsencrypt.org,写在其 CP/CPS 第 4.2.1 节。文档里的简单例子是:
example.org CAA 0 issue "letsencrypt.org"
还可以在 value 里加参数,例如 ;validationmethods=dns-01,或 ;accounturi= 后跟 ACME 账户 URI,用来限制验证方式和账户。Let's Encrypt 认识的验证方法字符串是 http-01、dns-01、tls-alpn-01。这些参数只有在对应 CA 认识并正确处理时才有效。

4. 签发失败时,先用 dig 看实际解析到什么
面板里保存成功,不等于 CA 查询时看到的就是这组记录。TTL 还没过、权威服务器与递归缓存不一致、记录写在了子域或 CNAME 目标上,都会让两边对不上。阿里云帮助中心给出的查询命令是:
dig 域名 caa
Cloudflare 文档常用:
dig example.com caa +short
腾讯云文档的写法是 dig 域名名称 CAA,并提醒:在云解析控制台添加时,线路类型要选「默认」,否则部分 CA 无法完成认证。TTL、线路这些字段以你当时控制台说明为准,本文不编默认秒数以外的面板值。腾讯云文档把 600 秒列为该项常用默认值,是否沿用由你自己决定。
核对时建议按这个顺序:
- 对要申请证书的名字查
CAA,再查它的父域,直到注册域;若有 CNAME,对每一跳再查一次。 - 看应答状态是不是
NOERROR。空的 ANSWER 且状态正常,通常表示没有 CAA 限制。 - 列出所有
issue/issuewild的 value,确认里面有你正在用的那家 CA 的标识(Let's Encrypt 是letsencrypt.org)。多 CA 时,每家都要有对应记录。 - 若申请的是通配符证书,单独看有没有
issuewild:有的话,只认issuewild,不要以为issue已经够了。 - 改完记录后,再查一次权威应答和你本机递归解析,避免只盯着控制台列表。

dig 域名 caa 检测解析结果。文中 symantec 等名称为文档示例,实际应填写你使用的 CA 标识(官网文档截图,查询日期 2026-11-14)若域名走 Cloudflare,并且开启了 Universal SSL,再在区域里添加任何 CAA 记录时,Cloudflare 文档写:它会自动补上合作 CA 的记录,以便继续签发 Universal 证书;这些自动记录不会出现在 Cloudflare 控制台,要用 dig 才能看到。文档在查询日列出的例子包括 pki.goog、letsencrypt.org、ssl.com、sectigo.com 的 issue 与 issuewild,并明确写:该列表并不穷尽,其他 CA 可能因运营需要被加入或移除。Advanced Certificate Manager 不适用这套自动添加规则。子域放在 Cloudflare、父域在别家 DNS 时,还要确认父域没有把 Cloudflare 合作 CA 排除在外,或父域本身没有 CAA。

dig example.com caa +short 查看;列表会变化,以文档当时说明为准(官网文档截图,查询日期 2026-11-14)5. 日志里的 CAA 错误,不一定是你写错了记录
Let's Encrypt 会在每次签发前查询 CAA。文档强调:即使域名没有设置任何 CAA 记录,查询过程本身也可能出错。一旦出错,CA 无法判断是不是其实存在一条禁止签发的记录,因此不会签发。
收到 CAA 相关错误时,文档建议先在 staging 环境多试几次,区分是暂时故障还是长期问题。若长期失败,需要向 DNS 服务商提单,或考虑更换服务商。有的服务商会回复「我们不支持 CAA 记录」。Let's Encrypt 的说明是:服务商不必「专门支持」CAA,只需对包括 CAA 在内的未知查询类型返回 NOERROR(可以是空应答)。对无法识别的类型返回 NOTIMP 等,违反 RFC 1035,应当修复。
文档单独列出两类常见现象:
- SERVFAIL:最常见的原因是 DNSSEC 验证失败,可先用 dnsviz.net 一类工具检查。也可能是权威服务器只在空应答上签名出错(CAA 应答经常是空的),或在未启用 DNSSEC 时对未知类型返回了
NOTIMP,或权威服务器本身故障。 - Timeout:权威服务器多次重试仍不答复。常见原因是前面的防火墙丢掉了未知类型的 DNS 查询,需要服务商检查防火墙配置。
站点已经在用证书、这次只是续期失败时,处理顺序仍是先看清报错类型,再决定改 CAA、修 DNSSEC 或回滚旧证书保访问,步骤见续期失败与回滚。证书和回源、CDN 缓存一起出问题的排查,见网站 404 / 502 排查清单。

6. 可照着点的短清单
- 用
dig 你的域名 caa(可加+short)查看实际记录,不要只看控制台列表;有 CNAME 时把目标域一并查询。 - 确认正在使用的 CA 标识已出现在相应的
issue或issuewild里。Let's Encrypt 写letsencrypt.org。换 CA 或同时用两家时,为每家各加一条,效果是累加而不是互相覆盖。 - 申请通配符证书前,先看有没有
issuewild:有一条,就只认issuewild。 - 应答是
SERVFAIL或一直超时,按 Let's Encrypt 文档先查 DNSSEC、未知类型是否返回NOERROR、防火墙是否丢掉 CAA 查询,而不是先改一条新的 issue。 - 若在 Cloudflare 上开启了 Universal SSL 并自己写了 CAA,用
dig确认自动补上的合作 CA 是否还在;不要只在控制台里找这些记录。 - 在腾讯云解析添加时,按官方文档把线路类型设为「默认」。
改记录后,以权威解析和 CA 实际查询到的结果为准。服务商文档里的示例 CA 名称、合作 CA 列表都会变,不要把旧示例原样抄进生产环境。
相关阅读
- 域名解析入门:A、CNAME、MX、TXT 与 TTL
- 网站 HTTPS 免费证书怎么申请和自动续期
- 免费 SSL 续期失败怎么办:Let's Encrypt 常见报错与回滚
- 独立站发信进垃圾箱:SPF、DKIM 与 DMARC 记录怎么核对
- 网站 404 / 502 排查清单:DNS、证书、源站与 CDN 缓存怎么核对
- 网站可用性监控:HTTP 探测、证书到期与告警渠道怎么设置
官方来源(查询日期 2026-11-14,北京时间)
- RFC 8659(RFC Editor)
- Let's Encrypt CAA 文档(标注更新于 2026-10-04)
- Cloudflare《Add CAA records》(标注更新于 2026-04-21)
- 阿里云帮助中心:使用 CAA 记录防止域名证书劫持
- 腾讯云:云解析 DNS CAA 记录(标注更新于 2026-05-22)、使用 CAA 记录防止错误签发 SSL 证书(标注更新于 2025-12-30)