isitdns? wiki/Security/CAA: who is allowed to issue your certs
Security

CAA: who is allowed to issue your certs

Asks which certificate authorities are authorized to issue for a name.

 dig @1.1.1.1 letsencrypt.org CAA
; <<>> DiG 9.20.11-0ubuntu0.2-Ubuntu <<>> @1.1.1.1 letsencrypt.org CAA
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10314
;; flags: qr rd ra; QUERY: 1, ANSWER: 12, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;letsencrypt.org. IN CAA
;; ANSWER SECTION:
letsencrypt.org. 300 IN CAA 0 issue "amazon.com"
letsencrypt.org. 300 IN CAA 0 issue "letsencrypt.org"
letsencrypt.org. 300 IN CAA 0 issue "pki.goog"
letsencrypt.org. 300 IN CAA 0 issue "sectigo.com"
letsencrypt.org. 300 IN CAA 0 issue "ssl.com"
letsencrypt.org. 300 IN CAA 0 issue "www.digicert.com"
letsencrypt.org. 300 IN CAA 0 issuewild "amazon.com"
letsencrypt.org. 300 IN CAA 0 issuewild "letsencrypt.org"
letsencrypt.org. 300 IN CAA 0 issuewild "pki.goog"
letsencrypt.org. 300 IN CAA 0 issuewild "sectigo.com"
letsencrypt.org. 300 IN CAA 0 issuewild "ssl.com"
letsencrypt.org. 300 IN CAA 0 issuewild "www.digicert.com"
;; Query time: 32 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Mon Sep 14 17:44:03 CDT 2026
;; MSG SIZE rcvd: 430

GO NOERROR and issue records naming the allowed authorities

NO GO NOERROR with no answer, which sends the CA up to the parent name to look there (RFC 8659 §3)

run this query in the dig tool →

what each part of this output means →

What to publish#

CAA record reference has the record shape and field syntax. The policy decision is this checklist:

  • [ ] issue for every CA you use. Nothing here means any public CA is authorized to issue (RFC 8659 §1).
  • [ ] issuewild too, if you issue wildcards. Without it, issue covers wildcards by default (RFC 8659 §4.3).
  • [ ] iodef (optional) for misissuance reports. CAs SHOULD send them, not MUST, and only to a mailto: or https: address (CA/Browser Forum Baseline Requirements §4.2.2.1).
  • [ ] accounturi= (optional) to pin issuance to one ACME account (RFC 8657); any CA can implement it, ACME or not.

Check it#

Query a public resolver directly, past any local cache, with the dig example on the CAA record reference. Confirm DNSSEC covers the answer too (DNSSEC) since the Baseline Requirements have required CAs to DNSSEC-validate their own CAA lookup since 2026-03-15, and to treat a validation failure as deny, never as permission (BR §4.2.2.2.2, §4.2.2.2.5).

Gotchas that bite#

  • The tree climb. No CAA at the exact name sends the CA up to each parent until it finds one or runs out of tree (RFC 8659 §3). A record on the wrong label does nothing.
  • CNAME targets. CAA is checked at the CNAME target, not the CNAMEd name; if the target has none, the climb continues at the original name's own parents, never the target's (RFC 8659 §3). A subdomain CNAMEd to a SaaS provider inherits that provider's policy, not yours.
  • Managed DNS providers can widen your policy. Some providers auto-inject CAA records for their own edge-certificate partners once a zone has any CAA record of its own, for example Cloudflare's documented set. Your effective policy is the union of what you wrote and what the provider added; check what your provider does before trusting your own records as the whole picture.
  • issue ";" at the apex blocks the whole zone, renewals included (RFC 8659 §4.2). Test it on a subdomain first.
  • Checked once, at issuance. Checking CAA has been mandatory for publicly trusted CAs since 8 September 2017 (CA/Browser Forum Ballot 187). Browsers never check it, and tightening your policy does not invalidate certs that already exist (RFC 8659 §1).

See also#