RFC 8659 | CAA | November 2019 |
Hallam-Baker, et al. | Standards Track | [Page] |
The Certification Authority Authorization (CAA) DNS Resource Recordallows a DNS domain name holder to specify one or more CertificationAuthorities (CAs) authorized to issue certificates for that domain name.CAA Resource Records allow a public CA toimplement additional controls to reduce the risk of unintendedcertificate mis-issue. This document defines the syntax of the CAArecord and rules for processing CAA records by CAs.¶
This document obsoletes RFC 6844.¶
This is an Internet Standards Track document.¶
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.¶
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained athttps://www.rfc-editor.org/info/rfc8659.¶
Copyright (c) 2019 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.¶
The Certification Authority Authorization (CAA) DNS Resource Recordallows a DNS domain name holder to specify the CertificationAuthorities (CAs) authorized to issue certificates for that domain name.Publication of CAA Resource Records allows a public CA to implement additional controls to reduce the risk ofunintended certificate mis-issue.¶
Like the TLSA record defined in DNS-Based Authentication of NamedEntities (DANE)[RFC6698], CAA records are used as a part of amechanism for checking PKIX[RFC6698] certificate data. The distinctionbetween CAA and TLSA is that CAA records specify anauthorization control to be performed by a CA beforeissuing a certificate and TLSA records specify a verificationcontrol to be performed by a Relying Party after the certificate isissued.¶
Conformance with a published CAA record is a necessary, but notsufficient, condition for the issuance of a certificate.¶
Criteria for the inclusion of embedded trust anchor certificates inapplications are outside the scope of this document. Typically, suchcriteria require the CA to publish a Certification Practices Statement(CPS) that specifies how the requirements of the Certificate Policy(CP) are achieved. It is also common for a CA to engage anindependent third-party auditor to prepare an annual audit statementof its performance against its CPS.¶
A set of CAA records describes only current grants of authority toissue certificates for the corresponding DNS domain name. Sincecertificates are valid for a period of time, it is possiblethat a certificate that is not conformant with the CAA recordscurrently published was conformant with the CAA records published atthe time that the certificate was issued. Relying PartiesMUST NOT use CAA records as part of certificate validation.¶
CAA recordsMAY be used by Certificate Evaluators as a possibleindicator of a security policy violation. Such useSHOULD take intoaccount the possibility that published CAA records changed betweenthe time a certificate was issued and the time at which thecertificate was observed by the Certificate Evaluator.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL","SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED","NOT RECOMMENDED", "MAY", and "OPTIONAL" in this documentare to be interpreted as described in BCP 14[RFC2119][RFC8174] when,and only when, they appear in all capitals, as shown here.¶
The following terms are used in this document:¶
Before issuing a certificate, a compliant CAMUST check forpublication of a Relevant RRset. If such an RRsetexists, a CAMUST NOT issue a certificate unless the CAdetermines that either (1) the certificate request is consistent withthe applicable CAA RRset or (2) an exception specifiedin the relevant CP or CPS applies. If the Relevant RRset for an FQDNor Wildcard Domain Name contains no Property Tags that restrict issuance(for instance, if it contains only iodef Property Tags or only PropertyTags unrecognized by the CA), CAA does not restrict issuance.¶
A certificate requestMAY specify more than one FQDN andMAYspecify Wildcard Domain Names. IssuersMUST verify authorization for allthe FQDNs and Wildcard Domain Names specified in the request.¶
The search for a CAA RRset climbs the DNS name tree from thespecified label up to, but not including, the DNS root "."until a CAA RRset is found.¶
Given a request for a specific FQDN X or a request for a Wildcard DomainName *.X, the Relevant RRset RelevantCAASet(X) is determined as follows (in pseudocode):¶
RelevantCAASet(domain): while domain is not ".": if CAA(domain) is not Empty: return CAA(domain) domain = Parent(domain) return Empty¶
CAA("X.Y.Z.") = Empty; domain = Parent("X.Y.Z.") = "Y.Z." CAA("Y.Z.") = Empty; domain = Parent("Y.Z.") = "Z." CAA("Z.") = Empty; domain = Parent("Z.") = "." return Empty¶
CAA("A.B.C.") = Empty; domain = Parent("A.B.C.") = "B.C." CAA("B.C.") = "issue example.com" return "issue example.com"¶
A CAA RR contains a single Property consisting of a tag‑valuepair. An FQDNMAY have multiple CAA RRs associated with it, and agiven Property TagMAY be specified more than once across those RRs.¶
The RDATA section for a CAA RR contains one Property. A Propertyconsists of the following:¶
+0-1-2-3-4-5-6-7-|0-1-2-3-4-5-6-7-|| Flags | Tag Length = n |+----------------|----------------+...+---------------+| Tag char 0 | Tag char 1 |...| Tag char n-1 |+----------------|----------------+...+---------------++----------------|----------------+.....+----------------+| Value byte 0 | Value byte 1 |.....| Value byte m-1 |+----------------|----------------+.....+----------------+¶
Where n is the length specified in the Tag Length field and m is thenumber of remaining octets in the Value field. They are related by(m = d - n - 2)where d is the length of the RDATA section.¶
The fields are defined as follows:¶
One octet containing the following field:¶
Note that according to the conventions set out in[RFC1035], bit 0is the Most Significant Bit and bit 7 is the Least SignificantBit. Thus, according to those conventions, the Flags value 1 means that bit 7 isset, while a value of 128 means that bit 0 is set.¶
All other bit positions are reserved for future use.¶
To ensure compatibility with future extensions to CAA, DNS recordscompliant with this version of the CAA specificationMUST clear(set to "0") all reserved flag bits. Applications that interpretCAA recordsMUST ignore the value of all reserved flag bits.¶
TagsMAY contain ASCII characters "a" through "z", "A"through "Z", and the numbers 0 through 9. TagsMUST NOTcontain any other characters. Matching of tags is caseinsensitive.¶
Tags submitted for registration by IANAMUST NOT contain anycharacters other than the (lowercase) ASCII characters "a"through "z" and the numbers 0 through 9.¶
The length of the Value field is specified implicitly as theremaining length of the enclosing RDATA section.¶
The canonical presentation format of the CAA record is:¶
CAA <flags> <tag> <value>¶
Where:¶
If the issue Property Tag is present in the Relevant RRset for anFQDN, it is a request that Issuers:¶
The CAA issue Property Value has the following sub‑syntax (specifiedin ABNF as per[RFC5234]).¶
issue-value = *WSP [issuer-domain-name *WSP] [";" *WSP [parameters *WSP]]issuer-domain-name = label *("." label)label = (ALPHA / DIGIT) *( *("-") (ALPHA / DIGIT))parameters = (parameter *WSP ";" *WSP parameters) / parameterparameter = tag *WSP "=" *WSP valuetag = (ALPHA / DIGIT) *( *("-") (ALPHA / DIGIT))value = *(%x21-3A / %x3C-7E)¶
For consistency with other aspects of DNS administration, FQDNvalues are specified in letter-digit-hyphen Label (LDH-Label) form.¶
The following CAA RRset requests that nocertificates be issued for the FQDN "certs.example.com" by anyIssuer other than ca1.example.net or ca2.example.org.¶
certs.example.com CAA 0 issue "ca1.example.net"certs.example.com CAA 0 issue "ca2.example.org"¶
Because the presence of an issue Property Tag in the Relevant RRsetfor an FQDN restricts issuance, FQDN owners can use an issueProperty Tag with no issuer-domain-name to request no issuance.¶
For example, the following RRset requests that nocertificates be issued for the FQDN "nocerts.example.com" by anyIssuer.¶
nocerts.example.com CAA 0 issue ";"¶
An issue Property Tag where the issue-value does not match the ABNFgrammarMUST be treated the same as one specifying an empty issuer‑domain-name. Forexample, the following malformed CAA RRset forbids issuance:¶
malformed.example.com CAA 0 issue "%%%%%"¶
CAA authorizations are additive; thus, the result of specifying bothan empty issuer-domain-name and a non-empty issuer-domain-name is thesame as specifying just the non-empty issuer-domain-name.¶
An IssuerMAY choose to specify parameters that furtherconstrain the issue of certificates by that Issuer -- for example,specifying that certificates are to be subject to specific validationpolicies, billed to certain accounts, or issued under specific trustanchors.¶
For example, if ca1.example.net has requested that its customeraccount.example.com specify their account number "230123" in eachof the customer's CAA records using the (CA-defined) "account" parameter,it would look like this:¶
account.example.com CAA 0 issue "ca1.example.net; account=230123"¶
The semantics of parameters to the issue Property Tag are determined bythe Issuer alone.¶
The issuewild Property Tag has the same syntax and semantics as the issueProperty Tag except that it only grants authorization toissue certificates that specify a Wildcard Domain Name and each issuewildProperty takes precedence over each issue Property when specified.Specifically:¶
Each issuewild PropertyMUST be ignored when processing a request foran FQDN that is not a Wildcard Domain Name.¶
If at least one issuewild Property is specified in the RelevantRRset for a Wildcard Domain Name, each issue PropertyMUSTbe ignored when processing a request for that Wildcard Domain Name.¶
For example, the following RRset requests thatonlyca1.example.net issue certificates for "wild.example.com" or"sub.wild.example.com", and thatonly ca2.example.org issue certificates for"*.wild.example.com" or "*.sub.wild.example.com". Note that this presumesthat there are no CAA RRs for sub.wild.example.com.¶
wild.example.com CAA 0 issue "ca1.example.net"wild.example.com CAA 0 issuewild "ca2.example.org"¶
The following RRset requests thatonly ca1.example.net issuecertificates for "wild2.example.com", "*.wild2.example.com", or"*.sub.wild2.example.com".¶
wild2.example.com CAA 0 issue "ca1.example.net"¶
The following RRset requests thatonly ca2.example.org issuecertificates for "*.wild3.example.com" or "*.sub.wild3.example.com". Itdoes not permit any Issuer to issue for "wild3.example.com" or"sub.wild3.example.com".¶
wild3.example.com CAA 0 issuewild "ca2.example.org"wild3.example.com CAA 0 issue ";"¶
The following RRset requests thatonly ca2.example.org issuecertificates for "*.wild3.example.com" or "*.sub.wild3.example.com". Itpermits any Issuer to issue for "wild3.example.com" or "sub.wild3.example.com".¶
wild3.example.com CAA 0 issuewild "ca2.example.org"¶
The iodef Property specifies a means of reporting certificate issuerequests or cases of certificate issue for domains for which the Propertyappears in the Relevant RRset, when those requests or issuancesviolate the security policy of the Issuer or the FQDN holder.¶
The Incident Object Description Exchange Format (IODEF)[RFC7970] isused to present the incident report in machine-readable form.¶
The iodef Property Tag takes a URL as its Property Value. The URL scheme typedetermines the method used for reporting:¶
These are the only supported URL schemes.¶
The following RRset specifiesthat reports may be made by means of email with the IODEF data as anattachment, a web service[RFC6546], or both:¶
report.example.com CAA 0 issue "ca1.example.net"report.example.com CAA 0 iodef "mailto:security@example.com"report.example.com CAA 0 iodef "https://iodef.example.com/"¶
The critical flag is intended to permit future versions of CAA tointroduce new semantics thatMUST be understood for correctprocessing of the record, preventing conforming CAs that do notrecognize the new semantics from issuing certificates for theindicated FQDNs.¶
In the following example, the Property with a Property Tag of"tbs" is flagged as critical.Neither the ca1.example.net CA nor any other Issuer is authorized toissue for "new.example.com" (or any other domains for which this isthe Relevant RRset) unless the Issuer has implemented theprocessing rules for the "tbs" Property Tag.¶
new.example.com CAA 0 issue "ca1.example.net"new.example.com CAA 128 tbs "Unknown"¶
CAA records assert a security policy that the holder of an FQDNwishes to be observed by Issuers. The effectiveness ofCAA records as an access control mechanism is thus dependent onobservance of CAA constraints by Issuers.¶
The objective of the CAA record properties described in this documentis to reduce the risk of certificate mis-issue rather than avoidreliance on a certificate that has been mis-issued. DANE[RFC6698]describes a mechanism for avoiding reliance on mis-issuedcertificates.¶
The use of DNSSEC to authenticate CAA RRs is stronglyRECOMMENDED but notrequired. An IssuerMUST NOT issue certificates if doing so wouldconflict with the Relevant RRset, irrespective ofwhether the corresponding DNS records are signed.¶
DNSSEC provides a proof of non-existence for both DNS FQDNs andRRsets within FQDNs. DNSSEC verification thus enables an Issuer todetermine whether the answer to a CAA record query (1) is empty becausethe RRset is empty or (2) is non-empty but the response has beensuppressed.¶
The use of DNSSEC allows an Issuer to acquire and archive a proof thatthey were authorized to issue certificates for the FQDN.Verification of such archives may be an audit requirement to verifyCAA record-processing compliance. Publication of such archives maybe a transparency requirement to verify CAA record-processingcompliance.¶
CAA records offer CAs a cost-effective means of mitigating the riskof certificate mis-issue: the cost of implementing CAA checks is verysmall, and the potential costs of a mis-issue event include theremoval of an embedded trust anchor.¶
The use of CAA records does not prevent mis-issue by an authorizedCA, i.e., a CA that is authorized to issuecertificates for the FQDN in question by CAA records.¶
FQDN holdersSHOULD verify that the CAs they authorize toissue certificates for their FQDNs employ appropriate controls toensure that certificates are issued only to authorized parties withintheir organization.¶
Such controls are most appropriately determined by the FQDNholder and the authorized CA(s) directly and are thus outside the scope ofthis document.¶
Suppression of a CAA record or insertion of a bogus CAA recordcould enable an attacker to obtain a certificate from an Issuer thatwas not authorized to issue for an affected FQDN.¶
Where possible, IssuersSHOULD perform DNSSEC validation to detectmissing or modified CAA RRsets.¶
In cases where DNSSEC is not deployed for a corresponding FQDN, anIssuerSHOULD attempt to mitigate this risk by employing appropriateDNS security controls. For example, all portions of the DNS lookupprocessSHOULD be performed against the authoritative nameserver.Data cached by third partiesMUST NOT be relied on as the sole source of DNS CAAinformation butMAY be used tosupport additional anti‑spoofing or anti-suppression controls.¶
Introduction of a malformed or malicious CAA RR could, in theory,enable a Denial-of-Service (DoS) attack. This could happen by modification ofauthoritative DNS records or by spoofing inflight DNS responses.¶
This specific threat is not considered to add significantly to therisk of running an insecure DNS service.¶
An attacker could, in principle, perform a DoS attack against anIssuer by requesting a certificate with a maliciously long DNS name.In practice, the DNS protocol imposes a maximum name length, and CAAprocessing does not exacerbate the existing need to mitigate DoSattacks to any meaningful degree.¶
A CA could make use of the critical flag totrick customers into publishing records that prevent competing CAsfrom issuing certificates even though thecustomer intends to authorize multiple providers. This could happen if thecustomers were setting CAA records based on data provided by the CA rather thangenerating those records themselves.¶
In practice, such an attack would be of minimal effect, since anycompetent competitor that found itself unable to issue certificatesdue to lack of support for a Property marked critical shouldinvestigate the cause and report the reason to the customer. Thecustomer will thus discover that they had been deceived.¶
A CA implementing CAA may find that they receive errors looking up CAA records.The following are some common causes of such errors, so that CAs may provideguidance to their subscribers on fixing the underlying problems.¶
Some middleboxes -- in particular, anti-DDoS appliances -- may be configured todrop DNS packets of unknown types, or they may start dropping such packets whenthey consider themselves under attack. This generally manifests as a timed-outDNS query or as a SERVFAIL at a local recursive resolver.¶
Some authoritative nameservers respond with REJECTED or NOTIMP when queriedfor an RR type they do not recognize. At least one authoritativeresolver produces a malformed response (with the QR (Query/Response) bit set to "0") when queriedfor unknown RR types. Per[RFC1034], the correct response RCODE forunknown RR types is 0 ("No error condition").¶
Some FQDN administrators make the contents of a subdomain unresolvable on thepublic Internet by delegating that subdomain to a nameserver whose IP address isprivate. A CA processing CAA records for such subdomains will receiveSERVFAIL from its recursive resolver. The CAMAY interpret that as preventingissuance. FQDN administrators wishing to issue certificates for privateFQDNsSHOULD use split-horizon DNS with a publicly available nameserver, sothat CAs can receive a valid, empty CAA response for those FQDNs.¶
Queries for CAA RRs are different from most DNS RR types, becausea signed, empty response to a query for CAA RRs is meaningfully differentfrom a bogus response. A signed, empty response indicates that there isdefinitely no CAA policy set at a given label. A bogus response may meaneither a misconfigured zone or an attacker tampering with records. DNSSECimplementations may have bugs with signatures on empty responses that gounnoticed, because for more common RR types like A and AAAA,the difference to an end user between empty and bogus is irrelevant; theyboth mean a site is unavailable.¶
In particular, at least two authoritative resolvers that implement live signinghad bugs when returning empty RRsets for DNSSEC-signed zones, incombination with mixed-case queries. Mixed‑case queries, also known as DNS 0x20,are used by some recursive resolvers to increase resilience against DNSpoisoning attacks. DNSSEC-signing authoritative resolvers are expected to copythe same capitalization from the query into their ANSWER section but also to sign theresponse as if they had used all lowercase. In particular, PowerDNS versionsprior to 4.0.4 had this bug.¶
This document obsoletes[RFC6844]. The most important change is tothe "Certification Authority Processing" section (now called"Relevant Resource Record Set" (Section 3), as noted below).[RFC6844] specified analgorithm that performed DNS tree-climbing not only on the FQDNbeing processed but also on all CNAMEs and DNAMEs encountered alongthe way. This made the processing algorithm very inefficient when usedon FQDNs that utilize many CNAMEs and would have made it difficultfor hosting providers to set CAA policies on their own FQDNs withoutsetting potentially unwanted CAA policies on their customers' FQDNs.This document specifies a simplified processing algorithm that onlyperforms tree-climbing on the FQDN being processed, and it leaves theprocessing of CNAMEs and DNAMEs up to the CA's recursive resolver.¶
This document also includes a "Deployment Considerations" section(Section 6) detailing experience gained with practical deployment of CAA enforcementamong CAs in the WebPKI.¶
This document clarifies the ABNF grammar for the issue and issuewild tagsand resolves some inconsistencies with the document text. In particular,it specifies that parameters are separated with semicolons. It also allowshyphens in Property Tags.¶
This document also clarifies the processing of a CAA RRset that is not emptybut that does not contain any issue or issuewild tags.¶
This document removes the section titled "The CAA RR Type," merging it with"Mechanism" (Section 4) because the definitions were mainly duplicates. It moves the "Use ofDNS Security" section into Security Considerations (Section 5). It renames "CertificationAuthority Processing" to "Relevant Resource Record Set" (Section 3) and emphasizes the useof that term to more clearly define which domains are affected by a given RRset.¶
IANA has added this document asa reference for the "Certification Authority Restriction Flags" and"Certification Authority Restriction Properties" registries and updatedreferences to[RFC6844] within those registries to refer instead tothis document. IANA has also updated the CAA TYPE in the "Resource Record (RR) TYPEs" subregistry of the "Domain Name System (DNS) Parameters" registry with a referenceto this document.¶
The authors would like to thank the following people who contributedto the design and documentation of this work item: Corey Bonnell, Chris Evans,Stephen Farrell, Jeff Hodges, Paul Hoffman, Tim Hollebeek, Stephen Kent, AdamLangley, Ben Laurie, James Manger, Chris Palmer, Scott Schmit, Sean Turner, andBen Wilson.¶