<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" consensus="true" docName="draft-ietf-acme-caa-10" indexInclude="true" ipr="trust200902" number="8657" prepTime="2019-11-19T22:42:29" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-acme-caa-10" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8657" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="ACME-CAA">Certification Authority Authorization (CAA) Record Extensions for Account URI and Automatic Certificate Management Environment (ACME) Method Binding</title>
    <seriesInfo name="RFC" value="8657" stream="IETF"/>
    <author initials="H." surname="Landau" fullname="Hugo Landau">
      <organization showOnFrontPage="true"/>
      <address>
        <email>hlandau@devever.net</email>
      </address>
    </author>
    <date month="11" year="2019"/>
    <abstract pn="section-abstract">
      <t pn="section-abstract-1">The Certification Authority Authorization (CAA) DNS record allows a domain to
communicate an issuance policy to Certification Authorities (CAs) but only allows
a domain to define a policy with CA-level granularity. However, the CAA
specification (RFC 8659) also provides facilities for an extension to admit a
more granular, CA-specific policy. This specification defines two such
parameters: one allowing specific accounts of a CA to be identified by URIs
and one allowing specific methods of domain control validation as defined by
the Automatic Certificate Management Environment (ACME) protocol to be
required.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t pn="section-boilerplate.1-2">
            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.
        </t>
        <t pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8657" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t pn="section-boilerplate.2-1">
            Copyright (c) 2019 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) 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.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
          </li>
          <li pn="section-toc.1-1.2">
            <t keepWithNext="true" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
          </li>
          <li pn="section-toc.1-1.3">
            <t keepWithNext="true" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-extensions-to-the-caa-recor">Extensions to the CAA Record: The "accounturi" Parameter</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-with-acme">Use with ACME</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-without-acme">Use without ACME</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t keepWithNext="true" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-extensions-to-the-caa-record">Extensions to the CAA Record: The "validationmethods" Parameter</xref></t>
          </li>
          <li pn="section-toc.1-1.5">
            <t keepWithNext="true" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-limited-to-cas-processing-c">Limited to CAs Processing CAA Records</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-restrictions-ineffective-wi">Restrictions Ineffective without CA Recognition</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.3">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-mandatory-consistency-in-ca">Mandatory Consistency in CA Recognition</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.4">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.4.1"><xref derivedContent="5.4" format="counter" sectionFormat="of" target="section-5.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-uri-ambiguity">URI Ambiguity</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.5">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.5.1"><xref derivedContent="5.5" format="counter" sectionFormat="of" target="section-5.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-authorization-freshness">Authorization Freshness</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.6">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.6.1"><xref derivedContent="5.6" format="counter" sectionFormat="of" target="section-5.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-with-and-without-dnssec">Use with and without DNSSEC</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.7">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.7.1"><xref derivedContent="5.7" format="counter" sectionFormat="of" target="section-5.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-restrictions-supersedable-b">Restrictions Supersedable by DNS Delegation</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.8">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.8.1"><xref derivedContent="5.8" format="counter" sectionFormat="of" target="section-5.8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-misconfiguration-hazards">Misconfiguration Hazards</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.9">
                <t keepWithNext="true" pn="section-toc.1-1.5.2.9.1"><xref derivedContent="5.9" format="counter" sectionFormat="of" target="section-5.9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-revelation-of-account-uris">Revelation of Account URIs</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t keepWithNext="true" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t keepWithNext="true" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t keepWithNext="true" pn="section-toc.1-1.8.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-examples">Examples</xref></t>
          </li>
          <li pn="section-toc.1-1.9">
            <t keepWithNext="true" pn="section-toc.1-1.9.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t pn="section-1-1">This specification defines two parameters for the "issue" and "issuewild"
Properties of the Certification Authority Authorization (CAA) DNS resource
record <xref target="RFC8659" format="default" sectionFormat="of" derivedContent="RFC8659"/>. The first, "accounturi", allows
authorization conferred by a CAA policy to be restricted to specific accounts
of a Certification Authority (CA), which are identified by URIs. The second, "validationmethods", allows
the set of validation methods supported by a CA to validate domain control to
be limited to a subset of the full set of methods that it supports.</t>
    </section>
    <section anchor="terminology" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-terminology">Terminology</name>
      <t pn="section-2-1">The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>",
"<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>",
"<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
are to be interpreted as described in BCP 14
<xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> when,
and only when, they appear in all capitals, as shown here.</t>
    </section>
    <section anchor="extensions-to-the-caa-record-accounturi-parameter" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-extensions-to-the-caa-recor">Extensions to the CAA Record: The "accounturi" Parameter</name>
      <t pn="section-3-1">This document defines the "accounturi" CAA parameter for the "issue" and
"issuewild" Properties defined by <xref target="RFC8659" format="default" sectionFormat="of" derivedContent="RFC8659"/>. The value of this
parameter, if specified, <bcp14>MUST</bcp14> be a URI <xref target="RFC3986" format="default" sectionFormat="of" derivedContent="RFC3986"/> identifying a
specific CA account.</t>
      <t pn="section-3-2">"CA account" means an object that is maintained by a specific CA, that may request
the issuance of certificates, and that represents a specific entity or group of
related entities.</t>
      <t pn="section-3-3">The presence of this parameter constrains the Property to which it is attached.
Where a CAA Property has an "accounturi" parameter, a CA <bcp14>MUST</bcp14> only consider
that Property to authorize issuance in the context of a given certificate
issuance request if the CA recognizes the URI specified in the value portion of
that parameter as identifying the account making that request.</t>
      <t pn="section-3-4">A Property without an "accounturi" parameter matches any account. A Property
with an invalid or unrecognized "accounturi" parameter is unsatisfiable. A
Property with multiple "accounturi" parameters is unsatisfiable.</t>
      <t pn="section-3-5">The presence of an "accounturi" parameter does not replace or supersede the
need to validate the domain name specified in an "issue" or "issuewild" record
in the manner described in the CAA
   specification <xref target="RFC8659" format="default" sectionFormat="of" derivedContent="RFC8659"/>. CAs <bcp14>MUST</bcp14> still perform such
validation. For example, a CAA "issue" Property that specifies a domain name
belonging to CA A and an "accounturi" parameter identifying an account at CA B
is unsatisfiable.</t>
      <section anchor="use-with-acme" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-use-with-acme">Use with ACME</name>
        <t pn="section-3.1-1">An Automatic Certificate Management Environment (ACME) <xref target="RFC8555" format="default" sectionFormat="of" derivedContent="RFC8555"/> account object <bcp14>MAY</bcp14> be identified by setting the
"accounturi" parameter to the URI of the ACME account object.</t>
        <t pn="section-3.1-2">Implementations of this specification that also implement ACME <bcp14>MUST</bcp14> recognize
such URIs.</t>
      </section>
      <section anchor="use-without-acme" numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-use-without-acme">Use without ACME</name>
        <t pn="section-3.2-1">The "accounturi" specification provides a general mechanism to identify
entities that may request certificate issuance via URIs. The use of specific
kinds of URIs may be specified in future RFCs, and CAs not implementing ACME <bcp14>MAY</bcp14>
assign and recognize their own URIs arbitrarily.</t>
      </section>
    </section>
    <section anchor="extensions-to-the-caa-record-validationmethods-parameter" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-extensions-to-the-caa-record">Extensions to the CAA Record: The "validationmethods" Parameter</name>
      <t pn="section-4-1">This document also defines the "validationmethods" CAA parameter for the "issue" and
"issuewild" Properties. The value of this parameter, if specified, <bcp14>MUST</bcp14> be a
comma-separated string of zero or more validation method labels.</t>
      <t pn="section-4-2">A validation method label identifies a validation method. A validation method
is a particular way in which a CA can validate control over a domain.</t>
      <t pn="section-4-3">The presence of this parameter constrains the Property to which it is attached.
A CA <bcp14>MUST</bcp14> only consider a Property with the "validationmethods" parameter to
authorize issuance where the validation method being used is identified by one
of the validation method labels listed in the comma-separated list.</t>
      <t pn="section-4-4">Each validation method label <bcp14>MUST</bcp14> be either the label of a method defined in
the "ACME Validation Methods" IANA registry
<xref target="RFC8555" format="default" sectionFormat="of" derivedContent="RFC8555"/> or a CA‑specific non-ACME validation
method label as defined below.</t>
      <t pn="section-4-5">Where a CA supports both the "validationmethods" parameter and one or more
non-ACME validation methods, it <bcp14>MUST</bcp14> assign labels to those methods. If
appropriate non-ACME labels are not present in the "ACME Validation Methods" IANA
registry, the CA <bcp14>MUST</bcp14> use labels beginning with the string "ca-", which are
defined to have CA-specific meaning.</t>
      <t pn="section-4-6">The value of the "validationmethods" parameter <bcp14>MUST</bcp14> comply with the following
ABNF <xref target="RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234"/>:</t>
      <sourcecode name="abnf-for-validationmethods" type="abnf" markers="false" pn="section-4-7">
   value = [*(label ",") label]
   label = 1*(ALPHA / DIGIT / "-") </sourcecode>
    </section>
    <section anchor="security-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t pn="section-5-1">This specification describes an extension to the CAA record specification,
increasing the granularity at which a CAA policy can be expressed. This allows
the set of entities capable of successfully requesting issuance of certificates
for a given domain to be restricted beyond the set of entities would otherwise
be possible, while still allowing issuance for specific accounts of a CA. This
improves the security of issuance for domains that choose to employ it, when
combined with a CA that implements this specification.</t>
      <section anchor="limited-to-cas-processing-caa-records" numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-limited-to-cas-processing-c">Limited to CAs Processing CAA Records</name>
        <t pn="section-5.1-1">All of the security considerations listed in <xref target="RFC8659" format="default" sectionFormat="of" derivedContent="RFC8659"/> are inherited by
this document. This specification merely enables a domain with an existing
relationship with a CA to further constrain that CA in its issuance practices,
where that CA implements this specification. In particular, it provides no
additional security above that provided by using the unextended CAA
specification alone as concerns matters relating to any other CA. The capacity
of any other CA to issue certificates for the given domain is completely
unchanged.</t>
        <t pn="section-5.1-2">As such, a domain that, via CAA records, authorizes only CAs adopting this
specification and that constrains its policy by means of this specification,
remains vulnerable to unauthorized issuance by CAs that do not honor CAA
records or that honor them only on an advisory basis. Where a domain uses
DNSSEC, it also remains vulnerable to CAs that honor CAA records but that do
not validate CAA records by means of a trusted DNSSEC-validating resolver.</t>
      </section>
      <section anchor="restrictions-ineffective-without-ca-recognition" numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-restrictions-ineffective-wi">Restrictions Ineffective without CA Recognition</name>
        <t pn="section-5.2-1">Because the parameters of "issue" or "issuewild" CAA Properties constitute a
CA-specific namespace, the CA identified by an "issue" or "issuewild" Property
decides what parameters to recognize and their semantics. Accordingly, the CAA
parameters defined in this specification rely on their being recognized by the
CA named by an "issue" or "issuewild" CAA Property and are not an effective
means of control over issuance unless a CA's support for the parameters is
established beforehand.</t>
        <t pn="section-5.2-2">CAs that implement this specification <bcp14>SHOULD</bcp14> make available documentation
indicating as such, including explicit statements as to which parameters are
supported. Domains configuring CAA records for a CA <bcp14>MUST NOT</bcp14> assume that the
restrictions implied by the "accounturi" and "validationmethods" parameters are
effective in the absence of explicit indication as such from that CA.</t>
        <t pn="section-5.2-3">CAs <bcp14>SHOULD</bcp14> also document whether they implement DNSSEC validation for DNS
lookups done for validation purposes, as this affects the security of the
"accounturi" and "validationmethods" parameters.</t>
      </section>
      <section anchor="mandatory-consistency-in-ca-recognition" numbered="true" toc="include" removeInRFC="false" pn="section-5.3">
        <name slugifiedName="name-mandatory-consistency-in-ca">Mandatory Consistency in CA Recognition</name>
        <t pn="section-5.3-1">A CA <bcp14>MUST</bcp14> ensure that its support for the "accounturi" and "validationmethods"
parameters is fully consistent for a given domain name that a CA recognizes as
identifying itself in a CAA "issue" or "issuewild" Property. If a CA has
multiple issuance systems (for example, an ACME-based issuance system and a
non-ACME-based issuance system, or two different issuance systems resulting
from a corporate merger), it <bcp14>MUST</bcp14> ensure that all issuance systems recognize
the same parameters.</t>
        <t pn="section-5.3-2">A CA that is unable to do this <bcp14>MAY</bcp14> still implement the parameters by splitting
the CA into two domain names for the purposes of CAA processing. For example, a
CA "example.com" with an ACME-based issuance system and a non-ACME-based
issuance system could recognize only "acme.example.com" for the former and
"example.com" for the latter, and then implement support for the "accounturi"
and "validationmethods" parameters for "acme.example.com" only.</t>
        <t pn="section-5.3-3">A CA that is unable to ensure consistent processing of the "accounturi"
parameter or the 
"validationmethods" parameter for a given CA domain name as specifiable in CAA
"issue" or "issuewild" Properties <bcp14>MUST NOT</bcp14> implement support for these
parameters. Failure to do so would result in an implementation of these
parameters that does not provide effective security.</t>
      </section>
      <section anchor="uri-ambiguity" numbered="true" toc="include" removeInRFC="false" pn="section-5.4">
        <name slugifiedName="name-uri-ambiguity">URI Ambiguity</name>
        <t pn="section-5.4-1">Suppose that CA A recognizes "a.example.com" as identifying itself and
CA B is a subsidiary of CA A that recognizes both "a.example.com" and "b.example.com" as
identifying itself.</t>
        <t pn="section-5.4-2">Suppose that both CA A and CA B issue account URIs of the form:</t>
        <artwork name="" type="" align="left" alt="" pn="section-5.4-3">
   "urn:example:account-id:1234" </artwork>
        <t pn="section-5.4-4">If the CA domain name in a CAA record is specified as "a.example.com", then this
could be construed as identifying account number 1234 at CA A or at CA B. These
may be different accounts, creating ambiguity.</t>
        <t pn="section-5.4-5">Thus, CAs <bcp14>MUST</bcp14> ensure that the URIs they recognize as pertaining to a specific
account of that CA are unique within the scope of all domain names that they
recognize as identifying that CA for the purpose of CAA record validation.</t>
        <t pn="section-5.4-6">CAs <bcp14>SHOULD</bcp14> satisfy this requirement by using URIs that include an authority
(see <xref target="RFC3986" sectionFormat="of" section="3.2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc3986#section-3.2" derivedContent="RFC3986"/>):</t>
        <artwork name="" type="" align="left" alt="" pn="section-5.4-7">
   "https://a.example.com/account/1234" </artwork>
      </section>
      <section anchor="authorization-freshness" numbered="true" toc="include" removeInRFC="false" pn="section-5.5">
        <name slugifiedName="name-authorization-freshness">Authorization Freshness</name>
        <t pn="section-5.5-1">The CAA specification <xref target="RFC8659" format="default" sectionFormat="of" derivedContent="RFC8659"/> governs the act of issuance by a CA. In some cases, a CA
may establish authorization for an account to request certificate issuance for
a specific domain separately from the act of issuance itself. Such authorization
may occur substantially prior to a certificate issuance request. The CAA policy
expressed by a domain may have changed in the meantime, creating the risk that
a CA will issue certificates in a manner inconsistent with the presently
published CAA policy.</t>
        <t pn="section-5.5-2">CAs <bcp14>SHOULD</bcp14> adopt practices to reduce the risk of such circumstances. Possible
countermeasures include issuing authorizations with very limited validity
periods, such as an hour, or revalidating the CAA policy for a domain at
certificate issuance time.</t>
      </section>
      <section anchor="use-with-and-without-dnssec" numbered="true" toc="include" removeInRFC="false" pn="section-5.6">
        <name slugifiedName="name-use-with-and-without-dnssec">Use with and without DNSSEC</name>
        <t pn="section-5.6-1">The "domain validation" model of validation commonly used for certificate
issuance cannot ordinarily protect against adversaries who can conduct global
man-in-the-middle attacks against a particular domain. A global
man-in-the-middle attack is an attack that can intercept traffic to or from a
given domain, regardless of the origin or destination of that traffic. Such an
adversary can intercept all validation traffic initiated by a CA and thus
appear to have control of the given domain.</t>
        <t pn="section-5.6-2">Where a domain is signed using DNSSEC, the authenticity of its DNS data can be
assured, providing that a given CA makes all DNS resolutions via a trusted
DNSSEC-validating resolver. A domain can use this Property to protect itself
from the threat posed by an adversary capable of performing a global
man-in-the-middle attack against that domain.</t>
        <t pn="section-5.6-3">In order to facilitate this, a CA validation process must either rely solely on
information obtained via DNSSEC or meaningfully bind the other parts of the
validation transaction using material obtained via DNSSEC.</t>
        <t pn="section-5.6-4">The CAA parameters described in this specification can be used to ensure that
only validation methods meeting these criteria are used. In particular, a
domain secured via DNSSEC <bcp14>SHOULD</bcp14> either:</t>
        <ol spacing="normal" type="1" start="1" pn="section-5.6-5">
          <li pn="section-5.6-5.1" derivedCounter="1.">Use the "accounturi" parameter to ensure that only accounts that it
controls are authorized to obtain certificates, or</li>
          <li pn="section-5.6-5.2" derivedCounter="2.">Exclusively use validation methods that rely solely on information
obtained via DNSSEC and use the "validationmethods" parameter to ensure
that only such methods are used.</li>
        </ol>
        <t pn="section-5.6-6">A CA supporting the "accounturi" parameter or the "validationmethods" parameter <bcp14>MUST</bcp14> perform
CAA validation using a trusted DNSSEC‑validating resolver.</t>
        <t pn="section-5.6-7">"Trusted" in this context means that the CA both trusts the resolver itself and
ensures that the communications path between the resolver and the system
performing CAA validation is secure. It is <bcp14>RECOMMENDED</bcp14> that a CA ensure this
by using a DNSSEC-validating resolver running on the same machine as the system
performing CAA validation.</t>
        <t pn="section-5.6-8">The use of the "accounturi" parameter or the "validationmethods" parameter does not confer
additional security against an attacker capable of performing a
man-in-the-middle attack against all validation attempts made by a given CA
that is authorized by CAA where:</t>
        <ol spacing="normal" type="1" start="1" pn="section-5.6-9">
          <li pn="section-5.6-9.1" derivedCounter="1.">A domain does not secure its nameservers using DNSSEC, or</li>
          <li pn="section-5.6-9.2" derivedCounter="2.">That CA does not perform CAA validation using a trusted DNSSEC‑validating
resolver.</li>
        </ol>
        <t pn="section-5.6-10">Moreover, the use of the "accounturi" parameter or the "validationmethods" parameter does not
mitigate man-in-the-middle attacks against CAs that do not validate
CAA records or that do not do so using a trusted DNSSEC-validating resolver,
regardless of whether or not those CAs are authorized by CAA; see
<xref target="limited-to-cas-processing-caa-records" format="default" sectionFormat="of" derivedContent="Section 5.1"/>.</t>
        <t pn="section-5.6-11">In these cases, the "accounturi" and "validationmethods" parameters still
provide an effective means of administrative control over issuance, except
where control over DNS is subdelegated (see below).</t>
      </section>
      <section anchor="restrictions-supersedable-by-dns-delegation" numbered="true" toc="include" removeInRFC="false" pn="section-5.7">
        <name slugifiedName="name-restrictions-supersedable-b">Restrictions Supersedable by DNS Delegation</name>
        <t pn="section-5.7-1">CAA records are located during validation by walking up the DNS hierarchy until
one or more records are found. CAA records are therefore not an effective way
of restricting or controlling issuance for subdomains of a domain, where
control over those subdomains is delegated to another party (such as via DNS
delegation or by providing limited access to manage subdomain DNS records).</t>
      </section>
      <section anchor="misconfiguration-hazards" numbered="true" toc="include" removeInRFC="false" pn="section-5.8">
        <name slugifiedName="name-misconfiguration-hazards">Misconfiguration Hazards</name>
        <t pn="section-5.8-1">Because the "accounturi" and "validationmethods" parameters express restrictive
security policies, misconfiguration of said parameters may result in legitimate
issuance requests being refused.</t>
      </section>
      <section anchor="revelation-of-account-uris" numbered="true" toc="include" removeInRFC="false" pn="section-5.9">
        <name slugifiedName="name-revelation-of-account-uris">Revelation of Account URIs</name>
        <t pn="section-5.9-1">Because CAA records are publicly accessible, the use of the "accounturi"
parameter enables third parties to observe the authorized account URIs for a
domain. This may allow third parties to identify a correlation between domains
if those domains use the same account URIs.</t>
        <t pn="section-5.9-2">CAs are encouraged to select and process account URIs under the assumption that
untrusted third parties may learn of them.</t>
      </section>
    </section>
    <section anchor="iana-considerations" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t pn="section-6-1">This document has no IANA actions. As per <xref target="RFC8659" format="default" sectionFormat="of" derivedContent="RFC8659"/>, the parameter namespace for the CAA "issue"
and "issuewild" Properties has CA-defined semantics, and the identifiers within
that namespace may be freely and arbitrarily assigned by a CA. This document
merely specifies recommended semantics for parameters of the names "accounturi"
and "validationmethods", which CAs may choose to adopt.</t>
    </section>
  </middle>
  <back>
    <references pn="section-7">
      <name slugifiedName="name-normative-references">Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="S. Bradner">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="1997" month="March"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" quoteTitle="true" derivedAnchor="RFC3986">
        <front>
          <title>Uniform Resource Identifier (URI): Generic Syntax</title>
          <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="R." surname="Fielding" fullname="R. Fielding">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="L." surname="Masinter" fullname="L. Masinter">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2005" month="January"/>
          <abstract>
            <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="66"/>
        <seriesInfo name="RFC" value="3986"/>
        <seriesInfo name="DOI" value="10.17487/RFC3986"/>
      </reference>
      <reference anchor="RFC5234" target="https://www.rfc-editor.org/info/rfc5234" quoteTitle="true" derivedAnchor="RFC5234">
        <front>
          <title>Augmented BNF for Syntax Specifications: ABNF</title>
          <author initials="D." surname="Crocker" fullname="D. Crocker" role="editor">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="P." surname="Overell" fullname="P. Overell">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2008" month="January"/>
          <abstract>
            <t>Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="STD" value="68"/>
        <seriesInfo name="RFC" value="5234"/>
        <seriesInfo name="DOI" value="10.17487/RFC5234"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="B. Leiba">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2017" month="May"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC8555" target="https://www.rfc-editor.org/info/rfc8555" quoteTitle="true" derivedAnchor="RFC8555">
        <front>
          <title>Automatic Certificate Management Environment (ACME)</title>
          <author initials="R." surname="Barnes" fullname="R. Barnes">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J." surname="Hoffman-Andrews" fullname="J. Hoffman-Andrews">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="D." surname="McCarney" fullname="D. McCarney">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J." surname="Kasten" fullname="J. Kasten">
            <organization showOnFrontPage="true"/>
          </author>
          <date year="2019" month="March"/>
          <abstract>
            <t>Public Key Infrastructure using X.509 (PKIX) certificates are used for a number of purposes, the most significant of which is the authentication of domain names.  Thus, certification authorities (CAs) in the Web PKI are trusted to verify that an applicant for a certificate legitimately represents the domain name(s) in the certificate.  As of this writing, this verification is done through a collection of ad hoc mechanisms.  This document describes a protocol that a CA and an applicant can use to automate the process of verification and certificate issuance.  The protocol also provides facilities for other certificate management functions, such as certificate revocation.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8555"/>
        <seriesInfo name="DOI" value="10.17487/RFC8555"/>
      </reference>
      <reference anchor="RFC8659" target="https://www.rfc-editor.org/info/rfc8659" quoteTitle="true" derivedAnchor="RFC8659">
        <front>
          <title>DNS Certification Authority Authorization (CAA) Resource Record</title>
          <seriesInfo name="RFC" value="8659"/>
          <seriesInfo name="DOI" value="10.17487/RFC8659"/>
          <author initials="P" surname="Hallam-Baker" fullname="Phillip Hallam-Baker">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="R" surname="Stradling" fullname="Rob Stradling">
            <organization showOnFrontPage="true"/>
          </author>
          <author initials="J" surname="Hoffman-Andrews" fullname="Jacob Hoffman-Andrews">
            <organization showOnFrontPage="true"/>
          </author>
          <date month="November" year="2019"/>
        </front>
      </reference>
    </references>
    <section anchor="examples" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-examples">Examples</name>
      <t pn="section-appendix.a-1">The following shows an example DNS zone file fragment that nominates two
account URIs as authorized to issue certificates for the domain "example.com".
Issuance is restricted to the CA "example.net".</t>
      <artwork name="" type="" align="left" alt="" pn="section-appendix.a-2">
example.com. IN CAA 0 issue "example.net; \
  accounturi=https://example.net/account/1234"
example.com. IN CAA 0 issue "example.net; \
  accounturi=https://example.net/account/2345" </artwork>
      <t pn="section-appendix.a-3">The following shows a zone file fragment that restricts the ACME methods that
can be used; only ACME methods "dns-01" and "xyz-01" can be used.</t>
      <artwork name="" type="" align="left" alt="" pn="section-appendix.a-4">
example.com. IN CAA 0 issue "example.net; \
  validationmethods=dns-01,xyz-01" </artwork>
      <t pn="section-appendix.a-5">The following shows an equivalent way of expressing the same restriction:</t>
      <artwork name="" type="" align="left" alt="" pn="section-appendix.a-6">
example.com. IN CAA 0 issue "example.net; validationmethods=dns-01"
example.com. IN CAA 0 issue "example.net; validationmethods=xyz-01" </artwork>
      <t pn="section-appendix.a-7">The following shows a zone file fragment in which one account can be used to
issue with the "dns-01" method and one account can be used to issue with the
"http-01" method.</t>
      <artwork name="" type="" align="left" alt="" pn="section-appendix.a-8">
example.com. IN CAA 0 issue "example.net; \
  accounturi=https://example.net/account/1234; \
  validationmethods=dns-01"
example.com. IN CAA 0 issue "example.net; \
  accounturi=https://example.net/account/2345; \
  validationmethods=http-01" </artwork>
      <t pn="section-appendix.a-9">The following shows a zone file fragment in which only ACME method "dns-01" or
a CA-specific method "ca-foo" can be used.</t>
      <artwork name="" type="" align="left" alt="" pn="section-appendix.a-10">
example.com. IN CAA 0 issue "example.net; \
  validationmethods=dns-01,ca-foo" </artwork>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.b">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="H." surname="Landau" fullname="Hugo Landau">
        <organization showOnFrontPage="true"/>
        <address>
          <email>hlandau@devever.net</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
