CAA Records: Locking Down Certificate Issuance

How to use DNS to control which certificate authorities are allowed to issue certificates for your domain.

What CAA records do

A Certification Authority Authorization (CAA) record is a DNS record type (RFC 8659) that specifies which certificate authorities are permitted to issue TLS certificates for a domain. Before issuing a certificate, CAs are required by the CA/Browser Forum Baseline Requirements to check the CAA records for the requested domain and refuse to issue if the CA is not listed.

Without any CAA records, any trusted CA can issue a certificate for your domain. There are over 100 CAs trusted by major browsers. A misconfigured or compromised CA — or one that was deceived by a convincing domain validation request — could issue a certificate for your domain that your organization did not request. CAA records reduce this attack surface to only the CAs you explicitly authorize.

Certificate misissuance has happened in practice: CAs have issued certificates for domains they should not have (DV validation mistakes, organizational errors, BGP-based domain validation attacks). CAA is one layer of defense against misissuance reaching production use.

Record syntax

A CAA record has three fields: a flag, a tag, and a value.

example.com. 3600 IN CAA 0 issue "letsencrypt.org"

Multiple CAA records

You can authorize multiple CAs by publishing multiple CAA records with the issue tag — one record per CA. All authorized CAs form an allowlist:

example.com. CAA 0 issue "letsencrypt.org"
example.com. CAA 0 issue "digicert.com"
example.com. CAA 0 iodef "mailto:security@example.com"

To block all issuance (effectively making your domain un-certifiable by any CA), publish a single issue record with an empty string value:

example.com. CAA 0 issue ";"

This is useful for domains that should never have certificates issued — internal-only domains, parked domains, or domains where you manage certificates entirely out-of-band. Be cautious: this will block Let's Encrypt auto-renewal as well.

To allow regular certificates from a CA but block wildcard issuance entirely:

example.com. CAA 0 issue "letsencrypt.org"
example.com. CAA 0 issuewild ";"

Common setups

When in doubt, query your existing certificates to find which CA issued them (visible in the certificate's issuer field), then look up that CA's CAA policy domain from their Certificate Policy document or their public documentation.

CAA and DNSSEC

CAA records are DNS records and inherit all of DNS's weaknesses. Without DNSSEC, an attacker who can manipulate DNS responses between the CA and your authoritative server can substitute their own CAA records (or return NXDOMAIN to imply no restriction). CAs are required to check CAA but the check is only as trustworthy as the DNS infrastructure.

DNSSEC signs CAA records cryptographically. A CA performing DNSSEC-aware validation can verify that the CAA response is authentic and unmodified. Some CAs (particularly those performing Multi-Perspective Issuance Corroboration) query from multiple vantage points, making BGP-based DNS poisoning harder — but DNSSEC eliminates the attack entirely.

If you are publishing CAA records for security purposes (not just compliance), DNSSEC on your zone is the necessary complement.

How to verify

Query your CAA records directly:

example.com CAA

Verify:

A common mistake is CAA records that look correct but block auto-renewal: if your ACME client is Let's Encrypt and your CAA record says issue "digicert.com" with no Let's Encrypt entry, your next certificate renewal will fail silently until the certificate expires. Check that the CA name in your CAA record matches the issuer in your currently active certificate.

Relationship to DANE

CAA and DANE (TLSA records) are complementary but operate at different layers. CAA restricts who can issue a certificate — it is a pre-issuance control. DANE pins which specific certificate or key is valid for a hostname — it is a post-issuance control enforced by clients at connection time. A domain with both CAA and DANE provides defense in depth: CAA reduces the chance of a rogue certificate being issued, and DANE ensures that even if one is issued, clients that support DANE will not accept it. DANE requires DNSSEC to be meaningful.

Check your domain's CAA records

Queries CAA records and cross-checks against the certificate issuer.