<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.18 (Ruby 3.0.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="full3978trust200902" docName="draft-ietf-acme-scoped-dns-challenges-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="ACME-SCOPED-DNS-CHALLENGES">Automated Certificate Management Environment (ACME) Scoped DNS Challenges</title>

    <author fullname="Antonios A. Chariton">
      <organization>Independent Contributor</organization>
      <address>
        <email>daknob@daknob.net</email>
      </address>
    </author>
    <author fullname="Amir A. Omidi">
      <organization>Spirl</organization>
      <address>
        <email>amir@aaomidi.com</email>
      </address>
    </author>
    <author fullname="James Kasten">
      <organization>Google</organization>
      <address>
        <email>jdkasten@google.com</email>
      </address>
    </author>
    <author fullname="Fotis Loukos">
      <organization>Google</organization>
      <address>
        <email>fotisl@google.com</email>
      </address>
    </author>
    <author fullname="Stanislaw A. Janikowski">
      <organization>Google</organization>
      <address>
        <email>stanwise@google.com</email>
      </address>
    </author>

    <date year="2024" month="August" day="19"/>

    <area>Security</area>
    <workgroup>Automated Certificate Management Environment</workgroup>
    <keyword>acme</keyword>

    <abstract>


<?line 53?>

<t>This document outlines a new challenge for the ACME protocol, enabling an ACME client to answer a domain control validation challenge from an ACME server using a DNS resource linked to the ACME Account ID. This allows multiple systems or environments to handle challenge-solving for a single domain.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://aaomidi.github.io/draft-ietf-acme-scoped-dns-challenges"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-acme-scoped-dns-challenges/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:acme@ietf.org"/>),
        which is archived at <eref target="https://datatracker.ietf.org/wg/acme/about/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/acme/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/aaomidi/draft-ietf-acme-scoped-dns-challenges"/>.</t>
    </note>


  </front>

  <middle>


<?line 57?>

<section anchor="introduction"><name>Introduction</name>

<t>The <spanx style="verb">dns-01</spanx> challenge specified in section 8.4 of <xref target="RFC8555"/> requires that ACME clients validate the domain under the <spanx style="verb">_acme-challenge</spanx> label for the <spanx style="verb">TXT</spanx> record. This label creates several limitations in domain validation.</t>

<t>First, the <spanx style="verb">_acme-challenge</spanx> label does not specify if the authorization is intended for a specific host, a wildcard domain, or a domain and all of its subdomains. Consequently, domain owners who may be delegating or provisioning authorization labels for a domain must concede control over the domain and all subdomains, violating the principle of least privilege.</t>

<t>Furthermore, since each domain only has a single authorization label, it creates an impediment limiting the number of other entities domain validation can be delegated to. Delegating authorization to an entity requires the use of CNAME records, which can only used once per DNS name (or in this case, once per authorization label). This limitation requires operators to pick a single ACME challenge solver for their domain name.</t>

<t>In multi-region deployments, where separate availability zones serve the same content, and dependencies across them are avoided, operators need a way to obtain a separate certificate per zone, for the same domain name. Similarly, in cases of zero-downtime migration, two different setups of the infrastructure may coexist for a long period of time, and both need access to valid certificates.</t>

<t>This document specifies two new challenge types. <spanx style="verb">dns-02</spanx> and <spanx style="verb">dns-account-01</spanx>, which aim to address these deficiencies.</t>

<t>This work follows all recommendations set forth in "Domain Control Validation using DNS" <xref target="I-D.draft-ietf-dnsop-domain-verification-techniques"></xref>.</t>

<t>This RFC does not intend to deprecate the <spanx style="verb">dns-01</spanx> challenge specified in <xref target="RFC8555"/>. Since these new challenges do not modify any pre-existing challenges, the ability to complete the <spanx style="verb">dns-02</spanx> or <spanx style="verb">dns-account-01</spanx> challenge requires ACME server operators to deploy new changes to their codebase. This makes adopting and using these challenges an opt-in process.</t>

<section anchor="dns-02"><name>DNS-02</name>

<t>The <spanx style="verb">dns-02</spanx> challenge adds onto <spanx style="verb">dns-01</spanx> by introducing a scoping mechanism to the domain authorization label. This allows for the client to specify if the intended domain validation is for a specific host, a wildcard domain, or a domain and all of its subdomains.</t>

</section>
<section anchor="dns-account-01"><name>DNS-ACCOUNT-01</name>

<t>The <spanx style="verb">dns-account-01</spanx> challenge leverages the ACME account URL to present an account-unique stable challenge to an ACME server. This challenge allows any domain name to delegate its domain validation to more than one service through
unique per ACME account DNS records.</t>

<t>With this new challenge, domain validation of the same DNS name can be done through different authorization labels. Since these authorization labels will depend on the ACME account KID (<xref section="6.2" sectionFormat="comma" target="RFC8555"/>), any number of them can be generated in advance. This allows all required <spanx style="verb">CNAME</spanx> records for domain validation delegation to be constructed statically.</t>

</section>
</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>

<t>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"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="dns-02-challenge"><name>DNS-02 Challenge</name>

<t>When the identifier being validated is a domain name, the client can prove control of that domain by provisioning a <spanx style="verb">TXT</spanx> resource record containing a designated value for a specific validation domain name.</t>

<t><list style="symbols">
  <t>type (required, string): The string "dns-02".</t>
  <t>token (required, string): A random value that uniquely identifies the challenge. This value <bcp14>MUST</bcp14> have at least 128 bits of entropy. It <bcp14>MUST NOT</bcp14> contain any characters outside the base64url alphabet, including padding characters ("="). See <xref target="RFC4086"/> for additional information on additional requirements for secure randomness.</t>
</list></t>

<figure><artwork><![CDATA[
{
    "type": "dns-02",
    "url": "https://example.com/acme/chall/i00MGYwLWIx",
    "status": "pending",
    "token": "ODE4OWY4NTktYjhmYS00YmY1LTk5MDgtZTFjYTZmNjZlYTUx"
}
]]></artwork></figure>

<t>A client can fulfill this challenge by performing the following steps:</t>

<t><list style="symbols">
  <t>Construct a key authorization <xref section="8.1" sectionFormat="comma" target="RFC8555"/> from the <spanx style="verb">token</spanx> value provided in the challenge and the client's account key</t>
  <t>Compute the SHA-256 digest <xref target="FIPS180-4"/> of the key authorization</t>
  <t>Construct the validation domain name by specifying the scope for the domain name being validated:  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
"_acme-" || <SCOPE> || "-challenge"
]]></artwork></figure>
  <list style="symbols">
      <t>SCOPE is
      <list style="symbols">
          <t>"host" if the associated authorization applies only to the specific host name and no labels beneath it</t>
          <t>"wildcard" if the associated authorization is for a wildcard domain and contains the <spanx style="verb">wildcard</spanx> field set to true (<xref section="7.1.4" sectionFormat="comma" target="RFC8555"/>)</t>
          <t>"domain" if the authorization is for both the host and all subdomains by containing the <spanx style="verb">subdomainAuthAllowed</spanx> field set to true (<xref section="4.1" sectionFormat="comma" target="RFC9444"/>).</t>
        </list></t>
      <t>The <spanx style="verb">"||"</spanx> operator indicates concatenation of strings</t>
    </list></t>
  <t>Provision a DNS <spanx style="verb">TXT</spanx> record with the base64url digest value under the constructed domain validation name  <vspace blankLines='1'/>
For example, if the domain name being validated is the wildcard of <spanx style="verb">*.example.org</spanx> then the client would provision the following DNS record:  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
_acme-wildcard-challenge.example.org 300 IN TXT "LoqXcYV8...jxAjEuX0.9jg46WB3...fm21mqTI"
]]></artwork></figure>
  <vspace blankLines='1'/>
(In the above, "..." indicates that the token and the JWK thumbprint in the key authorization have been truncated to fit on the page.)</t>
  <t>Respond to the ACME server with an empty object ({}) to acknowledge that the challenge can be validated by the server  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
POST /acme/chall/Rg5dV14Gh1Q
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/evOfKhNU60wg",
    "nonce": "SS2sSl1PtspvFZ08kNtzKd",
    "url": "https://example.com/acme/chall/Rg5dV14Gh1Q"
  }),
  "payload": base64url({}),
  "signature": "Q1bURgJoEslbD1c5...3pYdSMLio57mQNN4"
}
]]></artwork></figure>
  </t>
</list></t>

<t>On receiving a response, the server constructs and stores the key authorization from the challenge <spanx style="verb">token</spanx> value.</t>

<t>To validate the <spanx style="verb">dns-02</spanx> challenge, the server performs the following steps:</t>

<t><list style="symbols">
  <t>Compute the SHA-256 digest <xref target="FIPS180-4"/> of the stored key authorization</t>
  <t>Compute the validation domain name with the scope of the associated authorization similar to the client</t>
  <t>Query for <spanx style="verb">TXT</spanx> records for the validation domain name</t>
  <t>Verify that the contents of one of the <spanx style="verb">TXT</spanx> records match the digest value</t>
</list></t>

<t>If all the above verifications succeed, then the validation is successful. If no DNS record is found, or DNS record and response payload do not pass these checks, then the server <bcp14>MUST</bcp14> fail the validation and mark the challenge as invalid.</t>

<t>The client <bcp14>SHOULD</bcp14> de-provision the resource record(s) provisioned for this challenge once the challenge is complete, i.e., once the "status" field of the challenge has the value "valid" or "invalid".</t>

<section anchor="errors"><name>Errors</name>

<t>The server <bcp14>SHOULD</bcp14> follow the guidelines set in <xref section="6.7" sectionFormat="comma" target="RFC8555"/> for error conditions that occur during challenge validation.</t>

</section>
</section>
<section anchor="dns-account-01-challenge"><name>DNS-ACCOUNT-01 Challenge</name>

<t>When the identifier being validated is a domain name, the client can prove control of that domain by provisioning a <spanx style="verb">TXT</spanx> resource record containing a designated value for a specific validation domain name.</t>

<t><list style="symbols">
  <t>type (required, string): The string "dns-account-01".</t>
  <t>token (required, string): A random value that uniquely identifies the challenge. This value <bcp14>MUST</bcp14> have at least 128 bits of entropy. It <bcp14>MUST NOT</bcp14> contain any characters outside the base64url alphabet, including padding characters ("="). See <xref target="RFC4086"/> for additional information on additional requirements for secure randomness.</t>
</list></t>

<figure><artwork><![CDATA[
{
    "type": "dns-account-01",
    "url": "https://example.com/acme/chall/i00MGYwLWIx",
    "status": "pending",
    "token": "ODE4OWY4NTktYjhmYS00YmY1LTk5MDgtZTFjYTZmNjZlYTUx"
}
]]></artwork></figure>

<t>A client can fulfill this challenge by performing the following steps:</t>

<t><list style="symbols">
  <t>Construct a key authorization <xref section="8.1" sectionFormat="comma" target="RFC8555"/> from the <spanx style="verb">token</spanx> value provided in the challenge and the client's account key</t>
  <t>Compute the SHA-256 digest <xref target="FIPS180-4"/> of the key authorization</t>
  <t>Construct the validation domain name by prepending the following two labels to the domain name being validated:  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
"_" || base32(SHA-256(<ACCOUNT_URL>)[0:10]) || "._acme-" || <SCOPE> || "-challenge"
]]></artwork></figure>
  <list style="symbols">
      <t>SHA-256 is the SHA hashing operation defined in <xref target="RFC6234"/></t>
      <t><spanx style="verb">[0:10]</spanx> is the operation that selects the first ten bytes (bytes 0 through 9 inclusive) from the previous SHA-256 operation</t>
      <t>base32 is the operation defined in <xref target="RFC4648"/></t>
      <t>ACCOUNT_URL is defined in <xref section="7.3" sectionFormat="comma" target="RFC8555"/> as the value in the <spanx style="verb">Location</spanx> header field</t>
      <t>SCOPE is
      <list style="symbols">
          <t>"host" if the associated authorization applies only to the specific host name and no labels beneath it</t>
          <t>"wildcard" if the associated authorization is for a wildcard domain and contains the <spanx style="verb">wildcard</spanx> field set to true (<xref section="7.1.4" sectionFormat="comma" target="RFC8555"/>)</t>
          <t>"domain" if the authorization is for both the host and all subdomains by containing the <spanx style="verb">subdomainAuthAllowed</spanx> field set to true (<xref section="4.1" sectionFormat="comma" target="RFC9444"/>).</t>
        </list></t>
      <t>The <spanx style="verb">"||"</spanx> operator indicates concatenation of strings</t>
    </list></t>
  <t>Provision a DNS <spanx style="verb">TXT</spanx> record with the base64url digest value under the constructed domain validation name  <vspace blankLines='1'/>
For example, if the domain name being validated is <spanx style="verb">*.example.org</spanx>, and the account URL of <spanx style="verb">https://example.com/acme/acct/ExampleAccount</spanx> then the client would provision the following DNS record:  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
_ujmmovf2vn55tgye._acme-wildcard-challenge.example.org 300 IN TXT "LoqXcYV8...jxAjEuX0.9jg46WB3...fm21mqTI"
]]></artwork></figure>
  <vspace blankLines='1'/>
(In the above, "..." indicates that the token and the JWK thumbprint in the key authorization have been truncated to fit on the page.)</t>
  <t>Respond to the ACME server with an empty object ({}) to acknowledge that the challenge can be validated by the server  <vspace blankLines='1'/>
    <figure><artwork><![CDATA[
POST /acme/chall/Rg5dV14Gh1Q
Host: example.com
Content-Type: application/jose+json

{
  "protected": base64url({
    "alg": "ES256",
    "kid": "https://example.com/acme/acct/ExampleAccount",
    "nonce": "SS2sSl1PtspvFZ08kNtzKd",
    "url": "https://example.com/acme/chall/Rg5dV14Gh1Q"
  }),
  "payload": base64url({}),
  "signature": "Q1bURgJoEslbD1c5...3pYdSMLio57mQNN4"
}
]]></artwork></figure>
  </t>
</list></t>

<t>On receiving this response, the server validates the message and constructs and stores the key authorization from the challenge <spanx style="verb">token</spanx> value and the current client account key.</t>

<t>To validate the <spanx style="verb">dns-account-01</spanx> challenge, the server performs the following steps:</t>

<t><list style="symbols">
  <t>Compute the SHA-256 digest <xref target="FIPS180-4"/> of the stored key authorization</t>
  <t>Compute the validation domain name with the KID value in the JWS message</t>
  <t>Query for <spanx style="verb">TXT</spanx> records for the validation domain name</t>
  <t>Verify that the contents of one of the <spanx style="verb">TXT</spanx> records match the digest value</t>
</list></t>

<t>If all the above verifications succeed, then the validation is successful. If no DNS record is found, or DNS record and response payload do not pass these checks, then the server <bcp14>MUST</bcp14> fail the validation and mark the challenge as invalid.</t>

<t>The client <bcp14>SHOULD</bcp14> de-provision the resource record(s) provisioned for this challenge once the challenge is complete, i.e., once the "status" field of the challenge has the value "valid" or "invalid".</t>

<section anchor="errors-1"><name>Errors</name>

<t>The server <bcp14>SHOULD</bcp14> follow the guidelines set in <xref section="6.7" sectionFormat="comma" target="RFC8555"/> for error conditions that occur during challenge validation.</t>

<t>If the server is unable to find a <spanx style="verb">TXT</spanx> record for the validation domain name, it <bcp14>SHOULD</bcp14> include the account URL it used to construct the validation domain name in the problem document. Clients <bcp14>MUST NOT</bcp14> use or rely on the presence of this field to construct the validation domain name.</t>

</section>
<section anchor="implementation-considerations"><name>Implementation Considerations</name>

<t>As this challenge creates strong dependency on the <spanx style="verb">kid</spanx> account identifier, the server <bcp14>SHOULD</bcp14> ensure that the account identifier is not changed during the lifetime of the account. This contains the entire URI, including the ACME endpoint domain name, port, and full HTTP path.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>These challenges follow the recommendations set out in "Domain Control Validation using DNS" <xref target="I-D.draft-ietf-dnsop-domain-verification-techniques"/> for supporting multiple intermediates within the context of <xref target="RFC8555"/>.</t>

<t>In both <spanx style="verb">dns-account-01</spanx> and <spanx style="verb">dns-02</spanx>, the same security considerations apply for the integrity of authorizations (<xref section="10.2" sectionFormat="comma" target="RFC8555"/>) and DNS security (<xref section="11.2" sectionFormat="comma" target="RFC8555"/>) as in the original specification for <spanx style="verb">dns-01</spanx>. They both differ from <spanx style="verb">dns-01</spanx> in that the challenges are scoped to the particular name being validated without relying upon CAA (<xref target="RFC8659"/>).</t>

<section anchor="dns-account-01-1"><name>DNS-ACCOUNT-01</name>

<t>To allow for seamless account key rollover without the label changing, the dynamic part of the label depends on the ACME account and not the account key. This allows for long-lived labels, without the security considerations of keeping the account key static.</t>

<t>In terms of the construction of the account label prepended to the domain name, there is no need for a cryptographic hash. The goal is to simply create a long-lived and statistically distinct label of minimal size. SHA-256 was chosen due to its existing use in the <spanx style="verb">dns-01</spanx> challenge (<xref section="8.1" sectionFormat="comma" target="RFC8555"/>).</t>

<t>The first 10 bytes were picked as a tradeoff: the value needs to be short enough to stay lower than the size limits for DNS (<xref section="2.3.4" sectionFormat="comma" target="RFC1035"/>), long enough to provide sufficient probability of collision avoidance across ACME accounts, and just the right size to have Base32 require no padding. As the algorithm is used for a uniform distribution of inputs, and not for integrity, we do not consider the trimming a security issue.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<section anchor="acme-validation-method"><name>ACME Validation Method</name>

<t>The "ACME Validation Methods" registry is to be updated to include the following entries:</t>

<figure><artwork><![CDATA[
label: dns-02
identifier-type: dns
ACME: Y
Reference: This document

label: dns-account-01
identifier-type: dns
ACME: Y
Reference: This document
]]></artwork></figure>

</section>
</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">

<reference anchor="FIPS180-4" target="https://csrc.nist.gov/publications/detail/fips/180/4/final">
  <front>
    <title>Secure Hash Standard (SHS)</title>
    <author >
      <organization>National Institute of Standards and Technology</organization>
    </author>
    <date year="2015" month="August"/>
  </front>
</reference>


<reference anchor="RFC8555">
  <front>
    <title>Automatic Certificate Management Environment (ACME)</title>
    <author fullname="R. Barnes" initials="R." surname="Barnes"/>
    <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
    <author fullname="D. McCarney" initials="D." surname="McCarney"/>
    <author fullname="J. Kasten" initials="J." surname="Kasten"/>
    <date month="March" year="2019"/>
    <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="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <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="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <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="RFC4086">
  <front>
    <title>Randomness Requirements for Security</title>
    <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
    <author fullname="J. Schiller" initials="J." surname="Schiller"/>
    <author fullname="S. Crocker" initials="S." surname="Crocker"/>
    <date month="June" year="2005"/>
    <abstract>
      <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
      <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
  <seriesInfo name="RFC" value="4086"/>
  <seriesInfo name="DOI" value="10.17487/RFC4086"/>
</reference>
<reference anchor="RFC6234">
  <front>
    <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
    <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
    <author fullname="T. Hansen" initials="T." surname="Hansen"/>
    <date month="May" year="2011"/>
    <abstract>
      <t>Federal Information Processing Standard, FIPS</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6234"/>
  <seriesInfo name="DOI" value="10.17487/RFC6234"/>
</reference>
<reference anchor="RFC4648">
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4648"/>
  <seriesInfo name="DOI" value="10.17487/RFC4648"/>
</reference>
<reference anchor="RFC8659">
  <front>
    <title>DNS Certification Authority Authorization (CAA) Resource Record</title>
    <author fullname="P. Hallam-Baker" initials="P." surname="Hallam-Baker"/>
    <author fullname="R. Stradling" initials="R." surname="Stradling"/>
    <author fullname="J. Hoffman-Andrews" initials="J." surname="Hoffman-Andrews"/>
    <date month="November" year="2019"/>
    <abstract>
      <t>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.</t>
      <t>This document obsoletes RFC 6844.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8659"/>
  <seriesInfo name="DOI" value="10.17487/RFC8659"/>
</reference>
<reference anchor="RFC1035">
  <front>
    <title>Domain names - implementation and specification</title>
    <author fullname="P. Mockapetris" initials="P." surname="Mockapetris"/>
    <date month="November" year="1987"/>
    <abstract>
      <t>This RFC is the revised specification of the protocol and format used in the implementation of the Domain Name System. It obsoletes RFC-883. This memo documents the details of the domain name client - server communication.</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="13"/>
  <seriesInfo name="RFC" value="1035"/>
  <seriesInfo name="DOI" value="10.17487/RFC1035"/>
</reference>



    </references>

    <references title='Informative References' anchor="sec-informative-references">




<reference anchor="I-D.draft-ietf-dnsop-domain-verification-techniques">
   <front>
      <title>Domain Control Validation using DNS</title>
      <author fullname="Shivan Kaul Sahib" initials="S. K." surname="Sahib">
         <organization>Brave Software</organization>
      </author>
      <author fullname="Shumon Huque" initials="S." surname="Huque">
         <organization>Salesforce</organization>
      </author>
      <author fullname="Paul Wouters" initials="P." surname="Wouters">
         <organization>Aiven</organization>
      </author>
      <author fullname="Erik Nygren" initials="E." surname="Nygren">
         <organization>Akamai Technologies</organization>
      </author>
      <date day="8" month="July" year="2024"/>
      <abstract>
	 <t>   Many application services on the Internet need to verify ownership or
   control of a domain in the Domain Name System (DNS).  The general
   term for this process is &quot;Domain Control Validation&quot;, and can be done
   using a variety of methods such as email, HTTP/HTTPS, or the DNS
   itself.  This document focuses only on DNS-based methods, which
   typically involve the Application Service Provider requesting a DNS
   record with a specific format and content to be visible in the
   requester&#x27;s domain.  There is wide variation in the details of these
   methods today.  This document proposes some best practices to avoid
   known problems.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-dnsop-domain-verification-techniques-05"/>
   
</reference>
<reference anchor="RFC9444">
  <front>
    <title>Automated Certificate Management Environment (ACME) for Subdomains</title>
    <author fullname="O. Friel" initials="O." surname="Friel"/>
    <author fullname="R. Barnes" initials="R." surname="Barnes"/>
    <author fullname="T. Hollebeek" initials="T." surname="Hollebeek"/>
    <author fullname="M. Richardson" initials="M." surname="Richardson"/>
    <date month="August" year="2023"/>
    <abstract>
      <t>This document specifies how Automated Certificate Management Environment (ACME) can be used by a client to obtain a certificate for a subdomain identifier from a certification authority. Additionally, this document specifies how a client can fulfill a challenge against an ancestor domain but may not need to fulfill a challenge against the explicit subdomain if certification authority policy allows issuance of the subdomain certificate without explicit subdomain ownership proof.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9444"/>
  <seriesInfo name="DOI" value="10.17487/RFC9444"/>
</reference>



    </references>

</references>


<?line 303?>

<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

</section>


  </back>

<!-- ##markdown-source:
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
NgPGWtm0Y3ariOJeSq1lr9r1TGq36LlrWiLY9WSvU40qkm0X7J2+qrn05sax
hjDbZtLbJMO246Ntu2enaapT15lwsnE8WSfhRWY5Ulz76payCrU9T77fe+CK
FUmLkk3ZysSFJ+2jGBFBnjYatc1XgOvtvM9FcLvZyvxcDP9vFMM1eX8uiv+m
RXGSSqeRNbHQizxXYTZfjvxBiczVMdn5vf0dR/zOVw7K/vX61fnXuz/1h4P+
z7tcOvc+vaR2gnC1DH4Sus/5bAGXarZFPVVx/V3a/f17EJRd4cZufFMsUU1j
gDAylJSWsRjoDIZALgARUWGxY//1y+b/Q+u2Ri3lbqV/CHOpdG5KYsstLAVW
LJv7b5B9cP/gqCC7JjuauTF2vei+B8NohD1nfjfn2uYiN2IuPSo4OWh+blh8
blj8X2xYrDUoOiVo1t9TUiPj49Xmqb3rDrD9NX2O/DaK9HK6v4wPD7PZSvY+
dz4+dz4+ofPRtMW/ce+Ds6+t7Y9CvRaiI6SfnsuH/srGSJVg5Sm/oXfOXkuz
fq93svW4xP+LHgodF2gE/KdvxoWEPzdJPjdJ/m5NkrNpXUsQQB7zuSSOW5SG
NVOaj9s5H+F13NiCXG4kGxjBJ2X5FN0nVFfODaFMkBWVJ0t64tidOS87B3xK
NwWlyKKLeMvHr3znXmTarLxP3Nsq7IwMgra0z6kkhHJszQE9jsy6YZWn1bOU
DoiWR2JLqm4Q525KoVQdqAZAOjHK2ORpLdRvziKlkRPaI4NBoW8aHKqp5BOv
RU/YTi4OltXzfFoN+7x+dVbvpZSpCThINCU/DW0nOnXnfulTGfHk6uoFsCCb
c/Ot+ChsQ2JX60cUa4a/7QCqzrNPP376/v2fOH/qvMjkCXHEZxqLTzL42FIk
A8UqpTBR9CEIwN9m619H2OPVXM5sRMLyzG5//8bpmizcFILyG4LiFGtVehwR
MuNh2LER4cz2822DPh9wswfHgOPlNttHD9xoU3gc1p/RJ0FlKeqyhuKUKzgi
Q0K8ZW7tQT6bVJRnRlW8JUk1fCrMfuxW5L+JB7n7Ob2X2FrKkODJDsi56Ume
kCuORiUz9w8fcj239RSntuf1XOfOi0I6Fl1LY0RKFljk3rQPe4/99oTcClta
hQUrkIeqnOgtvMp9TcJubraeQbSVe9OBKXvaOA1LJ8q7oVqCY1vmdxoU/Z6l
gJCFlEnhsXXO7IlCa5VkyeXp9hIAa8c1i4mWI9fUqpS03gtPpcUee9TdNhT8
dJVkepZ6yZyaF56Zs5GImaYGK3fBjIrIsC1MumP0jmmbs4Ji445BwqzoMLZf
0ARCIxWriMxSvaMD/y41vPMIglGIAMFzDl/UZC7PclNsKDo4m8fHt3rEkesQ
cKS2raxB33Wy7oh3+gSDDzOChyz1Aqmn02EtByCpGHf60cBdM6Aot71IBpm3
EtSxIOf2XKYEhuyHH9YYyGkdZYP+vRpl+7173GHp2C8QqlVdrxRANrWH/TOO
m8XBdQjPh6G7fgV9jEEnWovPNOoWayyq39LHQwzLajbPLIH8LRpSzu9sF851
xskKXOO9J0Y2pKDGA4Zk84jTClOaSB4rSv1ZtfwtqrNAFSNLdzuTt0y5C+NQ
D44gi3SzsH5bqqcqityB9MI9lDH8XhfBe3Qx2ghAgAhmthZBnkt4WWB13d7+
EKkffS8DmlfOkKHXPAmKMr+e8FQFDb3jUPw1IxV4bMRDYWNAq4rhXfsRM+63
aPOhuG69knwu2pdD0fhKpFVfpIouf3Ixrjr5a8GJ5y9IYqOywcBvO1rvh/Zw
tAz+2Z56oZHtD63/AYJOshO4PgAA

-->

</rfc>

