<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.35 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-geng-acme-public-key-06" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="ACME PK Challenge">Automated Certificate Management Environment (ACME) Extension for Public Key Challenges</title>
    <seriesInfo name="Internet-Draft" value="draft-geng-acme-public-key-06"/>
    <author initials="F." surname="Geng" fullname="Feng Geng">
      <organization>Huawei Technologies</organization>
      <address>
        <email>gengfeng@huawei.com</email>
      </address>
    </author>
    <author initials="P." surname="Wu" fullname="Panyu Wu">
      <organization>Huawei Technologies</organization>
      <address>
        <email>wupanyu3@huawei.com</email>
      </address>
    </author>
    <author initials="L." surname="Xia" fullname="Liang Xia">
      <organization>Huawei Technologies</organization>
      <address>
        <email>frank.xialiang@huawei.com</email>
      </address>
    </author>
    <author initials="X." surname="Chen" fullname="Xin Chen">
      <organization>TrustAsia</organization>
      <address>
        <email>palos.chen@trustasia.com</email>
      </address>
    </author>
    <date year="2026" month="April" day="18"/>
    <workgroup>Automated Certificate Management Environment Working Group</workgroup>
    <keyword/>
    <keyword/>
    <keyword/>
    <abstract>
      <?line 58?>

<t>The current ACME protocol <xref target="RFC8555"/> requires applicants to submit a PKCS#10 Certificate Signing Request (CSR) during the finalization phase. The construction, ASN.1 encoding, and transmission of the CSR impose additional implementation burdens on both the client (especially resource-constrained devices) and the server. Moreover, the CSR cannot prevent a public key from being replaced by an intermediary at the protocol level.</t>
      <t>This document introduces the "pk-01" challenge extension based on the ACME protocol. Its core mechanism is as follows: the applicant declares the public key to be authenticated during the "newOrder" phase and completes the Proof of Possession (PoP) by signing with the private key during the challenge phase. Since the public key is declared when the order is created and verified during the challenge phase, there is no need to submit a CSR during the finalization phase; the ACME server can issue the certificate directly based on the verified public key, thereby eliminating the CSR at the protocol level.</t>
      <t>The "pk-01" challenge supports two verification modes via the <tt>pop_mode</tt> field:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Asynchronous Mode (Async)</strong>: The applicant pre-deploys a signature proof to a designated location (such as a DNS TXT record, HTTP path, or email reply). The ACME server then performs the verification query asynchronously, thereby completing dual verification of both control over the identifier and proof of private key ownership.</t>
        </li>
        <li>
          <t><strong>Synchronous Mode (Sync)</strong>: The ACME server issues a random number (<tt>nonce</tt>) in the challenge object and performs dual verification—confirming control of the identifier and proof of private key ownership—through a real-time Lightweight TLS handshake with the applicant, who must remain online during the verification process.</t>
        </li>
      </ol>
      <t>The challenge object declares the available delivery methods via the <tt>supported_delivery</tt> field, and the client selects one of them to choose an authentication method and resource deployment.</t>
    </abstract>
  </front>
  <middle>
    <?line 71?>

<section anchor="intro">
      <name>Introduction</name>
      <section anchor="background-and-motivation">
        <name>Background and Motivation</name>
        <t>In the current ACME process, applicants must separately generate and submit a PKCS#10 CSR during the "finalize" phase, which presents the following issues:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Implementation Burden</strong>: CSR requires clients to implement ASN.1 encoding, DER format construction, and PKCS#10 encapsulation. For standard Domain Validation (DV) certificates and resource-constrained devices, this introduces unnecessary complexity.</t>
          </li>
          <li>
            <t><strong>Semantic Redundancy</strong>: In the ACME certificate scenario, the certificate’s subject information can be provided through existing methods; the CSR serves solely as a carrier for transmitting the public key, and other fields (such as the Subject DN) are typically ignored by the CA.</t>
          </li>
          <li>
            <t><strong>Post-Quantum Migration</strong>: The signature sizes of post-quantum signature algorithms (such as ML-DSA and SLH-DSA) are significantly larger than those of traditional algorithms, and ASN.1 toolchains do not yet fully support the identifiers for these algorithms; as a result, CSR-based processes face higher compatibility risks in post-quantum scenarios. This extension provides a more streamlined migration path for the introduction of post-quantum cryptography by moving the public key declaration to newOrder, transmitting it in the original SPKI format, and using the declared key directly to complete the PoP signature.</t>
          </li>
        </ul>
        <t>The solution proposed in this document is to move the public key declaration to the "newOrder" phase and perform ownership verification during the challenge phase using methods such as private key signatures. As a result, the "finalize" phase does not require a CSR; instead, the ACME server issues the certificate directly using the verified public key and the <tt>identifiers</tt> in the order.</t>
        <t>This extension minimizes changes to the existing ACME infrastructure, adding only three top-level fields — <tt>public_key</tt>, <tt>pop_mode</tt>, and <tt>csr_less</tt> — to the "newOrder" request and introducing a new challenge type, "pk-01". No modifications are required to the behavior during the finalization phase.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key terms used in this document are defined as follows:</t>
      <ul spacing="normal">
        <li>
          <t><strong>End Entity (EE, Applicant)</strong>: The entity that initiates the ACME certificate request and holds the private key to be verified.</t>
        </li>
        <li>
          <t><strong>ACME Server (AS)</strong>: A Certificate Authority (CA) or its delegated service that implements the ACME protocol.</t>
        </li>
        <li>
          <t><strong>Claimed Public Key</strong>: The public key to be authenticated, declared by the applicant in the <tt>public_key</tt> field of the "newOrder" request, in Base64URL-encoded Subject Public Key Information (SPKI) format <xref target="RFC5480"/>. The claimed public key <strong>MUST</strong> correspond to the private key actually held by the applicant; the ACME server <strong>MUST</strong> perform signature verification using the claimed public key and <strong>MUST</strong> perform a byte-by-byte comparison with the public key in the final certificate before issuing it.</t>
        </li>
        <li>
          <t><strong>Proof of Possession (PoP)</strong>: A mechanism whereby an applicant demonstrates, through cryptographic signature operations, that they actually possess the private key corresponding to the declared public key.</t>
        </li>
        <li>
          <t><strong>Extended Key Authorization Value (keyAuthorization)</strong>: An extended version of the challenge-response value defined in this document. It builds upon the standard ACME <tt>keyAuthorization</tt> ( token +  "." +  base64url (JWK_Thumbprint (accountKey) )). It incorporates the normalized string of the order’s full identifier (<tt>identifiers_canonical</tt>) to bind the order scope, and is covered by a signature using the declared private key, serving to simultaneously verify both resource control and private key ownership (see Section 4 for details).</t>
        </li>
        <li>
          <t><strong><tt>public_key</tt></strong>: A new top-level extension field added to the "newOrder" request, containing the declared public key (SPKI encoded in Base64URL).</t>
        </li>
        <li>
          <t><strong><tt>pop_mode</tt></strong>: A top-level field added to the newOrder request in this document, used by the client to specify the selected PoP validation mode (<tt>async</tt> or <tt>sync</tt>, or other extensible mode strings).</t>
        </li>
        <li>
          <t><strong><tt>csr_less</tt></strong>: A new top-level boolean field added to the "newOrder" request, the default value is false. Controls whether the CSR submission is omitted during the finalization phase: "true" indicates that the certificate is issued directly using the declared public key; "false" indicates that a standard PKCS#10 CSR must still be submitted during the finalize phase, and the "pk-01" challenge is executed as an additional public key pre-check step.</t>
        </li>
        <li>
          <t><strong>usage context</strong>: A fixed prefix consisting of 64 bytes of <tt>0x20</tt> (ASCII space), followed by the fixed ASCII string "ACME-pk-01", and a null byte (<tt>\x00</tt>), shall serve as the domain-separation prefix for all "pk-01" signature messages. It is denoted as <tt>(SP × 64) || "ACME-pk-01\x00"</tt>, where <tt>SP</tt> represents a single <tt>0x20</tt> byte.</t>
        </li>
        <li>
          <t><strong><tt>identifiers_canonical</tt></strong>: The canonical string representation of all identifiers in an order, used to bind the full order scope in the signature message. Construction method: sort all entries in the order’s <tt>identifiers</tt> array in lexicographical order by <tt>(type, value)</tt> in ascending order, format each entry as <tt>"type:value"</tt>, and concatenate the entries with <tt>","</tt> without whitespace. Example: For an order containing <tt>[{dns, www.example.com}, {dns, example.com}]</tt>, <tt>identifiers_canonical = "dns:example.com,dns:www.example.com"</tt>; For a single-identifier order <tt>[{dns, example.com}]</tt>, <tt>identifiers_canonical = "dns:example.com"</tt>.</t>
        </li>
        <li>
          <t><strong><tt>supported_delivery</tt></strong>: A list (array of strings) of available delivery methods declared by the AS in the challenge object. In asynchronous mode, this may include "<tt>dns</tt>", "<tt>http</tt>", and "<tt>email</tt>"; in synchronous mode, it may include "<tt>tls-handshake</tt>".</t>
        </li>
        <li>
          <t><strong><tt>delivery</tt></strong>: A field included by the client in the body of the challenge-response POST request, specifying the selected delivery method.</t>
        </li>
        <li>
          <t><strong><tt>acme-pk/1</tt></strong>: A TLS Application Layer Protocol Negotiation <xref target="RFC7301"/> identifier defined in this document, intended exclusively for TLS-HANDSHAKE delivery in the "pk-01" challenge-synchronization mode. When the EE receives a connection on port 443 that carries this identifier, it performs the TLS handshake using its <strong>existing TLS certificate for the domain</strong> (without constructing a new certificate), and returns the raw <tt>proof</tt> bytes directly as TLS application data upon completion of the handshake. During the handshake, the AS <strong>MUST</strong> skip certificate chain trust validation, and <strong>SHOULD</strong> verify that the server certificate public key matches <tt>newOrder.public_key</tt> on a byte-by-byte basis. "<tt>acme-pk/1</tt>" and "<tt>acme-tls/1</tt>", as defined in <xref target="RFC8737"/>, are two distinct application-layer protocols (they have different formats and cannot be used interchangeably): "<tt>acme-tls/1</tt>" requires the construction of a self-signed certificate containing OID extensions, whereas "<tt>acme-pk/1</tt>" directly transmits the raw signature bytes.</t>
        </li>
      </ul>
      <t>The key words "<strong>MUST</strong>", "<strong>MUST NOT</strong>", "<strong>REQUIRED</strong>", "<strong>SHALL</strong>", "<strong>SHALL NOT</strong>", "<strong>SHOULD</strong>", "<strong>SHOULD NOT</strong>", "<strong>RECOMMENDED</strong>", "<strong>NOT RECOMMENDED</strong>", "<strong>MAY</strong>", and "<strong>OPTIONAL</strong>" 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>
    </section>
    <section anchor="protocol-extension-neworder-fields">
      <name>Protocol Extension: newOrder Fields</name>
      <t>This document introduces minimal extensions to the "newOrder" request: the <tt>identifiers</tt> field retains its standard ACME semantics and carries the certificate subject information; a new top-level field, <tt>public_key</tt>, is added to carry the declared public key; a new top-level field, <tt>pop_mode</tt>, is added for the client to declare the selected validation mode; and a new top-level boolean field, <tt>csr_less</tt>, is added to control whether the CSR submission is omitted during the finalization phase.</t>
      <t>After the ACME server receives a "newOrder" request containing the <tt>public_key</tt> field, it will issue a "pk-01" challenge for each identifier. When <tt>csr_less</tt> is set to "true", the server issues the certificate directly during the finalize phase based on the verified declared public key and the <tt>identifiers</tt>; when <tt>csr_less</tt> is set to "false" (default), the applicant must still submit a CSR during the finalize phase, and the "pk-01" challenge is executed as an additional public key pre-check step.</t>
      <t>If the <tt>public_key</tt> field does not exist, the ACME server <strong>SHOULD</strong> process the request according to the standard ACME procedure; this extension does not apply.</t>
      <t>The <tt>pk-01</tt> challenge <strong>MUST NOT</strong> support the authorization reuse mechanism defined in <xref target="RFC8555"/>. Every "newOrder" request containing the <tt>public_key</tt> field <strong>MUST</strong> trigger a full new challenge flow. The server <strong>MUST NOT</strong> reuse any existing authorization, regardless of its validity status or whether the public key matches. This restriction eliminates binding ambiguity between authorization state and order public keys, and prevents proxy clients from constructing proofs for different orders using existing authorizations. By the same reasoning, this extension <strong>MUST NOT</strong> support the pre-authorization mechanism.</t>
      <section anchor="description-of-new-fields">
        <name>Description of New Fields</name>
        <table>
          <thead>
            <tr>
              <th align="left">Field name</th>
              <th align="left">Type</th>
              <th align="left">Existence</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>public_key</tt></td>
              <td align="left">String</td>
              <td align="left">OPTIONAL</td>
              <td align="left">Claimed public key, SPKI <xref target="RFC5480"/> encoded in Base64URL. If present, triggers the "pk-01" challenge and the CSR-less issuance process.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>pop_mode</tt></td>
              <td align="left">String</td>
              <td align="left">OPTIONAL</td>
              <td align="left">PoP verification mode declared by the client: "<tt>async</tt>" (the applicant pre-deploys the proof, and the AS verifies it independently) or "<tt>sync</tt>" (requires online interaction with the applicant). This can be extended to other third-party modes.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>csr_less</tt></td>
              <td align="left">Boolean</td>
              <td align="left">OPTIONAL</td>
              <td align="left">Whether to skip the CSR submission during the finalization phase. "true": Issue directly using the declared public key; "false" (default): A CSR must still be submitted, with "pk-01" serving as a pre-check step.</td>
            </tr>
          </tbody>
        </table>
        <t>The rules for the <tt>pop_mode</tt> field are as follows:</t>
        <ul spacing="normal">
          <li>
            <t>"<tt>async</tt>" (Asynchronous mode): The applicant pre-deploys the PoP signature proof to a specified resource location, and the AS independently queries and verifies it at any time; the applicant does not need to be online during verification. Supported delivery methods are declared by the <tt>supported_delivery</tt> field of the challenge target and can be "<tt>dns</tt>", "<tt>http</tt>", or "<tt>email</tt>".</t>
          </li>
          <li>
            <t>"<tt>sync</tt>" (Synchronous mode): AS performs authentication by interacting directly with the applicant's server via a real-time protocol; the applicant <strong>MUST</strong> remain online during authentication. Supported delivery methods are specified by the <tt>supported_delivery</tt> declaration; a typical implementation is a simplified "tls-handshake" handshake.</t>
          </li>
          <li>
            <t>If <tt>pop_mode</tt> is omitted, CA <strong>SHOULD</strong> use the "<tt>async</tt>" by default.</t>
          </li>
          <li>
            <t>If the CA does not support the scheme declared by the client, it <strong>SHOULD</strong> return an error in the response.</t>
          </li>
        </ul>
      </section>
      <section anchor="neworder-request-example">
        <name>newOrder Request Example</name>
        <section anchor="asynchronous-modemulti-identifier-dns-order">
          <name>Asynchronous Mode—Multi-identifier DNS Order</name>
          <artwork><![CDATA[
{
  "identifiers": [
    { "type": "dns", "value": "example.com" }
    { "type": "dns", "value": "www.example.com" }
  ],
  "public_key": "<Claimed Public Key, Base64URL-encoded SPKI>",
  "pop_mode": "async",
  "csr_less": true
}
]]></artwork>
        </section>
        <section anchor="synchronization-mode-dns-identifier">
          <name>Synchronization Mode — DNS Identifier</name>
          <artwork><![CDATA[
{
  "identifiers": [
    { "type": "dns", "value": "example.com" }
  ],
  "public_key": "<Claimed Public Key, Base64URL-encoded SPKI>",
  "pop_mode": "sync",
  "csr_less": true
}
]]></artwork>
        </section>
        <section anchor="asynchronous-mode-email-certificate-scenario">
          <name>Asynchronous Mode — Email Certificate Scenario</name>
          <artwork><![CDATA[
{
  "identifiers": [
    { "type": "rfc822name", "value": "user@example.com" }
  ],
  "public_key": "<Claimed Public Key, Base64URL-encoded SPKI>",
  "pop_mode": "async",
  "csr_less": true
}
]]></artwork>
        </section>
      </section>
    </section>
    <section anchor="extended-keyauthorization">
      <name>Extended KeyAuthorization</name>
      <t>The "pk-01" extends the standard ACME certificate format by introducing domain identifier binding and private key signature verification, thereby validating both control over the resource and ownership of the private key.</t>
      <section anchor="base-keyauthorization-value">
        <name>Base KeyAuthorization Value</name>
        <t>The base keyAuthorization value is consistent with <xref target="RFC8555"/>:</t>
        <artwork><![CDATA[
keyAuthorization = token || "." || base64url(JWK_Thumbprint(accountKey))
]]></artwork>
      </section>
      <section anchor="signature-construction-in-asynchronous-mode">
        <name>Signature Construction in Asynchronous Mode</name>
        <t>In asynchronous mode, the signature message (<tt>to_sign</tt>) is constructed by appending the usage context prefix and the canonical string of all order identifiers to the <tt>keyAuthorization</tt>. The usage context prefix (see definition in §2 <tt>usage context</tt>) provides domain separation for the signature message, while binding the full set of order identifiers prevents proxies from using single-domain proofs to request multi-domain certificates.</t>
        <artwork><![CDATA[
to_sign_async = (SP × 64) || "ACME-pk-01\x00" || keyAuthorization || "." || identifiers_canonical
]]></artwork>
        <t>where <tt>SP × 64</tt> denotes 64 consecutive ASCII space bytes (0x20), and the construction of <tt>identifiers_canonical</tt> is defined in § 2.</t>
        <t>Proof of Possession Value:</t>
        <artwork><![CDATA[
proof = base64url(Sign(claimedPrivateKey, to_sign_async))
]]></artwork>
        <t>For the semantics of <tt>Sign(key, message)</tt>, see §4.4.</t>
        <t><strong>Multi-Identifier Order Notes</strong>: For an order containing multiple identifiers, the server issues a separate "pk-01" challenge for each identifier, with a corresponding <tt>token</tt> and validation URL for each challenge. The client constructs a <tt>keyAuthorization</tt> (using the <tt>token</tt> of each challenge) and a <tt>proof</tt> individually for each challenge. However, the signature message for all challenges <strong>MUST</strong> use the same <tt>identifiers_canonical</tt> (covering all identifiers in the order). This ensures that each single-domain proof is cryptographically bound to the full scope of the order, so that an individual proof cannot be reused to request an order with a different set of identifiers.</t>
        <t>Deployment locations for proofs of each identifier type:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Identifier Types</th>
              <th align="left">Delivery type</th>
              <th align="left">Deployment Location</th>
              <th align="left">Search Method</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>dns</tt></td>
              <td align="left">
                <tt>dns</tt></td>
              <td align="left">DNS TXT record <tt>_acme-challenge.&lt;domain&gt;</tt></td>
              <td align="left">DNS Query</td>
            </tr>
            <tr>
              <td align="left">
                <tt>dns</tt></td>
              <td align="left">
                <tt>http</tt></td>
              <td align="left">HTTP path <tt>/.well-known/acme-challenge/&lt;token&gt;</tt></td>
              <td align="left">HTTP Query</td>
            </tr>
            <tr>
              <td align="left">
                <tt>rfc822name</tt></td>
              <td align="left">
                <tt>email</tt></td>
              <td align="left">Body of the S/MIME email reply</td>
              <td align="left">Email Receipt</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="signature-construction-in-synchronous-mode">
        <name>Signature Construction in Synchronous Mode</name>
        <t>In synchronous mode, the <tt>token</tt> in a signed message is replaced with a new random number (<tt>nonce</tt>) issued by the CA to ensure the timeliness of the signature, and the message is similarly appended with a usage context prefix and the canonical string of all order identifiers.</t>
        <artwork><![CDATA[
keyAuthorization_sync = nonce || "." || base64url(JWK_Thumbprint(accountKey))
to_sign_sync = (SP × 64) || "ACME-pk-01\x00" || keyAuthorization_sync || "." || identifiers_canonical
]]></artwork>
        <t>Proof of Possession Value:</t>
        <artwork><![CDATA[
proof = base64url(Sign(claimedPrivateKey, to_sign_sync))
]]></artwork>
        <t>The <tt>nonce</tt> is issued by the CA in the challenge object (see §5.4.1) and has at least 128 bits of entropy. The semantics of <tt>Sign(key, message)</tt> are described in §4.4.</t>
        <t>A typical implementation of the synchronous mode is the TLS-HANDSHAKE handshake: the CA initiates a TLS connection to the applicant’s domain (using the protocol identifier "<tt>acme-pk/1</tt>"), and the applicant’s server returns a <tt>proof</tt> as application data during the handshake. The CA simultaneously verifies both domain reachability (control) and the signature (proof of private key possession). The time-sensitive nature of the <tt>nonce</tt> ensures that the signature cannot be precomputed.</t>
      </section>
      <section anchor="signature-algorithm-convention">
        <name>Signature Algorithm Convention</name>
        <t>In this document, <tt>Sign(key, message)</tt> denotes performing a complete signing operation on the raw bytes of <tt>message</tt> (the algorithm handles the hashing internally; the caller must not perform any additional hashing on <tt>message</tt> beforehand). The specific algorithm is determined by the key type of the declared public key:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Key type</th>
              <th align="left">Signature Algorithm</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">EC P-256</td>
              <td align="left">ECDSA with SHA-256</td>
            </tr>
            <tr>
              <td align="left">EC P-384</td>
              <td align="left">ECDSA with SHA-384</td>
            </tr>
            <tr>
              <td align="left">Ed25519</td>
              <td align="left">Ed25519 (PureEdDSA, RFC 8032)</td>
            </tr>
            <tr>
              <td align="left">RSA</td>
              <td align="left">RSASSA-PSS with SHA-256</td>
            </tr>
          </tbody>
        </table>
        <t>The server <strong>SHOULD</strong> reject signature algorithms that are not included in the table above or do not comply with the current security baseline requirements, and explicitly declare the set of supported algorithms in the metadata of the Directory resource. Clients <strong>MUST</strong> use algorithms that correspond to the declared public key types; algorithm mismatches will result in signature verification failure.</t>
        <section anchor="explanation-of-post-quantum-algorithms">
          <name>Explanation of Post-Quantum Algorithms</name>
          <t>The set of algorithms currently specified in this document consists primarily of traditional cryptographic algorithms. For post-quantum migration scenarios, implementers may refer to NIST post-quantum standardized algorithms (such as ML-DSA/CRYSTALS-Dilithium [FIPS-204] and SLH-DSA/SPHINCS+ [FIPS-205]), whose algorithm identifiers and SPKI formats have been defined by relevant standards. Servers may negotiate the set of supported post-quantum algorithms through Directory metadata.</t>
          <t>Post-quantum signature algorithms produce larger signatures than traditional algorithms, but they still fit within the capacity of DNS TXT records. Taking ML-DSA-87 as an example, its signature is approximately 4627 bytes in length, or about 6170 bytes after Base64 encoding—well below the practical maximum size of a single DNS TXT record (<xref target="RFC1035"/> defines a maximum of 255 bytes per character string, but a single TXT resource record may contain multiple strings, supporting tens of KB in practice). DNS TXT records also support direct storage of binary data without Base64 encoding, which further reduces storage overhead. For large signatures, the client MUST split the data into multiple character strings and write them into the same TXT record as described in § 5.1.1.</t>
          <t>All delivery methods support post-quantum algorithms, and implementers may choose freely based on their deployment environment.</t>
          <ul spacing="normal">
            <li>
              <t><strong>DNS Delivery</strong>: Suitable for scenarios where DNS write permissions are available. Large signatures <strong>MUST</strong> be split into multiple strings for recording. If the DNS UDP response exceeds the EDNS0 payload size (typically around 4096 bytes), it will fall back to TCP. Support for TCP fallback varies across some DNS infrastructures, which implementers should take into consideration during deployment.</t>
            </li>
            <li>
              <t><strong>HTTP Delivery</strong>: There are no artificial size limits on HTTP response bodies, allowing post-quantum signatures to be transmitted directly without additional constraints.</t>
            </li>
            <li>
              <t><strong>TLS-HANDSHAKE Delivery (Synchronous Mode)</strong>: The application data layer imposes no message size restrictions, and the <tt>nonce</tt> mechanism provides built-in freshness guarantees, making this a viable option as well.</t>
            </li>
          </ul>
          <t>The server <strong>SHOULD</strong> declare the set of supported post-quantum algorithms and their corresponding signature lengths in the Directory metadata, for the client to reference when selecting a delivery method.</t>
        </section>
      </section>
    </section>
    <section anchor="the-pk-01-challenge">
      <name>The pk-01 Challenge</name>
      <t>The "pk-01" challenge distinguishes between asynchronous and synchronous modes via the <tt>pop_mode</tt> field in "newOrder". The challenge object declares the list of delivery methods supported by the AS via the <tt>supported_delivery</tt> field, and the client specifies the selected method via the <tt>delivery</tt> field in the POST response. All challenge objects adhere to the structure defined in <xref target="RFC8555"/> §8, and the semantics of the standard fields (<tt>url</tt>, <tt>status</tt>, <tt>validated</tt>, <tt>error</tt>) remain unchanged.</t>
      <section anchor="asynchronous-mode-of-dns">
        <name>Asynchronous mode of DNS</name>
        <section anchor="challenge-object">
          <name>Challenge Object</name>
          <ul spacing="normal">
            <li>
              <t><strong>type</strong>: "pk-01"</t>
            </li>
            <li>
              <t><strong>token</strong>: Unpredictable random challenge token (Base64URL-encoded, with an entropy of at least 128 bits) <xref target="RFC4086"/>.</t>
            </li>
          </ul>
          <artwork><![CDATA[
{
  "type": "pk-01",
  "url": "https://acme.example.com/acme/chall/abc123",
  "status": "pending",
  "token": "evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA",
  "supported_delivery": ["dns", "http"]
}
]]></artwork>
          <t><strong>Note (DNS TXT Record Length)</strong>: The maximum length of a single DNS TXT record is 255 bytes (<xref target="RFC1035"/>). The length of the Base64URL-encoded signature value varies depending on the key type: EC P-256/Ed25519 is approximately 86 characters (well below the limit); RSA-2048 is approximately 342 characters, and RSA-4096 is approximately 683 characters (both exceed the single-string limit). If the signature value exceeds 255 bytes, the client <strong>MUST</strong> split it into multiple strings, each no longer than 255 bytes, and write them into the same TXT resource record ( <xref target="RFC4408"/> §3.1.3), and the server <strong>MUST</strong> concatenate the multiple strings in order to reconstruct the original string before performing signature verification. Servers <strong>SHOULD</strong> declare the supported key types and corresponding signature lengths in the Directory metadata to guide clients in selecting the appropriate key type. For DNS delivery of post-quantum algorithm signatures, large signatures <strong>MUST</strong> be split into multiple chunks and written according to the rules described above. If a DNS UDP response exceeds the EDNS0 payload limit (approximately 4096 bytes), the server will fall back to TCP. Support for TCP fallback varies across some DNS infrastructures, which implementers <strong>MUST</strong> evaluate during deployment. All delivery methods support post-quantum algorithms; for details, see Section 4.4 (Post-Quantum Algorithms).</t>
        </section>
        <section anchor="client-preparation-steps">
          <name>Client Preparation Steps</name>
          <t>1) Construct the base keyAuthorization using the standard ACME format:</t>
          <artwork><![CDATA[
keyAuthorization = token || "." || base64url(JWK_Thumbprint(accountKey))
]]></artwork>
          <t>2) Construct the signed message (see §4.4 for the <tt>Sign</tt> semantics):</t>
          <artwork><![CDATA[
identifiers_canonical = All identifiers are sorted lexicographically by (type, value), formatted as "type:value" and concatenated with ",".
to_sign = (SP × 64) || "ACME-pk-01\x00" || keyAuthorization || "." || identifiers_canonical
]]></artwork>
          <t>3) Calculate the proof using the claimed private key:</t>
          <artwork><![CDATA[
proof = base64url(Sign(claimedPrivateKey, to_sign))
]]></artwork>
          <t>4) Write <tt>proof</tt> to the <tt>_acme-challenge.&lt;domain&gt;</tt> DNS TXT record for the domain:</t>
          <artwork><![CDATA[
_acme-challenge.example.com.  120  IN  TXT  "<proof>"
]]></artwork>
          <t>5) Send a POST request to "url" with the payload <tt>{"delivery": "dns"}</tt> to notify the server that the allocation is complete and specify that DNS delivery is selected.</t>
        </section>
        <section anchor="server-validation-steps">
          <name>Server Validation Steps</name>
          <t>1) Look up the <tt>_acme-challenge.&lt;domain&gt;</tt> TXT resource record to retrieve the <tt>proof</tt>.</t>
          <t>2) Rebuild local signature message:</t>
          <artwork><![CDATA[
keyAuthorization = token || "." || base64url(JWK_Thumbprint(accountKey))
identifiers_canonical = Reconstructed from the order record as defined in Section 2.
to_sign = (SP × 64) || "ACME-pk-01\x00" || keyAuthorization || "." || identifiers_canonical
]]></artwork>
          <t>3) Verify the signature of <tt>proof</tt> using <tt>public_key</tt> (the declared public key) (see §4.4 for the semantics of <tt>Sign</tt>).</t>
          <t>4) If validation passes, set the challenge status to "valid"; if validation fails, set it to "invalid".</t>
          <t>The DNS query itself confirms the applicant's control over the domain's DNS zone, while the signature verification verifies ownership of the private key; both verifications are completed simultaneously in a single operation.</t>
        </section>
      </section>
      <section anchor="asynchronous-mode-of-http">
        <name>Asynchronous mode of HTTP</name>
        <t>The asynchronous mode supports deploying PoP proofs to an HTTP path on a domain, which the AS retrieves independently via a GET request. Unlike DNS delivery, this method does not require DNS write permissions, but the applicant’s HTTP server <strong>MUST</strong> be accessible from the outside. The applicant does not need to remain online while the AS performs verification.</t>
        <section anchor="challenge-object-1">
          <name>Challenge Object</name>
          <artwork><![CDATA[
{
  "type": "pk-01",
  "url": "https://acme.example.com/acme/chall/def456",
  "status": "pending",
  "token": "DGyRejmCefe7v4NfDGDKfA",
  "supported_delivery": ["dns", "http"]
}
]]></artwork>
        </section>
        <section anchor="client-preparation-steps-1">
          <name>Client Preparation Steps</name>
          <t>1) Construct a base keyAuthorization value using the standard ACME method (using <tt>token</tt>):</t>
          <artwork><![CDATA[
keyAuthorization = token || "." || base64url(JWK_Thumbprint(accountKey))
]]></artwork>
          <t>2) Construct a signed message (same as the asynchronous DNS mode, using <tt>token</tt>):</t>
          <artwork><![CDATA[
identifiers_canonical = Constructed as defined in Section 2.
to_sign = (SP × 64) || "ACME-pk-01\x00" || keyAuthorization || "." || identifiers_canonical
]]></artwork>
          <t>3) Calculate the proof using the claimed private key:</t>
          <artwork><![CDATA[
proof = base64url(Sign(claimedPrivateKey, to_sign))
]]></artwork>
          <t>4) Deploy <tt>proof</tt> to the following HTTP path (using <tt>token</tt> as part of the path):</t>
          <artwork><![CDATA[
http://<domain>/.well-known/acme-challenge/<token>
]]></artwork>
          <t>5) Send a POST request to "url" with <tt>{"delivery": "http"}</tt> in the request body to notify the server that it can proceed with verification.</t>
        </section>
        <section anchor="server-validation-steps-1">
          <name>Server Validation Steps</name>
          <t>1) Send an HTTP GET request to <tt>http://&lt;domain&gt;/.well-known/acme-challenge/&lt;token&gt;</tt> and retrieve the response body as <tt>proof</tt>. A successful HTTP GET request confirms the applicant's control over the domain's HTTP service.</t>
          <t>2) Reconstruct the signature message locally:</t>
          <artwork><![CDATA[
keyAuthorization = token || "." || base64url(JWK_Thumbprint(accountKey))
identifiers_canonical = Reconstructed from the order record as defined in Section 2.
to_sign = (SP × 64) || "ACME-pk-01\x00" || keyAuthorization || "." || identifiers_canonical
]]></artwork>
          <t>3) Verify the signature of <tt>proof</tt> using <tt>public_key</tt> (the claimed public key) (see §4.4 for the semantics of <tt>Sign</tt>).</t>
          <t>4) If validation passes, set the challenge status to "valid"; if validation fails, set it to "invalid".</t>
          <t>The HTTP GET request verifies domain ownership (HTTP reachability), and the signature verification confirms possession of the private key.</t>
        </section>
      </section>
      <section anchor="email-scenario">
        <name>Email Scenario</name>
        <t>The "pk-01" email scenario is based on the "email-reply-00" challenge mechanism defined in <xref target="RFC8823"/> and is suitable for email certificate application scenarios such as S/MIME (using the <tt>rfc822name</tt> type identifier); it always uses the asynchronous mode.</t>
        <section anchor="challenge-object-2">
          <name>Challenge Object</name>
          <ul spacing="normal">
            <li>
              <t><strong>type</strong>: "pk-01"</t>
            </li>
            <li>
              <t><strong>token</strong>:  Unpredictable random challenge token (Base64URL-encoded, with an entropy of at least 128 bits) <xref target="RFC4086"/>.</t>
            </li>
          </ul>
        </section>
        <section anchor="client-preparation-steps-2">
          <name>Client Preparation Steps</name>
          <t>1) The ACME server sends a challenge email containing a <tt>token</tt> to the email address associated with the order.</t>
          <t>2) The applicant constructs a signed message in accordance with §4.2 (including the prefix <tt>(SP × 64) || "ACME-pk-01\x00"</tt>, where <tt>identifiers_canonical</tt> includes email address identifiers, such as "rfc822name:user@example.com") and computes <tt>proof</tt>.</t>
          <t>3) Send the <tt>proof</tt> as the body of a reply to the server's specified address in an S/MIME email.</t>
          <t>4) Send a POST request to "url" with the payload <tt>{“delivery”: “email”}</tt> to notify the server that the email has been sent.</t>
        </section>
        <section anchor="server-validation-steps-2">
          <name>Server Validation Steps</name>
          <t>The server receives the applicant's reply email, extracts the <tt>proof</tt> from the email body, and performs signature verification using the same logic as in §5.1.3 (<tt>identifiers_canonical</tt> includes email address identifiers). If the verification passes, the challenge status is set to "valid".</t>
        </section>
      </section>
      <section anchor="synchronous-mode-of-tls-handshake">
        <name>Synchronous mode of TLS-HANDSHAKE</name>
        <t>In synchronous mode, the AS performs real-time verification through a direct TLS handshake with the applicant’s server; the applicant <strong>MUST</strong> remain online during the verification process. This document defines a new protocol identifier, "<tt>acme-pk/1</tt>" (see §2 and §8.3) for this handshake negotiation.</t>
        <t>The applicant listens for connections using the token <tt>"acme-pk/1"</tt> on port 443 of the domain name, completes the handshake using the domain’s existing TLS certificate (without constructing a new certificate), and returns the raw <tt>proof</tt> bytes directly as TLS application data upon handshake completion. When initiating the connection, the AS <strong>MUST</strong> skip certificate chain trust validation (since the EE may use a self-signed certificate or a certificate not yet issued), and <strong>SHOULD</strong> verify that the server certificate public key is byte-for-byte identical to <tt>newOrder.public_key</tt> for additional binding assurance. This scheme is compatible with TLS 1.2 and TLS 1.3, where the extension is natively supported in both versions.</t>
        <t>"<tt>acme-pk/1</tt>" is a different application-layer protocol from  "<tt>acme-tls/1</tt>" as defined in <xref target="RFC8737"/>: "<tt>acme-tls/1</tt>" requires the construction of a self-signed X.509 certificate containing OID extensions; in the "<tt>acme-pk/1</tt>" handshake, the server directly returns the raw <tt>proof</tt> bytes in the TLS application data, resulting in a simpler implementation with no additional restrictions on post-quantum large-size signatures.</t>
        <section anchor="challenge-object-3">
          <name>Challenge Object</name>
          <t>The sync mode challenge object includes the <tt>nonce</tt> and <tt>supported_delivery</tt> fields:</t>
          <ul spacing="normal">
            <li>
              <t><strong>type</strong>: "pk-01"</t>
            </li>
            <li>
              <t><strong>nonce</strong>: A new random number generated by CA specifically for this challenge (Base64URL-encoded, with an entropy of at least 128 bits).</t>
            </li>
            <li>
              <t><strong>supported_delivery</strong>：<tt>["tls-handshake"]</tt></t>
            </li>
          </ul>
          <artwork><![CDATA[
{
  "type": "pk-01",
  "url": "https://acme.example.com/acme/chall/sync789",
  "status": "pending",
  "nonce": "Kz3mVpQeRd9fLwYbN5hXuT6oJsIc0vAg2nEp1yMrFqZ",
  "supported_delivery": ["tls-handshake"]
}
]]></artwork>
        </section>
        <section anchor="client-preparation-steps-3">
          <name>Client Preparation Steps</name>
          <t>1) Retrieve the <tt>nonce</tt> from the challenge source. If it is missing, the client <strong>MUST</strong> terminate and report an error.</t>
          <t>2) Construct a synchronous signed message (see §4.4 for the <tt>Sign</tt> semantics):</t>
          <artwork><![CDATA[
keyAuthorization_sync = nonce || "." || base64url(JWK_Thumbprint(accountKey))
identifiers_canonical = Constructed as defined in Section 2.
to_sign = (SP × 64) || "ACME-pk-01\x00" || keyAuthorization_sync || "." || identifiers_canonical
]]></artwork>
          <t>3) Calculate the proof using the claimed private key:</t>
          <artwork><![CDATA[
proof = base64url(Sign(claimedPrivateKey, to_sign))
]]></artwork>
          <t>4) Configure a TLS listener on port 443 of the domain using the domain’s existing TLS certificate (no new certificate shall be constructed). When the AS initiates a connection using the identifier <tt>"acme-pk/1"</tt>, return the <tt>proof</tt> bytes as TLS application data after the handshake is completed, then close the connection immediately.</t>
          <t>5) Send a POST request to "url" with <tt>{“delivery”: “tls-handshake”}</tt> in the request body to notify the server that it can proceed with verification.</t>
        </section>
        <section anchor="server-validation-steps-3">
          <name>Server Validation Steps</name>
          <t>1) Initiate a TLS connection to <tt>&lt;domain&gt;:443</tt> corresponding to the current identifier of the order, using the ALPN protocol identifier <tt>"acme-pk/1"</tt>. The AS <strong>MUST</strong> skip trust validation of the server certificate chain, and <strong>SHOULD</strong> verify that the server certificate public key is byte‑for‑byte identical to <tt>newOrder.public_key</tt>. Successful TLS handshake confirms the applicant's control over the TLS service for the domain. After handshake completion, read the application data as the <tt>proof</tt>.</t>
          <t>2) Reconstruct the signed message using the locally stored <tt>nonce</tt> (<strong>MUST NOT</strong> trust any <tt>nonce</tt> value provided by the client):</t>
          <artwork><![CDATA[
keyAuthorization_sync = nonce || "." || base64url(JWK_Thumbprint(accountKey))
identifiers_canonical = Reconstructed from the order record as defined in Section 2.
to_sign = (SP × 64) || "ACME-pk-01\x00" || keyAuthorization_sync || "." || identifiers_canonical
]]></artwork>
          <t>3) Verify the signature of <tt>proof</tt> using <tt>public_key</tt> (the claimed public key) (see §4.4 for the semantics of <tt>Sign</tt>).</t>
          <t>4) If validation passes, set the challenge status to "valid"; if validation fails, set it to "invalid".</t>
          <t>A TLS connection verifies domain ownership (TLS reachability), and signature verification confirms possession of the private key.</t>
        </section>
      </section>
      <section anchor="protocol-interaction-process">
        <name>Protocol Interaction Process</name>
        <section anchor="asynchronous-mode-dns-identifier-csrless-true">
          <name>Asynchronous mode (DNS identifier, csr_less: true)</name>
          <figure anchor="fig-pk-challenge-1">
            <name>Asynchronous mode (DNS identifier, csr_less: true)</name>
            <artwork><![CDATA[
EE (Applicant)                 AS (ACME Server)             DNS Server
     |                                  |                       |
     |-----------1. newOrder----------->|                       |
     |       identifiers: [A, B],       |                       |
     |       public_key: PK,            |                       |
     |       pop_mode: "async"          |                       |
     |                                  |                       |
     |<----2. pk-01 chall-A (tokenA)----|                       |
     |<----2. pk-01 chall-B (tokenB)----|                       |
     |                                  |                       |
     |   [ids_c = "dns:A,dns:B"]        |                       |
     |[proofA = Sign(SK, (SP×64)||"ACME-pk-01\x00"||keyAuthA||"."|ids_c)]
     |[proofB = Sign(SK, (SP×64)||"ACME-pk-01\x00"||keyAuthB||"."|ids_c)]
     |                                  |                       |
     |------3. write TXT: _acme-challenge.A = proofA----------->|
     |------3. write TXT: _acme-challenge.B = proofB----------->|
     |                                  |                       |
     |                                  |                       |
     |------4. POST chall-A{"delivery": |                       |
     |        ----------   "dns"}------>|                       |
     |------4. POST chall-B{"delivery": |                       |
     |        ----------   "dns"}------>|                       |
     |                                  |                       |
     |      5. Look up _acme-challenge.A TXT records----------->|
     |      5. Look up _acme-challenge.B TXT records----------->|
     |                                  |<--TXT: proofA, proofB-|
     |                                  |                       | 
     |          [6. Reconstruct to_sign,|                       |
     |            verify the signature using the PK]            |
     |                                  |                       |
     |<------7. Challenge valid---------|                       |
     |                                  |                       |
     |-------8. finalizeOrder---------->|                       |
     |         (without CSR)            |                       |
     |                                  |                       |
     |<--9. Certificate(PK, SAN: A+B)---|                       |
     |                                  |                       |
]]></artwork>
          </figure>
        </section>
        <section anchor="synchronous-mode-tls-handshake-delivery-csrless-true">
          <name>Synchronous mode (TLS-HANDSHAKE delivery, csr_less: true)</name>
          <figure anchor="fig-pk-challenge-2">
            <name>Synchronous mode (TLS-HANDSHAKE delivery, csr_less: true)</name>
            <artwork><![CDATA[
EE (Applicant)                                   AS (ACME Server)
     |                                                    |
     |-------------------1. newOrder--------------------->|
     |                 identifiers,                       |
     |                 public_key: PK,                    |
     |                 pop_mode: "sync"                   |
     |                                                    |
     |<------------------2. pk-01 (nonce: N)--------------|
     |                                                    |
     |  [keyAuth_sync, identifiers_canonical,             |
     |                          to_sign, proof]           |
     |  [Configure TLS Listener,                          |
     |    Use the existing certificate, "acme-pk/1"]      |
     |                                                    |
     |--------3. POST {"delivery": "tls-handshake"}------>|
     |                                                    |
     |<---------------4. TLS handshake--------------------|
     |           (domain:443, "acme-pk/1")                |
     |           Skip certificate chain validation        |
     |                                                    |
     |------5. return proof (TLS Application Data)------->|
     |                                                    |
     |   [6. Reconstruct `to_sign` using the local `N`    |
     |               verify the signature using the PK]   |
     |                                                    |
     |<---------------7. Challenge valid------------------|
     |                                                    |
     |----------------8. finalizeOrder------------------->|
     |                  (without CSR)                     |
     |                                                    |
     |<-------------9. Certificate(PK, SAN)---------------|
     |                                                    |
]]></artwork>
          </figure>
        </section>
      </section>
    </section>
    <section anchor="finalization">
      <name>Finalization</name>
      <t>After the "pk-01" challenge was validated, the ACME server has confirmed the following:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Resource Control</strong>: Verified via DNS TXT records (asynchronous/DNS), HTTP paths (asynchronous/HTTP), TLS handshakes (synchronous/TLS-HANDSHAKE), or email replies (email scenarios).</t>
        </li>
        <li>
          <t><strong>Proof of Private Key Ownership</strong>: Verified via the <tt>proof</tt> signature.</t>
        </li>
        <li>
          <t><strong>Claimed public key</strong>: Already claimed in the <tt>public_key</tt> field during the "newOrder" phase and bound to the order.</t>
        </li>
      </ul>
      <t>The behavior in the finalization phase is determined by the <tt>csr_less</tt> field in "newOrder":</t>
      <section anchor="csrless-trueno-csr">
        <name>csr_less: true（No CSR）</name>
        <t>"finalize" requests do not require a CSR, and the body may be an empty object. The server constructs and issues the certificate directly based on the following sources:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Public Key</strong>: Taken from the <tt>public_key</tt> field in "newOrder" (the declared public key, verified via a challenge).</t>
          </li>
          <li>
            <t><strong>Subject Alternative Name (SAN)</strong>: Taken from the <tt>identifiers</tt> field in "newOrder".</t>
          </li>
        </ul>
        <artwork><![CDATA[
POST /acme/order/xyz/finalize HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json

{}
]]></artwork>
        <t>The server issues a certificate using the <tt>public_key</tt> (claimed public key) as the public key and the domain name in <tt>identifiers</tt> as the SAN, and returns the certificate download URL.</t>
      </section>
      <section anchor="csrless-falsecompatibility-mode-default-value">
        <name>csr_less: false（Compatibility mode, default value）</name>
        <t>"finalize" requests <strong>MUST</strong> still include a standard PKCS#10 CSR; the process is consistent with the standard ACME <xref target="RFC8555"/> procedure. At this point, the "pk-01" challenge is performed as an additional public key pre-validation step: after verifying the proof of ownership of the claimed public key during the challenge phase, the server performs an additional byte-by-byte comparison during the "finalize" phase to ensure that the public key in the CSR matches the <tt>public_key</tt> field exactly before issuing the certificate. If the two do not match, the server <strong>MUST</strong> reject the request and return an error.</t>
        <artwork><![CDATA[
POST /acme/order/xyz/finalize HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json

{
  "csr": "<DER-encoded PKCS#10 CSR, Base64URL-encoded>"
}
]]></artwork>
      </section>
      <section anchor="public-key-consistency-validation-and-byte-normalization">
        <name>Public Key Consistency Validation and Byte Normalization</name>
        <t>Regardless of the value of <tt>csr_less</tt>, the server <strong>MUST</strong>:</t>
        <ol spacing="normal" type="1"><li>
            <t>Confirm that the order status is "ready" (all challenges have been passed).</t>
          </li>
          <li>
            <t>Perform a strict byte-by-byte comparison between the public key to be written to the certificate and the <tt>public_key</tt> declared in "newOrder" to ensure they are exactly the same.</t>
          </li>
        </ol>
        <t>To ensure the reliability of byte-level comparison, the server <strong>MUST</strong> treat the raw bytes of the <tt>public_key</tt> received in the "newOrder" request as the sole authoritative source and <strong>MUST NOT</strong> perform any form of DER normalization, re-encoding, or attribute pruning on it. A single cryptographic key may have multiple valid DER encodings (for example, the <tt>ECParameters</tt> field of an EC public key can be in OID format or implicit format). If the server normalizes the data during storage or comparison, this can result in false negatives (valid requests being rejected) or false positives (keys with different encodings being mistakenly identified as identical).</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="proof-of-key-possession">
        <name>Proof of Key Possession</name>
        <t>"pk-01" requires applicants to possess the private key corresponding to the public key they declare. The server <strong>MUST</strong> verify the signature using the <tt>public_key</tt> in "newOrder" and <strong>MUST NOT</strong> rely on indirect methods to infer ownership of the public key. When issuing a certificate, the server <strong>MUST</strong> compare the public key bytes again to ensure consistency.</t>
      </section>
      <section anchor="replay-attack-prevention">
        <name>Replay Attack Prevention</name>
        <t>In asynchronous mode, the <tt>token</tt> <strong>MUST</strong> meet the unpredictability requirement (entropy of at least 128 bits) <xref target="RFC4086"/>. In synchronous mode, the <tt>nonce</tt> <strong>MUST</strong> also have an entropy of at least 128 bits. The server accepts each <tt>nonce</tt> only once; after use, it <strong>MUST</strong> immediately mark it as consumed. Any subsequent authentication requests carrying the same <tt>nonce</tt> <strong>MUST</strong> be rejected to prevent replay attacks.</t>
      </section>
      <section anchor="dns-control-dependency">
        <name>DNS Control Dependency</name>
        <t>In asynchronous mode (DNS identifier), security relies on the applicant having actual control over the corresponding DNS zone. If DNS control is compromised (e.g., through DNS hijacking), an attacker could write a forged signature into the TXT record. Implementers <strong>SHOULD</strong> use this in conjunction with DNSSEC.</t>
      </section>
      <section anchor="security-notes-for-csrless-mode">
        <name>Security Notes for csr_less Mode</name>
        <t>After enabling <tt>csr_less: true</tt>, the finalization phase no longer passes the public key via the CSR; the CA relies entirely on the <tt>public_key</tt> declared in "newOrder" and validated by the "pk-01" challenge. In this scenario, the proof of private key ownership from the "pk-01" challenge is the sole cryptographic basis for the public key’s legitimacy. The server <strong>MUST</strong> perform byte-level locking on the order’s public key after the challenge verification passes to prevent subsequent requests from replacing the public key.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="acme-validation-methods">
        <name>ACME Validation Methods</name>
        <t>This document requests that IANA add the following entry to the ACME Validation Methods registry.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Label</th>
              <th align="left">Note</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>pk-01</tt></td>
              <td align="left">Public key challenge with async (DNS/HTTP/email) and sync (TLS-HANDSHAKE) PoP modes</td>
              <td align="left">RFC XXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="iana-acme-message-fields">
        <name>IANA ACME Message Fields</name>
        <t>This document requests that IANA add the following entry to the ACME Validation Fields registry.</t>
        <t>newOrder request fields:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Properties</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Field Name</td>
              <td align="left">
                <tt>public_key</tt></td>
            </tr>
            <tr>
              <td align="left">Message Type</td>
              <td align="left">newOrder Request</td>
            </tr>
            <tr>
              <td align="left">Data Type</td>
              <td align="left">String</td>
            </tr>
            <tr>
              <td align="left">Presence</td>
              <td align="left">OPTIONAL（This must be included only when using the public key challenge extension）</td>
            </tr>
            <tr>
              <td align="left">Description</td>
              <td align="left">A public key awaiting certification, encoded as a Base64URL-encoded SPKI <xref target="RFC5480"/>. If present, triggers the pk-01 challenge and the CSR-less issuance process.</td>
            </tr>
            <tr>
              <td align="left">Reference</td>
              <td align="left">RFC XXX</td>
            </tr>
          </tbody>
        </table>
        <table>
          <thead>
            <tr>
              <th align="left">Properties</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Field Name</td>
              <td align="left">
                <tt>pop_mode</tt></td>
            </tr>
            <tr>
              <td align="left">Message Type</td>
              <td align="left">newOrder Request</td>
            </tr>
            <tr>
              <td align="left">Data Type</td>
              <td align="left">String</td>
            </tr>
            <tr>
              <td align="left">Presence</td>
              <td align="left">OPTIONAL（Default value: <tt>"async"</tt>）</td>
            </tr>
            <tr>
              <td align="left">Description</td>
              <td align="left">PoP verification mode declared by the client: <tt>async</tt> (the applicant pre-deploys the proof, and the AS verifies it independently) or <tt>“sync”</tt> (requires real-time interaction). Extensible.</td>
            </tr>
            <tr>
              <td align="left">Reference</td>
              <td align="left">RFC XXX</td>
            </tr>
          </tbody>
        </table>
        <table>
          <thead>
            <tr>
              <th align="left">Properties</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Field Name</td>
              <td align="left">
                <tt>csr_less</tt></td>
            </tr>
            <tr>
              <td align="left">Message Type</td>
              <td align="left">newOrder Request</td>
            </tr>
            <tr>
              <td align="left">Data Type</td>
              <td align="left">Boolean</td>
            </tr>
            <tr>
              <td align="left">Presence</td>
              <td align="left">OPTIONAL（Default value:<tt>false</tt>）</td>
            </tr>
            <tr>
              <td align="left">Description</td>
              <td align="left">Controls whether the CSR submission is skipped during the finalization phase. <tt>true</tt> indicates that the certificate is issued directly using the declared public key; <tt>false</tt> indicates that a PKCS#10 CSR must still be submitted, with the "pk-01" challenge serving as an additional pre-validation step.</td>
            </tr>
            <tr>
              <td align="left">Reference</td>
              <td align="left">RFC XXX</td>
            </tr>
          </tbody>
        </table>
        <t>Challenge Target Field:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Properties</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Field Name</td>
              <td align="left">
                <tt>supported_delivery</tt></td>
            </tr>
            <tr>
              <td align="left">Message Type</td>
              <td align="left">pk-01 Challenge Object</td>
            </tr>
            <tr>
              <td align="left">Data Type</td>
              <td align="left">Array of String</td>
            </tr>
            <tr>
              <td align="left">Presence</td>
              <td align="left">OPTIONAL</td>
            </tr>
            <tr>
              <td align="left">Description</td>
              <td align="left">A list of available delivery methods declared by AS. Asynchronous modes may include "<tt>dns</tt>", "<tt>http</tt>", and "<tt>email</tt>"; synchronous modes may include "<tt>tls-handshake</tt>". The client selects one from this list and declares it in the challenge-response.</td>
            </tr>
            <tr>
              <td align="left">Reference</td>
              <td align="left">RFC XXX</td>
            </tr>
          </tbody>
        </table>
        <table>
          <thead>
            <tr>
              <th align="left">Properties</th>
              <th align="left">Value</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Field Name</td>
              <td align="left">
                <tt>delivery</tt></td>
            </tr>
            <tr>
              <td align="left">Message Type</td>
              <td align="left">pk-01 Challenge Response (POST body)</td>
            </tr>
            <tr>
              <td align="left">Data Type</td>
              <td align="left">String</td>
            </tr>
            <tr>
              <td align="left">Presence</td>
              <td align="left">REQUIRED（when <tt>supported_delivery</tt> is present）</td>
            </tr>
            <tr>
              <td align="left">Description</td>
              <td align="left">The client must specify the selected delivery method in the POST body of the challenge-response request; this must be one of the values in the <tt>supported_delivery</tt> list.</td>
            </tr>
            <tr>
              <td align="left">Reference</td>
              <td align="left">RFC XXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="tls-protocol-identifier-registration">
        <name>TLS Protocol Identifier Registration</name>
        <t>This document requests that IANA add the following entry to the TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs registry <xref target="RFC7301"/> with the IETF as the Change Controller:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Protocol</th>
              <th align="left">Identification Sequence</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>acme-pk/1</tt></td>
              <td align="left">0x61 0x63 0x6d 0x65 0x2d 0x70 0x6b 0x2f 0x31 (<tt>"acme-pk/1"</tt>)</td>
              <td align="left">RFC XXX</td>
            </tr>
          </tbody>
        </table>
        <t>The "<tt>acme-pk/1</tt>" identifier is reserved for TLS-HANDSHAKE delivery in the "pk-01" challenge synchronization mode; its operational semantics differ from those of <xref target="RFC8737"/>: In TLS sessions using "<tt>acme-pk/1</tt>", the server returns the raw <tt>proof</tt> bytes directly in the TLS application data after the handshake is complete, without constructing an X.509 certificate or embedding any challenge data in the certificate extension fields.</t>
      </section>
    </section>
    <section anchor="implementation-considerations">
      <name>Implementation Considerations</name>
      <section anchor="acme-server">
        <name>ACME Server</name>
        <ul spacing="normal">
          <li>
            <t>When processing a "newOrder" request, the server must perform strict format validation on the <tt>public_key</tt> field to verify that it is a valid DER-encoded SPKI; for unsupported key types, it <strong>SHOULD</strong> return an error. The server <strong>MUST</strong> store <tt>public_key</tt> in the raw bytes received and must not perform any DER normalization or re-encoding (see §6.3).</t>
          </li>
          <li>
            <t>The server must verify the uniqueness of the <tt>token</tt> in asynchronous mode and the <tt>nonce</tt> in synchronous mode to prevent token reuse.</t>
          </li>
          <li>
            <t>Before issuing the certificate, the server must verify the public key bytes once again to ensure they match exactly, byte-for-byte, with the public key declared in "newOrder".</t>
          </li>
          <li>
            <t>The server <strong>MUST</strong> mark the <tt>nonce</tt> as used immediately after it is consumed for the first time and reject any subsequent attempts to reuse it. The server should limit the validity window of the <tt>nonce</tt> (<strong>RECOMMENDED</strong> to be no longer than the challenge token's validity period).</t>
          </li>
          <li>
            <t>When executing an asynchronous HTTP GET request, the server <strong>MUST NOT</strong> follow HTTP redirects that change the target domain to a different domain (cross-domain redirects), as following such redirects would invalidate the domain control verification. The server <strong>SHOULD</strong> allow same-domain redirects (such as HTTP → HTTPS redirects within the same host) and adhere to the standard ACME http-01 HTTP request specifications (timeouts, maximum number of redirects, etc.) to prevent server-side request forgery (SSRF).</t>
          </li>
          <li>
            <t>The server <strong>SHOULD</strong> include a <tt>supported_delivery</tt> field in the challenge object to declare all supported delivery methods for the client to choose from.</t>
          </li>
          <li>
            <t>After the server receives the Challenge-Response POST request, it must read the <tt>delivery</tt> field to determine which verification method to use; if the <tt>delivery</tt> field is missing or contains an unsupported value, the server <strong>SHOULD</strong> return an error.</t>
          </li>
          <li>
            <t>When the server returns an error response related to the "pk-01" challenge, it <strong>SHOULD</strong> indicate the delivery method that triggered the error in the <tt>detail</tt> field of the <xref target="RFC7807"/> "Problem Details" format, following the format: <tt>[&lt;delivery&gt;] &lt;error description&gt;</tt>. If the client has not declared a <tt>delivery</tt> (i.e., the <tt>delivery</tt> field is missing), it shall be marked as <tt>[pk-01]</tt>.</t>
          </li>
        </ul>
        <artwork><![CDATA[
{
  "type": "urn:ietf:params:acme:error:rejectedIdentifier",
  "detail": "public key delivery field missing or unsupported value",
  "status": 400
}
]]></artwork>
        <artwork><![CDATA[
{
  "type": "urn:ietf:params:acme:error:invalidDeliveryMethod",
  "detail": "invalid delivery method for current pk-01 challenge",
  "status": 403
}
]]></artwork>
        <ul spacing="normal">
          <li>
            <t>For orders containing multiple identifiers, the server issues and validates challenges independently for each individual identifier. When reconstructing <tt>to_sign</tt> for signature verification, the server <strong>MUST</strong> construct <tt>identifiers_canonical</tt> from all identifiers of the order as defined in § 2, rather than only the single identifier corresponding to the current challenge.</t>
          </li>
          <li>
            <t>During validation in synchronous mode (TLS-HANDSHAKE), the server <strong>MUST</strong> skip trust validation of the TLS certificate chain presented by the client, and <strong>SHOULD</strong> verify that the public key in the server certificate is byte-for-byte identical to <tt>newOrder.public_key</tt> to prevent man-in-the-middle relay attacks.</t>
          </li>
        </ul>
      </section>
      <section anchor="acme-client">
        <name>ACME Client</name>
        <ul spacing="normal">
          <li>
            <t>The client <strong>MUST</strong> ensure that the private key used for signing strictly matches the <tt>public_key</tt> declared in "newOrder"; a mismatch in key types will cause the server to fail the signature verification.</t>
          </li>
          <li>
            <t>In synchronous mode, the client <strong>MUST</strong> send a response to the challenge URL only after the TLS listening configuration is complete, to ensure it is reachable when the server initiates the TLS handshake.</t>
          </li>
          <li>
            <t>In asynchronous mode, the client <strong>SHOULD</strong> verify that the resource (DNS TXT record or HTTP path) has taken effect before notifying the server, taking into account DNS propagation delays or HTTP service availability.</t>
          </li>
          <li>
            <t>When <tt>csr_less: true</tt>, the body of the "finalize" request may be an empty object <tt>{}</tt>, the client does not need to construct a CSR; when <tt>csr_less: false</tt> (default), the client <strong>MUST</strong> still submit a standard PKCS#10 CSR during the "finalize" phase, and the public key in the CSR <strong>MUST</strong> match the <tt>public_key</tt> declared in "newOrder".</t>
          </li>
          <li>
            <t>When sending a challenge-response POST request, the client <strong>MUST</strong> include a <tt>delivery</tt> field in the request body, and its value must be one of the items in the <tt>supported_delivery</tt> list of the challenge object.</t>
          </li>
          <li>
            <t>For orders with multiple identifiers, when constructing the <tt>proof</tt> for each challenge, the client <strong>MUST</strong> generate <tt>identifiers_canonical</tt> from <strong>all identifiers of the order</strong> in accordance with §2. All challenges use the identical value of <tt>identifiers_canonical</tt>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <section anchor="asynchronous-mode-pk-01-dns-complete-interaction-single-identifier">
        <name>Asynchronous Mode: pk-01 (DNS) – Complete Interaction, Single identifier</name>
        <t><strong>Prerequisites</strong>: The applicant <strong>MUST</strong> have DNS control over the domain <tt>example.com</tt> and a P-256 key pair (private key <tt>d</tt>, public key <tt>Q</tt>, SPKI-encoded as <tt>pk_spki</tt>).</t>
        <t><strong>Step 1: newOrder Request</strong></t>
        <artwork><![CDATA[
POST /acme/new-order HTTP/1.1
Host: acme.example.com
Content-Type: application/jose+json

{
  "identifiers": [
    { "type": "dns", "value": "example.com" }
  ],
  "public_key": "pk_spki",
  "pop_mode": "async",
  "csr_less": true
}
]]></artwork>
        <t><strong>Step 2: The server returns the pk-01 challenge</strong></t>
        <artwork><![CDATA[
{
  "type": "pk-01",
  "url": "https://acme.example.com/acme/chall/abc123",
  "status": "pending",
  "token": "evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA"
  "supported_delivery": ["dns", "http"]
}
]]></artwork>
        <t><strong>Step 3: The client generates a signature and writes it to the DNS TXT record</strong></t>
        <artwork><![CDATA[
keyAuthorization = "evaGxfADs6pSRb2LAv9IZf17Dt3juxGJ-PCt92wr-oA.pswg5_v_JaVFRXrHxGfJkg"
identifiers_canonical = "dns:example.com"
to_sign = (SP × 64) || "ACME-pk-01\x00" || keyAuthorization || "." || identifiers_canonical
proof = base64url(Sign(d, to_sign))  →  "<proof_value>"
# The Sign() function uses ECDSA-with-SHA256 (P-256 key) and internally signs the `to_sign` value after applying SHA-256 to it.
]]></artwork>
        <artwork><![CDATA[
_acme-challenge.example.com.  120  IN  TXT  "<proof_value>"
]]></artwork>
        <t><strong>Step 4: The client notifies the server, and the server queries and verifies</strong></t>
        <artwork><![CDATA[
POST /acme/chall/abc123 HTTP/1.1
Content-Type: application/jose+json

{"delivery": "dns"}
]]></artwork>
        <t>The server queries the TXT record for <tt>_acme-challenge.example.com</tt>, reconstructs <tt>to_sign</tt> with <tt>identifiers_canonical = "dns:example.com"</tt>, verifies the signature using <tt>pk_spki</tt>, and sets the challenge status to <tt>valid</tt> upon successful verification.</t>
        <t><strong>Step 5: finalizeOrder (without CSR)</strong></t>
        <artwork><![CDATA[
POST /acme/order/xyz/finalize HTTP/1.1
Content-Type: application/jose+json

{}
]]></artwork>
        <t>The server issues a certificate using <tt>pk_spki</tt> as the public key and <tt>example.com</tt> as the subject alternative name (SAN).</t>
      </section>
      <section anchor="asynchronous-mode-pk-01-http-complete-interaction-without-extensions">
        <name>Asynchronous Mode: pk-01 (HTTP) – Complete Interaction, Without Extensions</name>
        <t><strong>Prerequisites</strong>: The applicant <strong>MUST</strong> have HTTP control over the domain <tt>example.com</tt> and a P-256 key pair.</t>
        <t><strong>Step 1: newOrder Request</strong></t>
        <artwork><![CDATA[
POST /acme/new-order HTTP/1.1
Content-Type: application/jose+json

{
  "identifiers": [
    { "type": "dns", "value": "example.com" }
  ],
  "public_key": "pk_spki",
  "pop_mode": "async",
  "csr_less": true
}
]]></artwork>
        <t><strong>Step 2: The server returns the pk-01 challenge</strong></t>
        <artwork><![CDATA[
{
  "type": "pk-01",
  "url": "https://acme.example.com/acme/chall/def456",
  "status": "pending",
  "token": "DGyRejmCefe7v4NfDGDKfA",
  "supported_delivery": ["dns", "http"]
}
]]></artwork>
        <t><strong>Step 3: The client generates a signature and deploys it to the HTTP path</strong></t>
        <artwork><![CDATA[
keyAuthorization = "DGyRejmCefe7v4NfDGDKfA.pswg5_v_JaVFRXrHxGfJkg"
identifiers_canonical = "dns:example.com"
to_sign = (SP × 64) || "ACME-pk-01\x00" || keyAuthorization || "." || identifiers_canonical
proof = base64url(Sign(d, to_sign))
# The Sign() function uses ECDSA-with-SHA256 (P-256 key) and internally signs the `to_sign` value after applying SHA-256 to it.
]]></artwork>
        <t>Deploy to: <tt>http://example.com/.well-known/acme-challenge/DGyRejmCefe7v4NfDGDKfA</tt></t>
        <t>Content: <tt>&lt;proof&gt;</tt></t>
        <t><strong>Step 4: The client notifies the server, and the server initiates an HTTP GET authentication request</strong></t>
        <artwork><![CDATA[
POST /acme/chall/def456 HTTP/1.1
Content-Type: application/jose+json

{"delivery": "http"}
]]></artwork>
        <t>The server sends an HTTP GET request to <tt>http://example.com/.well-known/acme-challenge/DGyRejmCefe7v4NfDGDKfA</tt> to verify domain ownership. After validating the signature, it sets the challenge status to "valid".</t>
        <t><strong>Step 5: finalizeOrder (without CSR)</strong></t>
        <t>The server issues a certificate using <tt>pk_spki</tt> as the public key and <tt>example.com</tt> as the subject alternative name (SAN).</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="RFC8555" target="https://www.rfc-editor.org/info/rfc8555" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8555.xml">
        <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="RFC5480" target="https://www.rfc-editor.org/info/rfc5480" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.5480.xml">
        <front>
          <title>Elliptic Curve Cryptography Subject Public Key Information</title>
          <author fullname="S. Turner" initials="S." surname="Turner"/>
          <author fullname="D. Brown" initials="D." surname="Brown"/>
          <author fullname="K. Yiu" initials="K." surname="Yiu"/>
          <author fullname="R. Housley" initials="R." surname="Housley"/>
          <author fullname="T. Polk" initials="T." surname="Polk"/>
          <date month="March" year="2009"/>
          <abstract>
            <t>This document specifies the syntax and semantics for the Subject Public Key Information field in certificates that support Elliptic Curve Cryptography. This document updates Sections 2.3.5 and 5, and the ASN.1 module of "Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile", RFC 3279. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5480"/>
        <seriesInfo name="DOI" value="10.17487/RFC5480"/>
      </reference>
      <reference anchor="RFC7301" target="https://www.rfc-editor.org/info/rfc7301" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7301.xml">
        <front>
          <title>Transport Layer Security (TLS) Application-Layer Protocol Negotiation Extension</title>
          <author fullname="S. Friedl" initials="S." surname="Friedl"/>
          <author fullname="A. Popov" initials="A." surname="Popov"/>
          <author fullname="A. Langley" initials="A." surname="Langley"/>
          <author fullname="E. Stephan" initials="E." surname="Stephan"/>
          <date month="July" year="2014"/>
          <abstract>
            <t>This document describes a Transport Layer Security (TLS) extension for application-layer protocol negotiation within the TLS handshake. For instances in which multiple application protocols are supported on the same TCP or UDP port, this extension allows the application layer to negotiate which protocol will be used within the TLS connection.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7301"/>
        <seriesInfo name="DOI" value="10.17487/RFC7301"/>
      </reference>
      <reference anchor="RFC8737" target="https://www.rfc-editor.org/info/rfc8737" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8737.xml">
        <front>
          <title>Automated Certificate Management Environment (ACME) TLS Application-Layer Protocol Negotiation (ALPN) Challenge Extension</title>
          <author fullname="R.B. Shoemaker" initials="R.B." surname="Shoemaker"/>
          <date month="February" year="2020"/>
          <abstract>
            <t>This document specifies a new challenge for the Automated Certificate Management Environment (ACME) protocol that allows for domain control validation using TLS.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8737"/>
        <seriesInfo name="DOI" value="10.17487/RFC8737"/>
      </reference>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
        <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" target="https://www.rfc-editor.org/info/rfc8174" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
        <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="RFC1035" target="https://www.rfc-editor.org/info/rfc1035" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1035.xml">
        <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>
      <reference anchor="RFC4086" target="https://www.rfc-editor.org/info/rfc4086" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4086.xml">
        <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="RFC4408" target="https://www.rfc-editor.org/info/rfc4408" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4408.xml">
        <front>
          <title>Sender Policy Framework (SPF) for Authorizing Use of Domains in E-Mail, Version 1</title>
          <author fullname="M. Wong" initials="M." surname="Wong"/>
          <author fullname="W. Schlitt" initials="W." surname="Schlitt"/>
          <date month="April" year="2006"/>
          <abstract>
            <t>E-mail on the Internet can be forged in a number of ways. In particular, existing protocols place no restriction on what a sending host can use as the reverse-path of a message or the domain given on the SMTP HELO/EHLO commands. This document describes version 1 of the ender Policy Framework (SPF) protocol, whereby a domain may explicitly authorize the hosts that are allowed to use its domain name, and a receiving host may check such authorization. This memo defines an Experimental Protocol for the Internet community.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4408"/>
        <seriesInfo name="DOI" value="10.17487/RFC4408"/>
      </reference>
      <reference anchor="RFC8823" target="https://www.rfc-editor.org/info/rfc8823" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8823.xml">
        <front>
          <title>Extensions to Automatic Certificate Management Environment for End-User S/MIME Certificates</title>
          <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
          <date month="April" year="2021"/>
          <abstract>
            <t>This document specifies identifiers and challenges required to enable the Automated Certificate Management Environment (ACME) to issue certificates for use by email users that want to use S/MIME.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="8823"/>
        <seriesInfo name="DOI" value="10.17487/RFC8823"/>
      </reference>
      <reference anchor="RFC7807" target="https://www.rfc-editor.org/info/rfc7807" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7807.xml">
        <front>
          <title>Problem Details for HTTP APIs</title>
          <author fullname="M. Nottingham" initials="M." surname="Nottingham"/>
          <author fullname="E. Wilde" initials="E." surname="Wilde"/>
          <date month="March" year="2016"/>
          <abstract>
            <t>This document defines a "problem detail" as a way to carry machine- readable details of errors in a HTTP response to avoid the need to define new error response formats for HTTP APIs.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="7807"/>
        <seriesInfo name="DOI" value="10.17487/RFC7807"/>
      </reference>
    </references>
    <?line 947?>



  </back>
  <!-- ##markdown-source:
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
Goz7l+Ws/B8GMg2j0Rv8+f8BbxBgNX/oAAA=

-->

</rfc>
