CAA in the wild.

How 765,900 of the most visited domains restrict certificate issuance today — and what breaks when CAA meets the certificates that were actually issued. Data: CrUX August 2026 top 1M, checked 4 October 2026.

Why now

A CAA record (RFC 8659) names the certificate authorities allowed to issue for a domain. On its own it restricts which CA may issue, not who may ask: anyone who completes a DNS-01 or HTTP-01 challenge for the name still obtains a certificate from the allowed CA. RFC 8657 closed that gap in 2019 with two parameters — accounturi pins issuance to one ACME account, validationmethods limits the challenge types — but CAs were free to ignore them.

That changes on 15 March 2027. CA/Browser Forum ballot SC-098v2 (vote 4–11 May 2026; 22 certificate issuers in favour, one against; Apple, Google and Mozilla in favour) requires every publicly trusted CA to process both parameters. Let's Encrypt and a few others already do. The other date that bites first is closer: the 200-day validity limit applies to certificates issued since 15 March 2026, so renewals done on an annual reminder started expiring on 1 October 2026.

We wanted to know how the top of the web uses CAA before the mandate: how many domains publish records at all, who they allow, how many already pin accounts, how many records are broken — and how often the CAA set excludes the CA that is, in fact, issuing. ctlogs.dev indexes every public Certificate Transparency log, so the last question can be answered per domain.

Adoption

Of 765,900 registrable domains behind the CrUX August 2026 top million origins, 42,207 (5.5 %) publish CAA records at the apex. Adoption climbs steeply with popularity:

CrUX rankdomainswith CAAsharewith accounturiCAA excludes an issuing CA
top 1k82217220.9 %149
top 10k7,5691,04613.8 %1203
top 100k72,2466,4869.0 %131,164
top 1M685,26334,5035.0 %614,497

Among the domains with CAA: 76 (0.2 %) use accounturi and 77 (0.2 %) use validationmethods. 29,718 (70.4 %) say anything about wildcards with issuewild; 6,203 (14.7 %) give CAs a reporting address with iodef. 23 domains publish issue ";" — no CA may issue at all. 7,149 (16.9 %) of the CAA publishers are in DNSSEC-signed zones; for the rest a CA's resolver has no way to notice a spoofed CAA answer, which is also the assumption RFC 8657 makes.

In 64 cases 1.1.1.1 and 8.8.8.8 returned different CAA sets for the same name at the time of the check — propagation in progress, or a provider serving inconsistent data. It is the situation behind a recurring story: “my panel shows no CAA, yet my CA says one exists.” What the resolver returns is what the CA checks, not what the dashboard shows.

Who is allowed

The identifiers most often named in issue and issuewild records (a domain can name several):

identifierdomainsshare of CAA publishers
letsencrypt.org36,28986.0 %
digicert.com28,88068.4 %
pki.goog25,89961.4 %
comodoca.com22,35853.0 %
ssl.com21,63051.2 %
sectigo.com10,08823.9 %
amazon.com7,80918.5 %
globalsign.com6,87816.3 %
amazonaws.com3,7188.8 %
amazontrust.com3,4288.1 %
awstrust.com3,0057.1 %
godaddy.com2,3615.6 %
certum.pl1,1642.8 %
harica.gr6861.6 %
entrust.net6401.5 %

For comparison, the CAs holding certificates for these domains in the window (by CA owner, any host under the domain):

CAdomains with a certificateshare of all domains
Let's Encrypt616,58080.5 %
Google Trust Services427,56255.8 %
Sectigo Limited196,01125.6 %
Amazon131,95617.2 %
DigiCert Inc94,94312.4 %
SSL Corporation85,70811.2 %
GoDaddy.com, Inc.41,9935.5 %
GlobalSign nv-sa37,1004.8 %
GoDaddy.com30,5684.0 %
ZeroSSL GmbH27,1733.5 %
Asseco Data Systems S.A.6,9290.9 %
Starfield Technologies, Inc.5,5470.7 %
Certainly4,7920.6 %
GoGetSSL3,2190.4 %
Japan Registry Services Co., Ltd.3,1080.4 %

What is broken

Every record set was run through the same lint as the CAA checker. Counted per domain with CAA:

findingmeaningdomainsshare
IODEF_MISSINGno iodef record36,00485.3 %
DNSSEC_UNSIGNEDzone not DNSSEC-signed35,05883.1 %
NO_ISSUEWILD_WITH_WILDCARDSwildcard certificates but no issuewild record7,47317.7 %
CONFLICT_ISSUERa CA with a certificate in the window is not allowed5,91314.0 %
ISSUE_UNKNOWN_IDENTidentifier no public CA recognizes (typo?)9802.3 %
CNAME_AT_APEXapex is a CNAME3360.8 %
IODEF_BAD_URLiodef is not mailto:/http:/https:2890.7 %
VALUE_SYNTAXrecord value does not parse2820.7 %
TAG_UNKNOWNunknown tag (ignored by CAs)2770.7 %
ISSUE_EMPTY_WITH_OTHERSissue ";" next to named CAs1600.4 %
FLAG_RESERVED_BITSreserved flag bits set1450.3 %
TAG_NONSTANDARDcontactemail / contactphone tags1420.3 %
DUPLICATE_RECORDduplicate records940.2 %
PARAM_UNKNOWNparameter not defined by RFC 8657680.2 %
RESOLVER_DISAGREE1.1.1.1 and 8.8.8.8 returned different sets640.2 %
LOOKUP_FAILEDa resolver gave no definite answer240.1 %
MIXED_RESTRICTED_UNRESTRICTEDrestricted and unrestricted record for the same CA130.0 %
FLAG_CRITICAL_UNKNOWN_TAGcritical flag on an unknown tag — blocks every CA70.0 %

Three of these deserve attention beyond their counts. FLAG_CRITICAL_UNKNOWN_TAG means no CA may issue for the domain at all, by the letter of RFC 8659 — usually a typo in the tag combined with flag 128. PARAM_DUP_ACCOUNTURI makes the record unsatisfiable: the named CA can never issue under it, so the domain has locked itself out of its own CA. MIXED_RESTRICTED_UNRESTRICTED is the quiet one: a carefully written record with accounturi sits next to an older plain record for the same CA, and the plain record still allows any account and any method. Records are additive; the weakest one wins.

CAA versus reality

5,913 domains (14.0 % of those with CAA) have a CAA set that does not allow a CA holding a certificate for them in the window — valid now, or expired within the last 90 days.

CT does not record when a CAA record was published, so each case is one of three things: the record is newer than the certificate (the domain changed CAs and the old certificate is still valid), the certificate came from a CDN or hosting provider that issues on the customer's behalf through its own CA, or the issuance was not expected. The first two are harmless until renewal time; the CDN case is the common way a tightened CAA breaks a site weeks later. The CAs most often on the excluded side:

excluded CAdomains
Amazon1,968
Let's Encrypt1,647
Google Trust Services1,492
Sectigo Limited449
GoDaddy.com, Inc.444
DigiCert Inc359
GlobalSign nv-sa255
GoDaddy.com236
SSL Corporation219
Certainly135
ZeroSSL GmbH110
eMudhra Technologies Limited99
Starfield Technologies, Inc.42
Asseco Data Systems S.A.28
Hellenic Academic and Research Institutions CA27

2,871 of the conflicts (48.6 %) exclude Google Trust Services, Let's Encrypt or SSL.com — the CAs large CDNs issue through. A CAA that names only the CA your own tooling uses silently fights the certificates your CDN obtains for you.

How to set it up

Three lines cover most sites. Replace the account URL with your own (certbot keeps it in /etc/letsencrypt/accounts/…/regr.json, acme.sh in ca/…/account.json, lego in accounts/…/account.json):

example.com.  IN CAA 0 issue "letsencrypt.org; accounturi=https://acme-v02.api.letsencrypt.org/acme/acct/123456; validationmethods=dns-01"
example.com.  IN CAA 0 issuewild ";"
example.com.  IN CAA 0 iodef "mailto:security@example.com"

Before publishing, look at who has been issuing for the domain: a CDN, a mail provider or a SaaS vendor with a custom domain may need its CA listed too. The checker shows that list, lints the records you have, and generates a set like the one above — the generator runs in the browser and never sends the account URI anywhere. Until March 2027 the parameters protect you only at CAs that already implement RFC 8657; after it, at every public CA.

Method and caveats

Want to know when a certificate is issued for your domains, by any CA? CAlert sends an alert for every new certificate. Published 4 October 2026 by ctlogs.dev.