RFC 8659 PROPOSED STANDARD DNS · CERTIFICATES · SECURITY

DNS CAA record: DNS Certification Authority Authorization (CAA) Resource Record

A DNS record that tells certificate authorities which of them may issue certificates for a domain.

On rfc-editor.org ↗
PUBLISHED
November 2019
AUTHORS
P. Hallam-Baker, R. Stradling, J. Hoffman-Andrews
STREAM
IETF
BUILDS ON
RFC 6844 — DNS CAA
FLAGS FIELD SIZE
1 octet
ISSUER CRITICAL FLAG
Bit 0, a flags value of 128
RESERVED FLAG BITS
Must be cleared to 0 and ignored
TAG LENGTH
At least 1 octet
VALUE LENGTH RELATION
m = d - n - 2
IODEF URL SCHEMES
mailto, http and https only
DOI
10.17487/RFC8659
ERRATA
Reported errata

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Internet Engineering Task Force (IETF)                   P. Hallam-Baker
Request for Comments: 8659                          Venture Cryptography
Obsoletes: 6844                                             R. Stradling
Category: Standards Track                                        Sectigo
ISSN: 2070-1721                                       J. Hoffman-Andrews
                                                           Let's Encrypt
                                                           November 2019


    DNS Certification Authority Authorization (CAA) Resource Record

Abstract

   The Certification Authority Authorization (CAA) DNS Resource Record
   allows a DNS domain name holder to specify one or more Certification
   Authorities (CAs) authorized to issue certificates for that domain
   name.  CAA Resource Records allow a public CA to implement additional
   controls to reduce the risk of unintended certificate mis-issue.
   This document defines the syntax of the CAA record and rules for
   processing CAA records by CAs.

   This document obsoletes RFC 6844.

Status of This Memo

   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 at
   https://www.rfc-editor.org/info/rfc8659.

Copyright Notice

   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.

Table of Contents

   1.  Introduction
   2.  Definitions
     2.1.  Requirements Language
     2.2.  Defined Terms
   3.  Relevant Resource Record Set
   4.  Mechanism
     4.1.  Syntax
       4.1.1.  Canonical Presentation Format
     4.2.  CAA issue Property
     4.3.  CAA issuewild Property
     4.4.  CAA iodef Property
     4.5.  Critical Flag
   5.  Security Considerations
     5.1.  Use of DNS Security
     5.2.  Non-compliance by Certification Authority
     5.3.  Mis-Issue by Authorized Certification Authority
     5.4.  Suppression or Spoofing of CAA Records
     5.5.  Denial of Service
     5.6.  Abuse of the Critical Flag
   6.  Deployment Considerations
     6.1.  Blocked Queries or Responses
     6.2.  Rejected Queries and Malformed Responses
     6.3.  Delegation to Private Nameservers
     6.4.  Bogus DNSSEC Responses
   7.  Differences from RFC 6844
   8.  IANA Considerations
   9.  References
     9.1.  Normative References
     9.2.  Informative References
   Acknowledgements
   Authors' Addresses

1.  Introduction

   The Certification Authority Authorization (CAA) DNS Resource Record
   allows a DNS domain name holder to specify the Certification
   Authorities (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 of unintended
   certificate mis-issue.

   Like the TLSA record defined in DNS-Based Authentication of Named
   Entities (DANE) [RFC6698], CAA records are used as a part of a
   mechanism for checking PKIX [RFC6698] certificate data.  The
   distinction between CAA and TLSA is that CAA records specify an
   authorization control to be performed by a CA before issuing a
   certificate and TLSA records specify a verification control to be
   performed by a Relying Party after the certificate is issued.

   Conformance with a published CAA record is a necessary, but not
   sufficient, condition for the issuance of a certificate.

   Criteria for the inclusion of embedded trust anchor certificates in
   applications are outside the scope of this document.  Typically, such
   criteria 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 an independent third-party auditor to prepare an annual audit
   statement of its performance against its CPS.

   A set of CAA records describes only current grants of authority to
   issue certificates for the corresponding DNS domain name.  Since
   certificates are valid for a period of time, it is possible that a
   certificate that is not conformant with the CAA records currently
   published was conformant with the CAA records published at the time
   that the certificate was issued.  Relying Parties MUST NOT use CAA
   records as part of certificate validation.

   CAA records MAY be used by Certificate Evaluators as a possible
   indicator of a security policy violation.  Such use SHOULD take into
   account the possibility that published CAA records changed between
   the time a certificate was issued and the time at which the
   certificate was observed by the Certificate Evaluator.

2.  Definitions

2.1.  Requirements Language

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in
   BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

2.2.  Defined Terms

   The following terms are used in this document:

   Certificate:  An X.509 Certificate, as specified in [RFC5280].

   Certificate Evaluator:  A party other than a Relying Party that
      evaluates the trustworthiness of certificates issued by
      Certification Authorities.

   Certification Authority (CA):  An Issuer that issues certificates in
      accordance with a specified Certificate Policy.

   Certificate Policy (CP):  Specifies the criteria that a CA undertakes
      to meet in its issue of certificates.  See [RFC3647].

   Certification Practices Statement (CPS):  Specifies the means by
      which the criteria of the CP are met.  In most cases, this will be
      the document against which the operations of the CA are audited.
      See [RFC3647].

   Domain Name:  The label assigned to a node in the Domain Name System.

   Domain Name System (DNS):  The Internet naming system specified in
      [RFC1034] and [RFC1035].

   DNS Security (DNSSEC):  Extensions to the DNS that provide
      authentication services as specified in [RFC4033], [RFC4034],
      [RFC4035], [RFC5155], and any revisions to these specifications.

   Fully Qualified Domain Name (FQDN):  A domain name that includes the
      labels of all superior nodes in the DNS.

   Issuer:  An entity that issues certificates.  See [RFC5280].

   Property:  The tag-value portion of a CAA Resource Record.

   Property Tag:  The tag portion of a CAA Resource Record.

   Property Value:  The value portion of a CAA Resource Record.

   Relevant Resource Record Set (Relevant RRset):  A set of CAA Resource
      Records resulting from applying the algorithm in Section 3 to a
      specific FQDN or Wildcard Domain Name.

   Relying Party:  A party that makes use of an application whose
      operation depends on the use of a certificate for making a
      security decision.  See [RFC5280].

   Resource Record (RR):  A particular entry in the DNS, including the
      owner name, class, type, time to live, and data, as defined in
      [RFC1034] and [RFC2181].

   Resource Record Set (RRset):  A set of RRs of a particular owner
      name, class, and type.  The time to live on all RRs within an
      RRset is always the same, but the data may be different among RRs
      in the RRset.

   Wildcard Domain Name:  A domain name consisting of a single asterisk
      character followed by a single "full stop" character ("*.")
      followed by an FQDN.

3.  Relevant Resource Record Set

   Before issuing a certificate, a compliant CA MUST check for
   publication of a Relevant RRset.  If such an RRset exists, a CA
   MUST NOT issue a certificate unless the CA determines that either
   (1) the certificate request is consistent with the applicable CAA
   RRset or (2) an exception specified in the relevant CP or CPS
   applies.  If the Relevant RRset for an FQDN or Wildcard Domain Name
   contains no Property Tags that restrict issuance (for instance, if it
   contains only iodef Property Tags or only Property Tags unrecognized
   by the CA), CAA does not restrict issuance.

   A certificate request MAY specify more than one FQDN and MAY specify
   Wildcard Domain Names.  Issuers MUST verify authorization for all the
   FQDNs and Wildcard Domain Names specified in the request.

   The search for a CAA RRset climbs the DNS name tree from the
   specified 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
   Domain Name *.X, the Relevant RRset RelevantCAASet(X) is determined
   as follows (in pseudocode):

      Let CAA(X) be the RRset returned by performing a CAA record query
      for the FQDN X, according to the lookup algorithm specified in
      Section 4.3.2 of [RFC1034] (in particular, chasing aliases).  Let
      Parent(X) be the FQDN produced by removing the leftmost label of
      X.

      RelevantCAASet(domain):
        while domain is not ".":
          if CAA(domain) is not Empty:
            return CAA(domain)
          domain = Parent(domain)
        return Empty

      For example, processing CAA for the FQDN "X.Y.Z" where there are
      no CAA records at any level in the tree RelevantCAASet would have
      the following steps:

      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

      Processing CAA for the FQDN "A.B.C" where there is a CAA record
      "issue example.com" at "B.C" would terminate early upon finding
      the CAA record:

      CAA("A.B.C.") = Empty; domain = Parent("A.B.C.") = "B.C."
      CAA("B.C.")   = "issue example.com"
      return "issue example.com"

4.  Mechanism

4.1.  Syntax

   A CAA RR contains a single Property consisting of a tag-value pair.
   An FQDN MAY have multiple CAA RRs associated with it, and a given
   Property Tag MAY be specified more than once across those RRs.

   The RDATA section for a CAA RR contains one Property.  A Property
   consists 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 the
   number 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:

   Flags:  One octet containing the following field:

      Bit 0, Issuer Critical Flag:  If the value is set to "1", the
         Property is critical.  A CA MUST NOT issue certificates for any
         FQDN if the Relevant RRset for that FQDN contains a CAA
         critical Property for an unknown or unsupported Property Tag.

   Note that according to the conventions set out in [RFC1035], bit 0 is
   the Most Significant Bit and bit 7 is the Least Significant Bit.
   Thus, according to those conventions, the Flags value 1 means that
   bit 7 is set, 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 records
   compliant with this version of the CAA specification MUST clear (set
   to "0") all reserved flag bits.  Applications that interpret CAA
   records MUST ignore the value of all reserved flag bits.

   Tag Length:  A single octet containing an unsigned integer specifying
      the tag length in octets.  The tag length MUST be at least 1.

   Tag:  The Property identifier -- a sequence of ASCII characters.

   Tags MAY contain ASCII characters "a" through "z", "A" through "Z",
   and the numbers 0 through 9.  Tags MUST NOT contain any other
   characters.  Matching of tags is case insensitive.

   Tags submitted for registration by IANA MUST NOT contain any
   characters other than the (lowercase) ASCII characters "a" through
   "z" and the numbers 0 through 9.

   Value:  A sequence of octets representing the Property Value.
      Property Values are encoded as binary values and MAY employ
      sub-formats.

   The length of the Value field is specified implicitly as the
   remaining length of the enclosing RDATA section.

4.1.1.  Canonical Presentation Format

   The canonical presentation format of the CAA record is:

      CAA <flags> <tag> <value>

   Where:

   Flags:  An unsigned integer between 0 and 255.

   Tag:  A non-zero-length sequence of ASCII letters and numbers in
      lowercase.

   Value:  The Value field, expressed as either (1) a contiguous set of
      characters without interior spaces or (2) a quoted string.  See
      the <character-string> format specified in [RFC1035], Section 5.1,
      but note that the Value field contains no length byte and is not
      limited to 255 characters.

4.2.  CAA issue Property

   If the issue Property Tag is present in the Relevant RRset for an
   FQDN, it is a request that Issuers:

   1.  Perform CAA issue restriction processing for the FQDN, and

   2.  Grant authorization to issue certificates containing that FQDN to
       the holder of the issuer-domain-name or a party acting under the
       explicit authority of the holder of the issuer-domain-name.

   The CAA issue Property Value has the following sub-syntax (specified
   in 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) / parameter
   parameter = tag *WSP "=" *WSP value
   tag = (ALPHA / DIGIT) *( *("-") (ALPHA / DIGIT))
   value = *(%x21-3A / %x3C-7E)

   For consistency with other aspects of DNS administration, FQDN values
   are specified in letter-digit-hyphen Label (LDH-Label) form.

   The following CAA RRset requests that no certificates be issued for
   the FQDN "certs.example.com" by any Issuer 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 RRset
   for an FQDN restricts issuance, FQDN owners can use an issue Property
   Tag with no issuer-domain-name to request no issuance.

   For example, the following RRset requests that no certificates be
   issued for the FQDN "nocerts.example.com" by any Issuer.

   nocerts.example.com       CAA 0 issue ";"

   An issue Property Tag where the issue-value does not match the ABNF
   grammar MUST be treated the same as one specifying an empty
   issuer-domain-name.  For example, the following malformed CAA RRset
   forbids issuance:

   malformed.example.com     CAA 0 issue "%%%%%"

   CAA authorizations are additive; thus, the result of specifying both
   an empty issuer-domain-name and a non-empty issuer-domain-name is the
   same as specifying just the non-empty issuer-domain-name.

   An Issuer MAY choose to specify parameters that further constrain the
   issue of certificates by that Issuer -- for example, specifying that
   certificates are to be subject to specific validation policies,
   billed to certain accounts, or issued under specific trust anchors.

   For example, if ca1.example.net has requested that its customer
   account.example.com specify their account number "230123" in each of
   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
   by the Issuer alone.

4.3.  CAA issuewild Property

   The issuewild Property Tag has the same syntax and semantics as the
   issue Property Tag except that it only grants authorization to issue
   certificates that specify a Wildcard Domain Name and each issuewild
   Property takes precedence over each issue Property when specified.
   Specifically:

   Each issuewild Property MUST be ignored when processing a request for
   an FQDN that is not a Wildcard Domain Name.

   If at least one issuewild Property is specified in the Relevant RRset
   for a Wildcard Domain Name, each issue Property MUST be ignored when
   processing a request for that Wildcard Domain Name.

   For example, the following RRset requests that _only_ ca1.example.net
   issue certificates for "wild.example.com" or "sub.wild.example.com",
   and that _only_ ca2.example.org issue certificates for
   "*.wild.example.com" or "*.sub.wild.example.com".  Note that this
   presumes that 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 that _only_ ca1.example.net issue
   certificates 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 that _only_ ca2.example.org issue
   certificates for "*.wild3.example.com" or "*.sub.wild3.example.com".
   It does 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 that _only_ ca2.example.org issue
   certificates for "*.wild3.example.com" or "*.sub.wild3.example.com".
   It permits any Issuer to issue for "wild3.example.com" or
   "sub.wild3.example.com".

   wild3.example.com         CAA 0 issuewild "ca2.example.org"

4.4.  CAA iodef Property

   The iodef Property specifies a means of reporting certificate issue
   requests or cases of certificate issue for domains for which the
   Property appears in the Relevant RRset, when those requests or
   issuances violate the security policy of the Issuer or the FQDN
   holder.

   The Incident Object Description Exchange Format (IODEF) [RFC7970] is
   used to present the incident report in machine-readable form.

   The iodef Property Tag takes a URL as its Property Value.  The URL
   scheme type determines the method used for reporting:

   mailto:  The IODEF report is reported as a MIME email attachment to
      an SMTP email that is submitted to the mail address specified.
      The mail message sent SHOULD contain a brief text message to alert
      the recipient to the nature of the attachment.

   http or https:  The IODEF report is submitted as a web service
      request to the HTTP address specified using the protocol specified
      in [RFC6546].

   These are the only supported URL schemes.

   The following RRset specifies that reports may be made by means of
   email with the IODEF data as an attachment, 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/"

4.5.  Critical Flag

   The critical flag is intended to permit future versions of CAA to
   introduce new semantics that MUST be understood for correct
   processing of the record, preventing conforming CAs that do not
   recognize the new semantics from issuing certificates for the
   indicated 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 to issue for "new.example.com" (or any other
   domains for which this is the Relevant RRset) unless the Issuer has
   implemented the processing rules for the "tbs" Property Tag.

   new.example.com       CAA 0 issue "ca1.example.net"
   new.example.com       CAA 128 tbs "Unknown"

5.  Security Considerations

   CAA records assert a security policy that the holder of an FQDN
   wishes to be observed by Issuers.  The effectiveness of CAA records
   as an access control mechanism is thus dependent on observance of CAA
   constraints by Issuers.

   The objective of the CAA record properties described in this document
   is to reduce the risk of certificate mis-issue rather than avoid
   reliance on a certificate that has been mis-issued.  DANE [RFC6698]
   describes a mechanism for avoiding reliance on mis-issued
   certificates.

5.1.  Use of DNS Security

   The use of DNSSEC to authenticate CAA RRs is strongly RECOMMENDED but
   not required.  An Issuer MUST NOT issue certificates if doing so
   would conflict with the Relevant RRset, irrespective of whether the
   corresponding DNS records are signed.

   DNSSEC provides a proof of non-existence for both DNS FQDNs and
   RRsets within FQDNs.  DNSSEC verification thus enables an Issuer to
   determine whether the answer to a CAA record query (1) is empty
   because the RRset is empty or (2) is non-empty but the response has
   been suppressed.

   The use of DNSSEC allows an Issuer to acquire and archive a proof
   that they were authorized to issue certificates for the FQDN.
   Verification of such archives may be an audit requirement to verify
   CAA record-processing compliance.  Publication of such archives may
   be a transparency requirement to verify CAA record-processing
   compliance.

5.2.  Non-compliance by Certification Authority

   CAA records offer CAs a cost-effective means of mitigating the risk
   of certificate mis-issue: the cost of implementing CAA checks is very
   small, and the potential costs of a mis-issue event include the
   removal of an embedded trust anchor.

5.3.  Mis-Issue by Authorized Certification Authority

   The use of CAA records does not prevent mis-issue by an authorized
   CA, i.e., a CA that is authorized to issue certificates for the FQDN
   in question by CAA records.

   FQDN holders SHOULD verify that the CAs they authorize to issue
   certificates for their FQDNs employ appropriate controls to ensure
   that certificates are issued only to authorized parties within their
   organization.

   Such controls are most appropriately determined by the FQDN holder
   and the authorized CA(s) directly and are thus outside the scope of
   this document.

5.4.  Suppression or Spoofing of CAA Records

   Suppression of a CAA record or insertion of a bogus CAA record could
   enable an attacker to obtain a certificate from an Issuer that was
   not authorized to issue for an affected FQDN.

   Where possible, Issuers SHOULD perform DNSSEC validation to detect
   missing or modified CAA RRsets.

   In cases where DNSSEC is not deployed for a corresponding FQDN, an
   Issuer SHOULD attempt to mitigate this risk by employing appropriate
   DNS security controls.  For example, all portions of the DNS lookup
   process SHOULD be performed against the authoritative nameserver.
   Data cached by third parties MUST NOT be relied on as the sole source
   of DNS CAA information but MAY be used to support additional
   anti-spoofing or anti-suppression controls.

5.5.  Denial of Service

   Introduction of a malformed or malicious CAA RR could, in theory,
   enable a Denial-of-Service (DoS) attack.  This could happen by
   modification of authoritative DNS records or by spoofing inflight DNS
   responses.

   This specific threat is not considered to add significantly to the
   risk of running an insecure DNS service.

   An attacker could, in principle, perform a DoS attack against an
   Issuer by requesting a certificate with a maliciously long DNS name.
   In practice, the DNS protocol imposes a maximum name length, and CAA
   processing does not exacerbate the existing need to mitigate DoS
   attacks to any meaningful degree.

5.6.  Abuse of the Critical Flag

   A CA could make use of the critical flag to trick customers into
   publishing records that prevent competing CAs from issuing
   certificates even though the customer intends to authorize multiple
   providers.  This could happen if the customers were setting CAA
   records based on data provided by the CA rather than generating those
   records themselves.

   In practice, such an attack would be of minimal effect, since any
   competent competitor that found itself unable to issue certificates
   due to lack of support for a Property marked critical should
   investigate the cause and report the reason to the customer.  The
   customer will thus discover that they had been deceived.

6.  Deployment Considerations

   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 provide guidance to their subscribers on fixing the
   underlying problems.

6.1.  Blocked Queries or Responses

   Some middleboxes -- in particular, anti-DDoS appliances -- may be
   configured to drop DNS packets of unknown types, or they may start
   dropping such packets when they consider themselves under attack.
   This generally manifests as a timed-out DNS query or as a SERVFAIL at
   a local recursive resolver.

6.2.  Rejected Queries and Malformed Responses

   Some authoritative nameservers respond with REJECTED or NOTIMP when
   queried for an RR type they do not recognize.  At least one
   authoritative resolver produces a malformed response (with the QR
   (Query/Response) bit set to "0") when queried for unknown RR types.
   Per [RFC1034], the correct response RCODE for unknown RR types is 0
   ("No error condition").

6.3.  Delegation to Private Nameservers

   Some FQDN administrators make the contents of a subdomain
   unresolvable on the public Internet by delegating that subdomain to a
   nameserver whose IP address is private.  A CA processing CAA records
   for such subdomains will receive SERVFAIL from its recursive
   resolver.  The CA MAY interpret that as preventing issuance.  FQDN
   administrators wishing to issue certificates for private FQDNs SHOULD
   use split-horizon DNS with a publicly available nameserver, so that
   CAs can receive a valid, empty CAA response for those FQDNs.

6.4.  Bogus DNSSEC Responses

   Queries for CAA RRs are different from most DNS RR types, because a
   signed, empty response to a query for CAA RRs is meaningfully
   different from a bogus response.  A signed, empty response indicates
   that there is definitely no CAA policy set at a given label.  A bogus
   response may mean either a misconfigured zone or an attacker
   tampering with records.  DNSSEC implementations may have bugs with
   signatures on empty responses that go unnoticed, because for more
   common RR types like A and AAAA, the difference to an end user
   between empty and bogus is irrelevant; they both mean a site is
   unavailable.

   In particular, at least two authoritative resolvers that implement
   live signing had bugs when returning empty RRsets for DNSSEC-signed
   zones, in combination with mixed-case queries.  Mixed-case queries,
   also known as DNS 0x20, are used by some recursive resolvers to
   increase resilience against DNS poisoning attacks.  DNSSEC-signing
   authoritative resolvers are expected to copy the same capitalization
   from the query into their ANSWER section but also to sign the
   response as if they had used all lowercase.  In particular, PowerDNS
   versions prior to 4.0.4 had this bug.

7.  Differences from RFC 6844

   This document obsoletes [RFC6844].  The most important change is to
   the "Certification Authority Processing" section (now called
   "Relevant Resource Record Set" (Section 3), as noted below).
   [RFC6844] specified an algorithm that performed DNS tree-climbing not
   only on the FQDN being processed but also on all CNAMEs and DNAMEs
   encountered along the way.  This made the processing algorithm very
   inefficient when used on FQDNs that utilize many CNAMEs and would
   have made it difficult for hosting providers to set CAA policies on
   their own FQDNs without setting potentially unwanted CAA policies on
   their customers' FQDNs.  This document specifies a simplified
   processing algorithm that only performs tree-climbing on the FQDN
   being processed, and it leaves the processing 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 enforcement among CAs in the WebPKI.

   This document clarifies the ABNF grammar for the issue and issuewild
   tags and resolves some inconsistencies with the document text.  In
   particular, it specifies that parameters are separated with
   semicolons.  It also allows hyphens in Property Tags.

   This document also clarifies the processing of a CAA RRset that is
   not empty but 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 of DNS Security" section into Security
   Considerations (Section 5).  It renames "Certification Authority
   Processing" to "Relevant Resource Record Set" (Section 3) and
   emphasizes the use of that term to more clearly define which domains
   are affected by a given RRset.

8.  IANA Considerations

   IANA has added this document as a reference for the "Certification
   Authority Restriction Flags" and "Certification Authority Restriction
   Properties" registries and updated references to [RFC6844] within
   those registries to refer instead to this 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
   reference to this document.

9.  References

9.1.  Normative References

   [RFC1034]  Mockapetris, P., "Domain names - concepts and facilities",
              STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987,
              <https://www.rfc-editor.org/info/rfc1034>.

   [RFC1035]  Mockapetris, P., "Domain names - implementation and
              specification", STD 13, RFC 1035, DOI 10.17487/RFC1035,
              November 1987, <https://www.rfc-editor.org/info/rfc1035>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC2181]  Elz, R. and R. Bush, "Clarifications to the DNS
              Specification", RFC 2181, DOI 10.17487/RFC2181, July 1997,
              <https://www.rfc-editor.org/info/rfc2181>.

   [RFC4033]  Arends, R., Austein, R., Larson, M., Massey, D., and S.
              Rose, "DNS Security Introduction and Requirements",
              RFC 4033, DOI 10.17487/RFC4033, March 2005,
              <https://www.rfc-editor.org/info/rfc4033>.

   [RFC4034]  Arends, R., Austein, R., Larson, M., Massey, D., and S.
              Rose, "Resource Records for the DNS Security Extensions",
              RFC 4034, DOI 10.17487/RFC4034, March 2005,
              <https://www.rfc-editor.org/info/rfc4034>.

   [RFC4035]  Arends, R., Austein, R., Larson, M., Massey, D., and S.
              Rose, "Protocol Modifications for the DNS Security
              Extensions", RFC 4035, DOI 10.17487/RFC4035, March 2005,
              <https://www.rfc-editor.org/info/rfc4035>.

   [RFC5155]  Laurie, B., Sisson, G., Arends, R., and D. Blacka, "DNS
              Security (DNSSEC) Hashed Authenticated Denial of
              Existence", RFC 5155, DOI 10.17487/RFC5155, March 2008,
              <https://www.rfc-editor.org/info/rfc5155>.

   [RFC5234]  Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax
              Specifications: ABNF", STD 68, RFC 5234,
              DOI 10.17487/RFC5234, January 2008,
              <https://www.rfc-editor.org/info/rfc5234>.

   [RFC5280]  Cooper, D., Santesson, S., Farrell, S., Boeyen, S.,
              Housley, R., and W. Polk, "Internet X.509 Public Key
              Infrastructure Certificate and Certificate Revocation List
              (CRL) Profile", RFC 5280, DOI 10.17487/RFC5280, May 2008,
              <https://www.rfc-editor.org/info/rfc5280>.

   [RFC6546]  Trammell, B., "Transport of Real-time Inter-network
              Defense (RID) Messages over HTTP/TLS", RFC 6546,
              DOI 10.17487/RFC6546, April 2012,
              <https://www.rfc-editor.org/info/rfc6546>.

   [RFC6698]  Hoffman, P. and J. Schlyter, "The DNS-Based Authentication
              of Named Entities (DANE) Transport Layer Security (TLS)
              Protocol: TLSA", RFC 6698, DOI 10.17487/RFC6698, August
              2012, <https://www.rfc-editor.org/info/rfc6698>.

   [RFC6844]  Hallam-Baker, P. and R. Stradling, "DNS Certification
              Authority Authorization (CAA) Resource Record", RFC 6844,
              DOI 10.17487/RFC6844, January 2013,
              <https://www.rfc-editor.org/info/rfc6844>.

   [RFC7970]  Danyliw, R., "The Incident Object Description Exchange
              Format Version 2", RFC 7970, DOI 10.17487/RFC7970,
              November 2016, <https://www.rfc-editor.org/info/rfc7970>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

9.2.  Informative References

   [RFC3647]  Chokhani, S., Ford, W., Sabett, R., Merrill, C., and S.
              Wu, "Internet X.509 Public Key Infrastructure Certificate
              Policy and Certification Practices Framework", RFC 3647,
              DOI 10.17487/RFC3647, November 2003,
              <https://www.rfc-editor.org/info/rfc3647>.

Acknowledgements

   The authors would like to thank the following people who contributed
   to the design and documentation of this work item: Corey Bonnell,
   Chris Evans, Stephen Farrell, Jeff Hodges, Paul Hoffman, Tim
   Hollebeek, Stephen Kent, Adam Langley, Ben Laurie, James Manger,
   Chris Palmer, Scott Schmit, Sean Turner, and Ben Wilson.

Authors' Addresses

   Phillip Hallam-Baker
   Venture Cryptography

   Email: phill@hallambaker.com


   Rob Stradling
   Sectigo Ltd.

   Email: rob@sectigo.com


   Jacob Hoffman-Andrews
   Let's Encrypt

   Email: jsha@letsencrypt.org

ISO Plain Language

On this page
PROBLEMAny of the hundreds of public certificate authorities can issue a certificate for any domain name, which means a mistake or a compromise at one of them can produce a certificate for someone else's site.
MECHANISMThe document defines a CAA resource record. A domain holder publishes it in the DNS to name the certificate authorities allowed to issue for that name, and a compliant authority must check the record before it issues anything.
WHY IT MATTERSRFC 8659 replaces RFC 6844 with a simpler rule for finding the record that applies, a clearer grammar for the issue and issuewild tags, and a new section on the errors CAs hit when looking up CAA records in practice.

§1What a CAA Record Does

The Certification Authority Authorization (CAA) DNS Resource Record lets a DNS domain name holder specify the Certification Authorities (CAs) authorized to issue certificates for that domain name. Publishing CAA Resource Records allows a public CA to implement additional controls to reduce the risk of unintended certificate mis-issue.

Like the TLSA record defined in DNS-Based Authentication of Named Entities (DANE), CAA records are used as part of a mechanism for checking PKIX certificate data. The difference is one of timing: CAA records specify an authorization control to be performed by a CA before issuing a certificate, and TLSA records specify a verification control to be performed by a Relying Party after the certificate is issued.

Conformance with a published CAA record is a necessary but not sufficient condition for the issuance of a certificate. A set of CAA records describes only current grants of authority, and because certificates are valid for a period of time, a certificate that does not match the records published now may have matched the records published when it was issued. Relying Parties MUST NOT use CAA records as part of certificate validation, though Certificate Evaluators MAY use them as a possible indicator of a security policy violation.

Any public certificate authority can issue a certificate for any name, so a slip or a compromise at one of them can hand out a certificate for somebody else's website. A CAA record lets the domain owner say which authorities are allowed to act for that name.

CAA and TLSA act at different points in a certificate's life
AspectCAATLSA
What it states THIS RFCWhich authorities may issue for a nameWhich certificate is expected for a name
When it is checkedBefore the certificate is issuedAfter the certificate has been issued

§3Finding the Relevant Record Set

Before issuing a certificate, a compliant CA MUST check for publication of a Relevant RRset. If such an RRset exists, the CA MUST NOT issue a certificate unless it determines that the certificate request is consistent with the applicable CAA RRset, or that an exception in the relevant Certificate Policy or Certification Practices Statement applies. If the Relevant RRset contains no property tags that restrict issuance, for instance if it contains only iodef tags or only tags the CA does not recognize, CAA does not restrict issuance.

The search climbs the DNS name tree from the specified label up to, but not including, the DNS root, until a CAA RRset is found. Given a request for an FQDN X or a wildcard domain name *.X, the Relevant RRset is determined by querying for CAA at X, removing the leftmost label to get the parent, and repeating while the domain is not the root. The pseudocode in the RFC works through this with the name X.Y.Z, where no CAA records exist at any level, and then with A.B.C where a record named issue example.com sits at B.C and the climb stops there.

A certificate request MAY specify more than one FQDN and MAY specify wildcard domain names. Issuers MUST verify authorization for all of the FQDNs and wildcard domain names in the request.

The authority looks for a CAA record at the exact name first. If there is none, it drops the leftmost part of the name and looks again, and keeps going up towards the root until it finds one record set. That record set is the only one that matters for that name.

The climb up the DNS tree, using the example name X.Y.Z
Certificate authorityDNS resolver
  1. CAA(X.Y.Z.)
  2. Empty
  3. CAA(Y.Z.)
  4. Empty
  5. CAA(Z.)
  6. Empty, so no CAA policy

§4.1The Syntax of a CAA Record

A CAA resource record contains a single property consisting of a tag-value pair. An FQDN MAY have multiple CAA records associated with it, and a given property tag MAY be specified more than once across them. The RDATA section holds one property made of a flags field of one octet, a tag length field of one octet, the tag itself, and the value. Where n is the length given in the tag length field and m is the number of remaining octets in the value field, they are related by m = d - n - 2, where d is the length of the RDATA section.

Bit 0 of the flags field is the Issuer Critical Flag. If it is set, the property is critical, and a CA MUST NOT issue certificates for any FQDN if the Relevant RRset contains a critical property with an unknown or unsupported tag. Following the DNS conventions, bit 0 is the most significant bit, so the flags value 1 means that bit 7 is set while a value of 128 means that bit 0 is set. All other bit positions are reserved, MUST be cleared to zero, and MUST be ignored on receipt.

The tag length MUST be at least 1. Tags may contain the ASCII letters and the digits 0 through 9 and nothing else, and matching of tags is case insensitive. The canonical presentation format of the record is CAA, the flags as an unsigned integer between 0 and 255, the tag in lowercase, and the value as either a contiguous set of characters without interior spaces or a quoted string.

Each CAA record carries one tag and one value, with a flags byte in front. The critical flag says that a certificate authority must understand this tag before it issues anything for the name, and the tag length byte says how long the tag is.

§4.2The issue, issuewild and iodef Properties

If the issue tag is present in the Relevant RRset for an FQDN, it asks issuers to perform CAA issue restriction processing and to grant authorization to issue certificates containing that FQDN to the holder of the issuer-domain-name, or to a party acting under that holder's explicit authority. The value follows a sub-syntax written in ABNF, in which the issuer domain name is given first and any parameters follow after a semicolon. FQDN values are specified in letter-digit-hyphen label form.

An issue tag with no issuer-domain-name requests that no certificates be issued, so a record reading CAA 0 issue ";" forbids issuance by any issuer. A malformed issue value that does not match the grammar is treated the same way, as an empty issuer-domain-name. Authorizations are additive, so listing an empty issuer-domain-name alongside a non-empty one has the same effect as listing only the non-empty one. An issuer MAY add parameters that constrain issuance further, and the semantics of those parameters are determined by the issuer alone.

The issuewild tag has the same syntax and semantics as issue except that it grants authorization only for certificates that specify a wildcard domain name, and each issuewild property takes precedence over each issue property when specified. An issuewild property MUST be ignored when the request is not for a wildcard domain name, and if at least one issuewild property is present for a wildcard request, each issue property MUST be ignored for that request.

The iodef property gives a way to report certificate issue requests that violate the security policy of the issuer or of the name holder. It takes a URL, and the scheme decides how the report is sent: mailto sends an email with the Incident Object Description Exchange Format report as a MIME attachment, and http or https submits the report as a web service request. Those are the only supported schemes.

The issue tag names the authorities allowed to issue for the name, and an empty one forbids issuance by everyone. The issuewild tag does the same job but only for wildcard names such as *.example.com, and it wins over issue when both are present. The iodef tag gives an address at which to report attempted issuance that breaks policy.

Example CAA records, from RFC 8659 Section 4.2
CAA record examples
certs.example.com         CAA 0 issue "ca1.example.net"
certs.example.com         CAA 0 issue "ca2.example.org"

nocerts.example.com       CAA 0 issue ";"

account.example.com       CAA 0 issue "ca1.example.net; account=230123"

wild.example.com          CAA 0 issue "ca1.example.net"
wild.example.com          CAA 0 issuewild "ca2.example.org"
The property tags defined by this document
  • issueissue — Authorizes the named issuer to issue certificates containing the FQDN.
  • issuewildissuewild — Same as issue but only for wildcard domain names, and it takes precedence over issue.
  • iodefiodef — Gives a mailto, http or https URL at which to report policy violations.

§5Security Considerations

CAA records assert a security policy that the holder of an FQDN wishes issuers to observe, so their effectiveness as an access control mechanism depends on issuers obeying them. The objective of the record is to reduce the risk of certificate mis-issue rather than to avoid reliance on a certificate that has been mis-issued.

The use of DNSSEC to authenticate CAA records is strongly RECOMMENDED but not required. An issuer MUST NOT issue certificates if doing so would conflict with the Relevant RRset, irrespective of whether the DNS records are signed. DNSSEC verification lets an issuer tell an empty answer apart from a suppressed one, and lets it archive proof that it was authorized to issue for the name.

The use of CAA records does not prevent mis-issue by an authorized CA, so FQDN holders SHOULD verify that the CAs they authorize employ appropriate controls. Suppression of a CAA record or insertion of a bogus one could let an attacker obtain a certificate from an issuer that was not authorized. Where DNSSEC is not deployed, an issuer SHOULD use other DNS security controls, and data cached by third parties MUST NOT be relied on as the sole source of CAA information.

CAA only works if the certificate authorities actually obey the records. It also only protects against authorities that are not on the list; an allowed authority that mis-issues is still a problem. Signing the records with DNSSEC is strongly recommended, so that a forged or hidden record can be detected.

§6Deployment Considerations

A CA implementing CAA may find that it receives errors when looking up CAA records. Some middleboxes, in particular anti-DDoS appliances, may be configured to drop DNS packets of unknown types, or may start dropping them when they consider themselves under attack. This generally appears as a timed-out query or as a SERVFAIL at a local recursive resolver. Some authoritative nameservers respond with REJECTED or NOTIMP when queried for a record type they do not recognize, and at least one authoritative resolver produces a malformed response, with the query/response bit set to zero, when queried for unknown types. The correct response code for unknown record types is 0, no error condition.

Some FQDN administrators make the contents of a subdomain unresolvable on the public Internet by delegating it to a nameserver with a private IP address. A CA processing CAA records for such subdomains receives SERVFAIL from its recursive resolver and MAY interpret that as preventing issuance. Administrators wishing to issue certificates for private FQDNs SHOULD use split-horizon DNS with a publicly available nameserver, so that CAs receive a valid, empty CAA response.

Queries for CAA records differ from most other record types, because a signed empty response is meaningfully different from a bogus response. A signed empty response means there is definitely no CAA policy at that label, while a bogus response may mean a misconfigured zone or an attacker tampering with records. Implementations may have bugs with signatures on empty responses that go unnoticed, because for common types such as A and AAAA the difference between empty and bogus does not matter to an end user.

In practice, looking up CAA records fails in recognisable ways. Firewalls that drop unusual DNS packets, name servers that answer unknown types with an error, and subdomains that are delegated to private name servers all produce failures. The document lists them so that authorities can tell their subscribers what to fix.

§7What Changed from RFC 6844

This document obsoletes RFC 6844. The most important change is to the processing section, which is now called Relevant Resource Record Set. RFC 6844 specified an algorithm that performed tree climbing not only on the FQDN being processed but also on all CNAMEs and DNAMEs encountered along the way. That made processing inefficient for names that use many CNAMEs, and would have made it hard for hosting providers to set CAA policies on their own names without also setting unwanted policies on their customers' names. This document specifies a simplified algorithm that only climbs the tree for the FQDN being processed and leaves the handling of CNAMEs and DNAMEs to the CA's recursive resolver.

The document also clarifies the ABNF grammar for the issue and issuewild tags and resolves inconsistencies with the earlier text, in particular by specifying that parameters are separated with semicolons. It also allows hyphens in property tags, and it clarifies the processing of a CAA RRset that is not empty but contains no issue or issuewild tags. The section on the CAA RR type was merged into the mechanism section, and the section on the use of DNS security was moved into the security considerations.

The earlier version of this record made authorities climb the DNS tree for every alias they met along the way, which was slow and hard for hosting companies to use. This version climbs only for the name being asked about and leaves the rest to the resolver.

§8References