<?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.5 (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-00" 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="February" day="16"/>

    <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 Resource 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 similiar 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_RESOURCE_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_RESOURCE_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/evOfKhNU60wg",
    "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.</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='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="17" month="October" year="2023"/>
      <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-03"/>
   
</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>


<?line 303?>

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

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+1b23LbxpZ951f0MA8j5ZAUqYsts3KSMJLsKJElW5TjKKlU
BAJNskUAjaAByozjfMt8y3zZrL27cSMZxyeVmpo55RcJBPqyr2tf0Oh2u61M
ZaEcivYoz3TkZTIQJzLN1FT5+CGee7E3k5GMM3EWL1WqY77eGZ08P9sVY18n
mHB6ORYncy8MZTyTpt3yJpNULmlNjOqOT65enJ12Mah78vXo4uLs8tnZuN2i
5Wc6XQ2FyYJWK9B+7EUgJEi9adZVMpt2PT+SXcN7dIPYdP1yj26/38IGBy0v
ld5QjKWfpypbtR50upilOk+G4l/hp7WQK0wNhoK2bKkkHYppHoYHTx4fZ2lu
sv1+/0l/v7WUcS6HLSHcHq+f4TpbJSD7NXZW8Uw8oye4G3kqtMt9Sbz0dDrD
XS/150Mxz7LEDPf2Ai/zstTzFzLtFYP2HmZ7NGvPm+g826O9VDbPJ1jL05EK
1N4HCQjzQvBrsmo3N79n1+sp/YErtbw8m+sUbHexqmDBWFWN4kzHShsx6pH+
oQEd8xDw4cXqVy9TOh6K8ziQicQfCP1Ex1mqJtBNyiOllVPgLWI9+dL+68Uy
27JZpFLa6IqY2LLLOFFpWF/Tw4QvC6Z9HW0u+Q3+GvGtZzK5je5nWs9CWV/y
Pljw4C9n/Gj7qk91poy40PlCmw9adUoTwveuOc6wggm9B5LAN7he6Aez2CaG
zeUN5j4oI+sbtGKdwjnUkq356fmL8eC43z0c8rwCEdirpPjaM3MmIPDSQOyM
vx7vtnkczBfD9vuDo27/2M700pmsmZxvUr8HwrPeTC/3knwSkheCTrMXyAzU
7U1VYvaw994hLmPPKrA0OOH4G4pLnuaFMCYD+nK4sp6WVBmB/+JG+vNYh3q2
arVUPK1zeN497dWsHRauk24AfFBxdylTiw7YoJvRGuqXXJphq9XtdoU3MeSi
Wat1M4daAVM5owecM1QxzMcTsXwQpb9Am6nI5lIQ9okk1Zn2ddgRMvbAPQDC
i+0jP1S0TqZxxzzIFAtZgoRPPqJDsfRCFTBZ9eVTHZVrGJmCepEbXphxOJVG
56kvBTZbAPywfknNyPd1jj3PT3uCucGisCMR5WGmklAKs4J1RwYiB70lOhpa
ZA4JY0RJSNfocEnbEr+eIArw2HLQs6KD42FKq/UJlAaGgtwnXkiQUtwRyPQH
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

-->

</rfc>

