Guide

CAA Records. Control Who Issues Your Certificates

A two-line DNS record that stops any certificate authority you haven't approved from issuing certs for your domain.

7 min read·Updated Jun 10, 2026
TL;DR
A CAA record is an allowlist of certificate authorities for your domain. Two lines of DNS, 0 issue "letsencrypt.org" plus an iodef reporting address, and every other CA on earth must refuse to issue certs in your name. The one gotcha: update the record before you switch CAs or add a CDN, or renewals fail.

What is a CAA record?

There are dozens of publicly trusted certificate authorities, and by default any of them can issue a certificate for your domain to anyone who passes domain validation. Validation usually means proving control of a DNS record or an HTTP path, which is exactly what an attacker has after hijacking your DNS, your registrar account, or a subdomain pointing at an abandoned cloud resource.

A CAA record (RFC 8659) shrinks that attack surface to the CAs you actually use. Since 2017, checking CAA before issuance is mandatory for every CA in the browser trust programs, this isn't a hint, it's an enforced rule of the ecosystem. If your record names only letsencrypt.org, a validation request at any other CA must be refused automatically.

Why it matters

  • It blocks rogue issuance: a fraudulent cert for your domain enables convincing phishing sites and man-in-the-middle interception of your traffic, and of your inbound mail if MX hosts are covered.
  • It limits blast radius: if a subdomain takeover or DNS slip happens, the attacker can only attempt issuance at CAs you've already approved, which are the ones whose issuance logs you're presumably watching.
  • It's nearly free: one or two DNS records, no certificates to buy, no software to run, and no effect on normal operation when configured to match your real CA.

How to check it

dig +short example.com CAA
# Expect something like:
# 0 issue "letsencrypt.org"
# 0 iodef "mailto:security@example.com"

Empty output means no CAA record, any CA may issue. Also check that what's listed matches the CA that actually issues your current certs (look at your cert's issuer in the browser, or use our SSL checker).

Anatomy of a CAA record

Each record is flags tag "value":

  • issue, which CA may issue regular certificates. The value is the CA's identifying domain: letsencrypt.org, digicert.com, sectigo.com, pki.goog (Google Trust Services), amazon.com (AWS ACM).
  • issuewild, separately controls wildcard certificates. If absent, issue rules apply to wildcards too.
  • iodef, where CAs should report violation attempts: a mailto: address or HTTPS endpoint.
  • The flags byte is almost always 0. 128 marks the record critical.
  • 0 issue ";", the special "nobody may issue" value, useful for parked domains that should never have certs.

Setting it up, step by step

  1. Inventory your certificate sources. Web server certs, CDN-managed certs (Cloudflare provisions through Google Trust Services, Let's Encrypt, and others), load balancer certs (AWS ACM), mail server certs. Each may use a different CA.
  2. Publish an issue record for each CA in use, plus an iodef:
    example.com.  CAA  0 issue "letsencrypt.org"
    example.com.  CAA  0 issue "pki.goog"
    example.com.  CAA  0 iodef "mailto:security@example.com"
  3. Wait one full certificate renewal cycle before trusting the config. A successful renewal proves your allowlist matches reality.
  4. Optionally add issuewild ";" if you never use wildcard certs, removing a whole class of over-broad issuance.
Watch out
If you're behind Cloudflare or another CDN that manages certs for you, check their documentation before publishing CAA. Cloudflare, for instance, needs several CAs permitted for its Universal SSL, and will add the records automatically if it runs your DNS. A CAA record that omits your CDN's CA breaks the next certificate rotation, which you'll discover as an outage weeks later.

Common mistakes

  1. Forgetting a CA you actually use. The classic: allowing only digicert.com while your load balancer renews through ACM. Everything works until the renewal window.
  2. Switching CAs without updating CAA first. Update DNS, wait for TTL, then request from the new CA.
  3. Assuming CAA revokes existing certs. It only governs future issuance. Certs issued before you published the record remain valid until expiry.
  4. No iodef. You're turning down free intelligence about attempted mis-issuance against your domain.
  5. Publishing CAA on a spoofable zone. Without DNSSEC, an attacker who can forge your DNS answers can hide your CAA record from the validating CA. CAA + DNSSEC together close the loop.

Monitoring CAA going forward

CAA failures are time bombs rather than explosions: the record drifts out of sync with your actual CA usage today, and the impact lands at the next renewal, weeks or months later, as a confusing "issuance refused" error or a silently expired cert.

DomainsDoc checks your CAA records on every scan and alerts you when they change unexpectedly or conflict with the CA observed issuing your live certificate, alongside SSL expiry, DNSSEC, and the rest of your domain's health, so renewal-time surprises get caught while they're still cheap. Add your domain to start, plans on the pricing page.

Frequently asked questions

What is a CAA record in plain English?
A CAA (Certification Authority Authorization) record lists which certificate authorities are allowed to issue TLS certificates for your domain. Every publicly trusted CA is required to check it before issuing, if your record says only Let's Encrypt may issue, every other CA must refuse.
What happens if I have no CAA record?
Any publicly trusted CA may issue certificates for your domain. That is the default state of most of the internet, and it works, but it means an attacker who can pass domain validation at any one of dozens of CAs can get a certificate in your name.
Can a CAA record break my certificate renewals?
Yes, and this is the most common CAA incident. If you publish a CAA record allowing only one CA and later switch providers (or your CDN provisions certs through a different CA), issuance fails at renewal time. The fix is updating the record before switching, and monitoring for failed renewals.
What does the 0 in `0 issue "letsencrypt.org"` mean?
It is the flags byte. 0 means non-critical; 128 sets the critical bit, telling CAs to refuse issuance if they encounter a property tag they do not understand. For normal setups, 0 is what you want.
Do CAA records protect against a compromised CA?
Partially. CAA is checked by the CA at issuance time, so it stops honest CAs from mis-issuing and raises the bar significantly. A fully compromised or malicious CA could ignore it, but issuance against CAA is a baseline-requirements violation that gets CAs distrusted. Pair CAA with DNSSEC to prevent attackers from spoofing the record itself.
Do subdomains need their own CAA records?
CAA lookups climb the tree: a check for api.example.com uses the CAA at api.example.com if present, otherwise example.com. So one record at the apex covers everything unless you deliberately publish different rules on a subdomain.
Stop reading. Start monitoring.

Continuous SPF, DKIM, DMARC, blacklist, SSL, and uptime checks. Alerts the moment something breaks.

Start free
Keep reading