<?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.43 (Ruby 3.2.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-liao-lamps-est-lightweight-operations-02" category="std" consensus="true" submissionType="IETF" tocDepth="3" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.35.0 -->
  <front>
    <title abbrev="EST Lightweight Operations">EST Lightweight Operations</title>
    <seriesInfo name="Internet-Draft" value="draft-liao-lamps-est-lightweight-operations-02"/>
    <author initials="L." surname="Liao" fullname="Lijun Liao">
      <organization>NIO Inc.</organization>
      <address>
        <email>lijun.liao@nio.io</email>
      </address>
    </author>
    <date year="2026" month="October" day="29"/>
    <abstract>
      <?line 49?>

<t>This document defines eight new operations for the Enrollment over Secure Transport (EST) protocol specified in RFC 7030: <tt>ucacaps</tt>, <tt>ucacert</tt>, <tt>ucacerts</tt>, <tt>ucrlinfo</tt>, <tt>ucrl</tt>, <tt>usimpleenroll</tt>, <tt>usimplereenroll</tt>, and <tt>userverkeygen</tt>.  These operations deliver PKI objects, including CA certificates, certificate chains, CRLs, and enrolled certificates, as Base64-encoded DER or PEM, without the CMS encapsulation used by the corresponding EST operations in RFC 7030.  The <tt>ucacaps</tt> operation enables EST clients to discover which operations the EST server supports.  Eliminating the CMS wrapper for these responses reduces code size and parsing complexity.</t>
    </abstract>
  </front>
  <middle>
    <?line 53?>

<section anchor="intro">
      <name>Introduction</name>
      <t>Enrollment over Secure Transport (EST) <xref target="RFC7030"/> defines a set of HTTPS-based operations for certificate enrollment and management.  An EST server sits between a Certification Authority (CA) and an EST client and performs Registration Authority (RA) functions, as described in <xref section="1" sectionFormat="comma" target="RFC7030"/>.  <xref target="RFC8951"/> updates RFC 7030 to clarify EST transfer-encoding behavior and ASN.1 details.  <xref target="RFC9908"/> further updates RFC 7030 and RFC 9148 to clarify and enhance the <tt>csrattrs</tt> definition.</t>
      <t>The responses to the standard EST operations (<tt>cacerts</tt>, <tt>simpleenroll</tt>, <tt>simplereenroll</tt>, and <tt>serverkeygen</tt>) are encapsulated in Cryptographic Message Syntax (CMS) structures <xref target="RFC5652"/>, specifically using the <tt>application/pkcs7-mime; smime-type=certs-only</tt> content type.  While CMS provides a well-established container format, parsing it requires code that may be unnecessary or unavailable in some EST deployments <xref target="RFC7228"/>.</t>
      <t>EST-coaps <xref target="RFC9148"/> addresses EST over CoAP and DTLS by defining shorter resource paths, using CoAP Block-Wise Transfer for fragmentation, and allowing binary ASN.1 payloads.  It also defines Content-Format 287 (<tt>application/pkix-cert</tt>) as a non-CMS single-certificate response format that can be selected using CoAP content negotiation.  However, RFC 9148 primarily specifies EST semantics for CoAP-based networks and does not define the HTTPS operations or the CRL metadata and retrieval operations defined in this document.  The relationship with RFC 9148 is discussed in <xref target="rfc9148-comparison"/>.</t>
      <t>This document also addresses two functional gaps.  First, <xref target="RFC7030"/> provides no means for an EST client to discover whether an EST server supports a given operation, so an EST client would otherwise need to rely on out-of-band configuration or probing.  The <tt>ucacaps</tt> operation enables the client to discover server support explicitly.  Second, <xref target="RFC7030"/> does not define in-band CRL metadata or retrieval operations; revocation information is normally obtained from CRL Distribution Point (CDP) URIs carried in certificates.  The <tt>ucrlinfo</tt> operation supports lightweight freshness checks, and the <tt>ucrl</tt> operation provides an EST-based retrieval path when the full CRL is needed.</t>
      <t>This document adds eight new operations to <xref section="4" sectionFormat="comma" target="RFC7030"/> (Protocol Exchange Details), as summarized in <xref target="tab-ops-overview"/>:</t>
      <table anchor="tab-ops-overview">
        <name>New Operations Defined in This Document</name>
        <thead>
          <tr>
            <th align="left">New Operation</th>
            <th align="left">Based on RFC 7030 Operation</th>
            <th align="left">Auth</th>
            <th align="left">Response Format</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>ucacaps</tt></td>
            <td align="left">
              <em>(new)</em></td>
            <td align="left">No</td>
            <td align="left">
              <tt>text/plain</tt> keyword list</td>
          </tr>
          <tr>
            <td align="left">
              <tt>ucacert</tt></td>
            <td align="left">
              <em>(new)</em></td>
            <td align="left">No</td>
            <td align="left">
              <tt>application/pkix-cert</tt> (single CA cert)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>ucacerts</tt></td>
            <td align="left">
              <tt>cacerts</tt> (<xref section="4.1" sectionFormat="comma" target="RFC7030"/>)</td>
            <td align="left">No</td>
            <td align="left">
              <tt>application/pem-certificate-chain</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>ucrlinfo</tt></td>
            <td align="left">
              <em>(new)</em></td>
            <td align="left">No</td>
            <td align="left">
              <tt>text/plain</tt> (CRL metadata)</td>
          </tr>
          <tr>
            <td align="left">
              <tt>ucrl</tt></td>
            <td align="left">
              <em>(new)</em></td>
            <td align="left">No</td>
            <td align="left">
              <tt>application/pkix-crl</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>usimpleenroll</tt></td>
            <td align="left">
              <tt>simpleenroll</tt> (<xref section="4.2.1" sectionFormat="comma" target="RFC7030"/>)</td>
            <td align="left">Yes</td>
            <td align="left">
              <tt>application/pkix-cert</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>usimplereenroll</tt></td>
            <td align="left">
              <tt>simplereenroll</tt> (<xref section="4.2.2" sectionFormat="comma" target="RFC7030"/>)</td>
            <td align="left">Yes</td>
            <td align="left">
              <tt>application/pkix-cert</tt></td>
          </tr>
          <tr>
            <td align="left">
              <tt>userverkeygen</tt></td>
            <td align="left">
              <tt>serverkeygen</tt> (<xref section="4.4" sectionFormat="comma" target="RFC7030"/>)</td>
            <td align="left">Yes</td>
            <td align="left">
              <tt>application/pem-key-certificate-chain</tt> (key + cert)</td>
          </tr>
        </tbody>
      </table>
      <t>These eight operations fall into four categories: capability discovery (<tt>ucacaps</tt>), CA certificate retrieval (<tt>ucacert</tt>, <tt>ucacerts</tt>), CRL metadata and retrieval (<tt>ucrlinfo</tt>, <tt>ucrl</tt>), and certificate enrollment and server-side key generation (<tt>usimpleenroll</tt>, <tt>usimplereenroll</tt>, <tt>userverkeygen</tt>).</t>
      <t>The "u" prefix is used consistently across all eight new operations.  For the six operations whose responses carry DER or PEM payloads (<tt>ucacert</tt>, <tt>ucacerts</tt>, <tt>ucrl</tt>, <tt>usimpleenroll</tt>, <tt>usimplereenroll</tt>, <tt>userverkeygen</tt>), it denotes "unencapsulated": their responses carry DER or PEM payloads without a CMS wrapper.  For <tt>ucacaps</tt> (capability discovery) and <tt>ucrlinfo</tt> (CRL metadata), there is no CMS equivalent; the "u" prefix is used solely to maintain a consistent naming convention with the other operations in this document.</t>
      <t>All security requirements imposed by <xref target="RFC7030"/> on the corresponding RFC 7030 operations (<tt>cacerts</tt>, <tt>simpleenroll</tt>, <tt>simplereenroll</tt>, <tt>serverkeygen</tt>) apply equally to the corresponding operations defined in this document.  Refer to <xref target="security"/> for security considerations specific to these new operations.</t>
    </section>
    <section anchor="conventions">
      <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?>

<t>The following terms from <xref target="RFC7030"/> are used in this document:</t>
      <dl>
        <dt>EST client:</dt>
        <dd>
          <t>The entity that contacts the EST server to obtain certificates or CA information, as defined in <xref section="1" sectionFormat="comma" target="RFC7030"/>.</t>
        </dd>
        <dt>EST server:</dt>
        <dd>
          <t>The entity that processes EST requests, typically acting as an RA between the EST client and the CA, as defined in <xref section="1" sectionFormat="comma" target="RFC7030"/>.</t>
        </dd>
        <dt>CA:</dt>
        <dd>
          <t>Certification Authority.  The entity that issues X.509 certificates <xref target="RFC5280"/>.</t>
        </dd>
        <dt>CSR:</dt>
        <dd>
          <t>Certificate Signing Request.  A PKCS#10 <xref target="RFC2986"/> message used by an EST client to request certificate issuance.</t>
        </dd>
        <dt>PoP:</dt>
        <dd>
          <t>Proof of Possession.  Verification that the requester holds the private key corresponding to the public key in the CSR, as described in <xref section="3.4" sectionFormat="comma" target="RFC7030"/>.</t>
        </dd>
      </dl>
    </section>
    <section anchor="est-url-structure">
      <name>EST URL Structure and Path Components</name>
      <t>The operations in this document follow the same URI path structure defined in <xref section="3.2.2" sectionFormat="comma" target="RFC7030"/>.  Retrieval operations (<tt>ucacaps</tt>, <tt>ucacert</tt>, <tt>ucacerts</tt>, <tt>ucrlinfo</tt>, <tt>ucrl</tt>) use HTTP GET:</t>
      <artwork><![CDATA[
GET /.well-known/est/<operation>
GET /.well-known/est/<label>/<operation>
]]></artwork>
      <t>Enrollment operations (<tt>usimpleenroll</tt>, <tt>usimplereenroll</tt>, <tt>userverkeygen</tt>) use HTTP POST:</t>
      <artwork><![CDATA[
POST /.well-known/est/<operation>
POST /.well-known/est/<label>/<operation>
]]></artwork>
      <t>An EST server <bcp14>MUST</bcp14> return HTTP 405 (Method Not Allowed) (<xref section="15.5.6" sectionFormat="comma" target="RFC9110"/>) if a client uses POST for a retrieval operation or GET for an enrollment operation.  As required by <xref section="15.5.6" sectionFormat="comma" target="RFC9110"/>, the response <bcp14>MUST</bcp14> include an <tt>Allow</tt> header field listing the method supported by the operation.</t>
      <t>For all operations defined in this document, an EST server indicates errors with a suitable 4xx or 5xx HTTP status code, consistent with <xref section="4.2.3" sectionFormat="comma" target="RFC7030"/>.  An EST server <bcp14>SHOULD</bcp14> return HTTP 404 (Not Found) if it does not recognize the <tt>&lt;label&gt;</tt>.  Additional rules for the enrollment operations are given in <xref target="enrollment-common"/>.</t>
      <t>In the URI templates above, <tt>&lt;operation&gt;</tt> is one of: <tt>ucacaps</tt>, <tt>ucacert</tt>, <tt>ucacerts</tt>, <tt>ucrlinfo</tt>, <tt>ucrl</tt>, <tt>usimpleenroll</tt>, <tt>usimplereenroll</tt>, or <tt>userverkeygen</tt>.</t>
      <t>The optional <tt>&lt;label&gt;</tt> path segment follows <xref section="3.2.2" sectionFormat="comma" target="RFC7030"/>: an EST server <bcp14>MAY</bcp14> use an additional path segment before the operation name to distinguish services for multiple CAs or certificate profiles.  The <tt>&lt;label&gt;</tt> <bcp14>MUST NOT</bcp14> be the same as any defined operation name.  As in <xref section="3.2.2" sectionFormat="comma" target="RFC7030"/>, <tt>&lt;label&gt;</tt> is a single path segment and therefore does not contain a "/" character.  The interpretation of <tt>&lt;label&gt;</tt> is outside the scope of this document; for example, it may be an opaque token that identifies a CA and certificate profile.</t>
      <section anchor="cte">
        <name>Base64 Transfer</name>
        <t><xref target="RFC8951"/> deprecates use of <tt>Content-Transfer-Encoding</tt> for EST.  The new operations defined in this document follow that guidance.</t>
        <t>Consistent with <xref section="3" sectionFormat="comma" target="RFC8951"/>, the operations defined in this document use base64 encoding for DER payloads in both requests and responses.  For operations that return DER payloads (<tt>application/pkix-cert</tt>, <tt>application/pkix-crl</tt>), the response body <bcp14>MUST</bcp14> be the base64 encoding (<xref section="4" sectionFormat="comma" target="RFC4648"/>) of the DER object.  This applies even though <xref target="RFC2585"/> defines these media types as carrying binary DER, so that all EST payloads share a single transfer format.</t>
        <t>For POST operations that submit a PKCS#10 CSR, the request body <bcp14>MUST</bcp14> be the base64 encoding (<xref section="4" sectionFormat="comma" target="RFC4648"/>) of the DER-encoded PKCS#10 object.</t>
        <t>Senders <bcp14>MUST NOT</bcp14> include a <tt>Content-Transfer-Encoding</tt> header.  Receivers <bcp14>MUST</bcp14> ignore any <tt>Content-Transfer-Encoding</tt> header that is present.  As specified in <xref section="3.1" sectionFormat="comma" target="RFC8951"/>, receivers <bcp14>SHOULD</bcp14> tolerate white space (CR, LF, space, and tab) in base64-encoded bodies; senders are not required to insert any white space.</t>
        <t>The <tt>ucacaps</tt>, <tt>ucrlinfo</tt>, <tt>ucacerts</tt>, and <tt>userverkeygen</tt> operations already return textual payloads and therefore do not require any additional transfer-encoding mechanism.</t>
      </section>
      <section anchor="text-line-format">
        <name>Line-Oriented Text Responses</name>
        <t>The <tt>ucacaps</tt> and <tt>ucrlinfo</tt> responses use the following line format:</t>
        <ul spacing="normal">
          <li>
            <t>The body <bcp14>MUST</bcp14> consist of US-ASCII characters only.  EST servers <bcp14>SHOULD</bcp14> send the Content-Type <tt>text/plain; charset=us-ascii</tt>.</t>
          </li>
          <li>
            <t>Each line <bcp14>MUST</bcp14> be terminated by <tt>&lt;CR&gt;&lt;LF&gt;</tt> or <tt>&lt;LF&gt;</tt>.  EST clients <bcp14>MUST</bcp14> accept a final line that is not terminated.</t>
          </li>
          <li>
            <t>EST servers <bcp14>MUST NOT</bcp14> send leading or trailing white space on a line.  EST clients <bcp14>MUST</bcp14> ignore leading and trailing white space (space and tab) on each line, and <bcp14>MUST</bcp14> ignore empty lines.</t>
          </li>
        </ul>
      </section>
      <section anchor="http-caching">
        <name>HTTP Caching</name>
        <t>The <tt>ucacert</tt>, <tt>ucacerts</tt>, and <tt>ucrl</tt> retrieval operations support HTTP caching <xref target="RFC9111"/>.  EST servers <bcp14>SHOULD</bcp14> include caching metadata in successful (HTTP 200) responses to these operations so that clients and HTTP intermediaries can reuse them.  EST clients <bcp14>SHOULD</bcp14> cache such responses locally and refresh them according to the advertised freshness information.  Successful responses for these operations <bcp14>MUST NOT</bcp14> include <tt>Pragma: no-cache</tt>, <tt>Cache-Control: no-cache</tt>, or <tt>Cache-Control: no-store</tt>.</t>
      </section>
    </section>
    <section anchor="ucacaps-section">
      <name>EST Server Capability Discovery</name>
      <t>EST <xref target="RFC7030"/> does not provide a mechanism for EST clients to discover which operations an EST server supports before invoking them.  This section defines the <tt>ucacaps</tt> operation for that purpose.</t>
      <t>EST clients <bcp14>SHOULD</bcp14> issue a <tt>ucacaps</tt> request before using any of the other operations defined in this document, to confirm that the EST server supports the intended operation.</t>
      <section anchor="ucacaps">
        <name>ucacaps</name>
        <section anchor="ucacaps-request">
          <name>Request</name>
          <t>The EST client requests the server's capability list using the HTTP GET method.  No request body is sent.  The EST server <bcp14>SHOULD NOT</bcp14> require client authentication for this operation, consistent with <xref section="4.1.2" sectionFormat="comma" target="RFC7030"/>.</t>
          <artwork><![CDATA[
GET /.well-known/est/<label>/ucacaps
]]></artwork>
        </section>
        <section anchor="ucacaps-response">
          <name>Response</name>
          <t>On success, the EST server returns HTTP status 200 with:</t>
          <ul spacing="normal">
            <li>
              <t>Content-Type: <tt>text/plain</tt></t>
            </li>
            <li>
              <t>Body: A plain-text list of capability keywords, one keyword per line.  Keywords are unquoted and case-insensitive; EST clients <bcp14>MUST</bcp14> match them in a case-insensitive manner.  The line format is specified in <xref target="text-line-format"/>.</t>
            </li>
          </ul>
          <t>The EST server <bcp14>SHOULD</bcp14> use the canonical lowercase form defined in <xref target="ucacaps-keywords"/>.  The EST server <bcp14>MAY</bcp14> advertise additional, implementation-specific keywords not defined in this document.  EST clients <bcp14>MUST</bcp14> ignore any unknown keywords.</t>
          <t>If the EST server supports none of the capabilities listed in <xref target="ucacaps-keywords"/>, it <bcp14>SHOULD</bcp14> return an empty body.  An EST client that receives an empty body <bcp14>SHOULD</bcp14> interpret the response as if none of the capabilities are supported.  An EST client that receives an HTTP error response to a <tt>ucacaps</tt> request <bcp14>MUST</bcp14> treat the EST server as not supporting any of the operations defined in this document, and <bcp14>MUST</bcp14> fall back to the operations defined in <xref target="RFC7030"/>.  An EST client <bcp14>MAY</bcp14> repeat the <tt>ucacaps</tt> request at a later time, for example after a temporary error such as HTTP 503 (Service Unavailable).</t>
        </section>
        <section anchor="ucacaps-format-rationale">
          <name>Choice of Capability-List Format</name>
          <t>The <tt>ucacaps</tt> response uses <tt>text/plain</tt> rather than JSON or CBOR because the information being conveyed is intentionally limited to an unordered set of capability keywords.  A line-oriented keyword list can be parsed with minimal code, can be inspected manually, and does not require a JSON, CBOR, or CMS parser.  This is consistent with the purpose of this document: reducing parsing requirements in EST deployments that do not implement CMS.</t>
          <t>JSON and CBOR are both suitable formats when a protocol needs structured values, nested data, typed fields, or extensible objects.  The <tt>ucacaps</tt> response does not require those properties.  Each advertised capability is a single token, unknown tokens are ignored, and absence of a token has a simple meaning.  Adding a structured encoding for this operation would therefore increase implementation requirements without adding protocol semantics.</t>
          <t>Future specifications that need to advertise parameters associated with a capability, such as algorithm lists, profile identifiers, size limits, or transport-specific options, can define additional capability keywords or a separate structured discovery operation.  Such an extension would be preferable to overloading the simple <tt>ucacaps</tt> keyword list with structured data.</t>
        </section>
        <section anchor="ucacaps-keywords">
          <name>Capability Keywords</name>
          <t>The following keywords are defined.  An EST server <bcp14>MUST</bcp14> include a keyword in the <tt>ucacaps</tt> response if and only if it supports the corresponding operation.</t>
          <t>RFC 7030 operations (see also <xref target="tab-ucacaps-rfc7030"/>):</t>
          <table anchor="tab-ucacaps-rfc7030">
            <name>ucacaps Keywords for RFC 7030 Operations</name>
            <thead>
              <tr>
                <th align="left">Keyword</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>cacerts</tt></td>
                <td align="left">EST server supports cacerts (<xref section="4.1" sectionFormat="comma" target="RFC7030"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>simpleenroll</tt></td>
                <td align="left">EST server supports simpleenroll (<xref section="4.2.1" sectionFormat="comma" target="RFC7030"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>simplereenroll</tt></td>
                <td align="left">EST server supports simplereenroll (<xref section="4.2.2" sectionFormat="comma" target="RFC7030"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>fullcmc</tt></td>
                <td align="left">EST server supports fullcmc (<xref section="4.3" sectionFormat="comma" target="RFC7030"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>serverkeygen</tt></td>
                <td align="left">EST server supports serverkeygen (<xref section="4.4" sectionFormat="comma" target="RFC7030"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>csrattrs</tt></td>
                <td align="left">EST server supports csrattrs (<xref section="4.5" sectionFormat="comma" target="RFC7030"/>, as updated by <xref target="RFC9908"/>)</td>
              </tr>
            </tbody>
          </table>
          <t>RFC 8295 operations (see also <xref target="tab-ucacaps-rfc8295"/>):</t>
          <table anchor="tab-ucacaps-rfc8295">
            <name>ucacaps Keywords for RFC 8295 Operations</name>
            <thead>
              <tr>
                <th align="left">Keyword</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>pal</tt></td>
                <td align="left">EST server supports pal (<xref section="2" sectionFormat="comma" target="RFC8295"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>eecerts</tt></td>
                <td align="left">EST server supports eecerts (<xref section="3" sectionFormat="comma" target="RFC8295"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>crls</tt></td>
                <td align="left">EST server supports crls (<xref section="4" sectionFormat="comma" target="RFC8295"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>symmetrickeys</tt></td>
                <td align="left">EST server supports symmetrickeys (<xref section="5.1" sectionFormat="comma" target="RFC8295"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>symmetrickeys/return</tt></td>
                <td align="left">EST server supports symmetrickeys/return (<xref section="5.2" sectionFormat="comma" target="RFC8295"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>firmware</tt></td>
                <td align="left">EST server supports firmware (<xref section="6.1" sectionFormat="comma" target="RFC8295"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>firmware/return</tt></td>
                <td align="left">EST server supports firmware/return (<xref section="6.2" sectionFormat="comma" target="RFC8295"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>tamp</tt></td>
                <td align="left">EST server supports tamp (<xref section="7.1" sectionFormat="comma" target="RFC8295"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>tamp/return</tt></td>
                <td align="left">EST server supports tamp/return (<xref section="7.2" sectionFormat="comma" target="RFC8295"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>serverkeygen/return</tt></td>
                <td align="left">EST server supports serverkeygen/return (<xref section="8.2" sectionFormat="comma" target="RFC8295"/>)</td>
              </tr>
            </tbody>
          </table>
          <t>Operations defined in this document (see also <xref target="tab-ucacaps-new"/>):</t>
          <table anchor="tab-ucacaps-new">
            <name>ucacaps Keywords Defined in This Document</name>
            <thead>
              <tr>
                <th align="left">Keyword</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>ucacert</tt></td>
                <td align="left">EST server supports ucacert (<xref target="ucacert"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>ucacerts</tt></td>
                <td align="left">EST server supports ucacerts (<xref target="ucacerts"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>ucrlinfo</tt></td>
                <td align="left">EST server supports ucrlinfo (<xref target="ucrlinfo"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>ucrl</tt></td>
                <td align="left">EST server supports ucrl (<xref target="ucrl"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>usimpleenroll</tt></td>
                <td align="left">EST server supports usimpleenroll (<xref target="usimpleenroll"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>usimplereenroll</tt></td>
                <td align="left">EST server supports usimplereenroll (<xref target="usimplereenroll"/>)</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>userverkeygen</tt></td>
                <td align="left">EST server supports userverkeygen (<xref target="userverkeygen"/>)</td>
              </tr>
            </tbody>
          </table>
          <t>Note: <xref target="RFC7030"/> designates <tt>cacerts</tt>, <tt>simpleenroll</tt>, and <tt>simplereenroll</tt> as <bcp14>MUST</bcp14>-implement operations.  The rule above therefore implies that every <tt>ucacaps</tt> response from a conforming EST server includes these three keywords, which allows a client to enumerate all capabilities from a single request.</t>
          <t>Example response:</t>
          <artwork><![CDATA[
cacerts
simpleenroll
simplereenroll
serverkeygen
crls
ucacert
ucacerts
ucrlinfo
ucrl
usimpleenroll
usimplereenroll
userverkeygen
]]></artwork>
          <t>This response indicates that the EST server supports the three mandatory RFC 7030 operations, <tt>serverkeygen</tt>, the RFC 8295 <tt>crls</tt> operation, and all operations defined in this document.</t>
        </section>
      </section>
    </section>
    <section anchor="ca-certificates">
      <name>Distribution of CA Certificates</name>
      <t>This section defines two operations that provide EST clients with CA certificate material.  <tt>ucacert</tt> is a new operation with no RFC 7030 equivalent.  <tt>ucacerts</tt> is an alternative encoding of the <tt>cacerts</tt> operation (<xref section="4.1" sectionFormat="comma" target="RFC7030"/>), returning the chain as a PEM-encoded certificate chain (<tt>application/pem-certificate-chain</tt> <xref target="RFC8555"/>) without a CMS wrapper.</t>
      <section anchor="ucacert">
        <name>ucacert</name>
        <t>The <tt>ucacert</tt> operation returns the issuing CA certificate for the requested EST service as a single DER-encoded X.509 certificate.  This differs from <tt>cacerts</tt> in two important ways: (1) only the issuing CA certificate is returned, not the full certificate chain; and (2) the certificate is returned without a CMS wrapper.</t>
        <section anchor="ucacert-request">
          <name>Request</name>
          <t>The EST client requests the CA certificate using the HTTP GET method.  No request body is sent.  The EST server <bcp14>SHOULD NOT</bcp14> require client authentication for this operation, consistent with <xref section="4.1.2" sectionFormat="comma" target="RFC7030"/>.</t>
          <artwork><![CDATA[
GET /.well-known/est/<label>/ucacert
]]></artwork>
        </section>
        <section anchor="ucacert-response">
          <name>Response</name>
          <t>On success, the EST server returns HTTP status 200 with:</t>
          <ul spacing="normal">
            <li>
              <t>Content-Type: <tt>application/pkix-cert</tt></t>
            </li>
            <li>
              <t>Body: The Base64 encoding of the DER-encoded X.509 certificate <xref target="RFC5280"/> of the issuing CA.</t>
            </li>
          </ul>
          <t>The returned certificate is the issuing CA certificate for the requested EST service context, as selected by the EST server for the target <tt>&lt;label&gt;</tt> (if any).  The response contains exactly one certificate.  During a CA key rollover (<xref section="4.1.3" sectionFormat="comma" target="RFC7030"/>), the EST server <bcp14>MUST</bcp14> return the CA certificate whose key is currently used to issue certificates for the target <tt>&lt;label&gt;</tt>.</t>
          <t>Successful <tt>ucacert</tt> responses <bcp14>SHOULD</bcp14> include HTTP caching metadata.  In particular, EST servers <bcp14>SHOULD</bcp14> include <tt>ETag</tt> and <tt>Last-Modified</tt> headers.  EST servers <bcp14>SHOULD</bcp14> include <tt>Cache-Control</tt> and <tt>Expires</tt> headers when the certificate lifetime or the local CA-certificate replacement policy provides a meaningful freshness bound.</t>
        </section>
        <section anchor="ucacert-vs-cacerts">
          <name>Relationship to cacerts</name>
          <t>The <tt>cacerts</tt> operation (<xref section="4.1" sectionFormat="comma" target="RFC7030"/>) returns the full certificate chain (issuing CA plus any intermediate and root CAs) wrapped in a CMS <tt>certs-only</tt> structure (<tt>application/pkcs7-mime; smime-type=certs-only</tt>).</t>
          <t><tt>ucacert</tt> differs in two respects:</t>
          <ol spacing="normal" type="1"><li>
              <t><strong>Scope</strong>: <tt>ucacert</tt> returns only the issuing CA certificate; the full chain is not included.  EST clients that need the full chain for path validation should use <tt>ucacerts</tt> (<xref target="ucacerts"/>) or <tt>cacerts</tt> (<xref section="4.1" sectionFormat="comma" target="RFC7030"/>).</t>
            </li>
            <li>
              <t><strong>Format</strong>: The certificate is returned as the Base64 encoding of a single DER-encoded X.509 certificate <xref target="RFC5280"/>, with no CMS wrapper.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="ucacerts">
        <name>ucacerts</name>
        <t>The <tt>ucacerts</tt> operation returns the CA certificate chain for the requested EST service (<xref section="4.1.2" sectionFormat="comma" target="RFC7030"/>) as a PEM-encoded certificate chain (<tt>application/pem-certificate-chain</tt>), without a CMS wrapper.</t>
        <section anchor="ucacerts-request">
          <name>Request</name>
          <t>The EST client requests the CA certificate chain using the HTTP GET method.  No request body is sent.  The EST server <bcp14>SHOULD NOT</bcp14> require client authentication for this operation, consistent with <xref section="4.1.2" sectionFormat="comma" target="RFC7030"/>.</t>
          <artwork><![CDATA[
GET /.well-known/est/<label>/ucacerts
]]></artwork>
        </section>
        <section anchor="ucacerts-response">
          <name>Response</name>
          <t>On success, the EST server returns HTTP status 200 with:</t>
          <ul spacing="normal">
            <li>
              <t>Content-Type: <tt>application/pem-certificate-chain</tt></t>
            </li>
            <li>
              <t>Body: A PEM-encoded certificate chain <xref target="RFC8555"/> containing one or more certificates, each encoded as a <tt>CERTIFICATE</tt> PEM block.  The body consists of the following parts, in this order:  </t>
              <ol spacing="normal" type="1"><li>
                  <t>The certificate chain of the issuing CA.  The first certificate <bcp14>MUST</bcp14> be the issuing CA certificate, selected as for <tt>ucacert</tt> (<xref target="ucacert-response"/>), including during a CA key rollover.  Each following certificate in the chain <bcp14>MUST</bcp14> directly certify the one preceding it.  The chain <bcp14>MUST</bcp14> end with the root CA certificate.  If the issuing CA is itself the root CA, the chain consists of that single certificate.</t>
                </li>
                <li>
                  <t>If a root CA key update applies, the EST server <bcp14>SHOULD</bcp14> append the four "Root CA Key Update" certificates defined in <xref section="4.4" sectionFormat="comma" target="RFC9810"/>.  If present, these certificates <bcp14>MUST</bcp14> appear in the order OldWithNew, NewWithNew, NewWithOld, and OldWithOld.</t>
                </li>
              </ol>
            </li>
          </ul>
          <t>Successful <tt>ucacerts</tt> responses <bcp14>SHOULD</bcp14> include HTTP caching metadata.  In particular, EST servers <bcp14>SHOULD</bcp14> include <tt>ETag</tt> and <tt>Last-Modified</tt> headers.  EST servers <bcp14>SHOULD</bcp14> include <tt>Cache-Control</tt> and <tt>Expires</tt> headers when the chain lifetime or the local CA-certificate replacement policy provides a meaningful freshness bound.</t>
        </section>
        <section anchor="ucacerts-vs-cacerts">
          <name>Comparison to cacerts</name>
          <t>The <tt>cacerts</tt> operation (<xref section="4.1" sectionFormat="comma" target="RFC7030"/>) wraps the certificate chain in a CMS <tt>certs-only</tt> structure.  <tt>ucacerts</tt> delivers the certificate chain of the issuing CA, followed by any root CA key update certificates, as concatenated PEM blocks that many TLS and PKI libraries can parse directly without a CMS library.  Unlike <tt>cacerts</tt> (<xref section="4.1.3" sectionFormat="comma" target="RFC7030"/>), whose certificates are unordered, <tt>ucacerts</tt> defines a fixed order, so that an EST client can identify the certificate chain and the root CA key update certificates by position.</t>
          <t>Because the root CA key update certificates follow the chain, not every certificate in the body certifies the one preceding it.  EST clients that process the body with generic code for <tt>application/pem-certificate-chain</tt> (<xref section="9.1" sectionFormat="comma" target="RFC8555"/>) need to take this into account.</t>
        </section>
      </section>
    </section>
    <section anchor="crl-operations">
      <name>Distribution of Certificate Revocation Lists</name>
      <t>This section defines the <tt>ucrlinfo</tt> and <tt>ucrl</tt> operations.  Neither operation has an equivalent in <xref target="RFC7030"/>.  <xref target="RFC8295"/> defines the <tt>crls</tt> EST extension for distribution of one or more CRLs (and ARLs), but it does not define a lightweight CRL-metadata operation corresponding to <tt>ucrlinfo</tt>.  Revocation status is also commonly obtained via the CRL Distribution Points (CDP) extension in issued certificates.  The <tt>ucrlinfo</tt> operation returns lightweight metadata for the current CRL, including CRL number, validity window, issuer, and SHA-256 fingerprint, without downloading the full CRL body.  The <tt>ucrl</tt> operation provides an in-band retrieval path for that same current CRL when the full object is needed.</t>
      <t>In this document, the "current CRL" is the most recently issued complete CRL that covers certificates issued by the target CA.  If the CA partitions its CRLs, the current CRL is selected as described in <xref target="crl-partitioned"/>.  The current CRL may be issued by the CA itself or, as an indirect CRL, by another CRL issuer (<xref target="crl-indirect"/>).  Delta CRLs (<xref section="5.2.4" sectionFormat="comma" target="RFC5280"/>) are not supported: <tt>ucrl</tt> <bcp14>MUST NOT</bcp14> return a delta CRL, and <tt>ucrlinfo</tt> <bcp14>MUST NOT</bcp14> describe one.</t>
      <section anchor="crl-selection">
        <name>Selecting the Current CRL</name>
        <section anchor="crl-partitioned">
          <name>Partitioned CRLs</name>
          <t>A CA may partition its revocation information into several CRLs, each identified by the distribution point name in its Issuing Distribution Point (IDP) extension (<xref section="5.2.5" sectionFormat="comma" target="RFC5280"/>).  The certificates covered by a partition carry the same distribution point name in their CRL Distribution Points (CDP) extension (<xref section="4.2.1.13" sectionFormat="comma" target="RFC5280"/>).</t>
          <t>To select a partition, the EST client appends the query parameter <tt>dp</tt> to the <tt>ucrlinfo</tt> or <tt>ucrl</tt> request URI:</t>
          <artwork><![CDATA[
GET /.well-known/est/<label>/ucrlinfo?dp=<dpname>
GET /.well-known/est/<label>/ucrl?dp=<dpname>
]]></artwork>
          <t>The value <tt>&lt;dpname&gt;</tt> is the base64url encoding without padding (<xref section="5" sectionFormat="comma" target="RFC4648"/>) of the DER encoding of the <tt>DistributionPointName</tt> taken from the <tt>distributionPoint</tt> field of a <tt>DistributionPoint</tt> in the CDP extension of the certificate whose revocation status is to be checked.  The EST client does not need to parse the <tt>DistributionPointName</tt>; it copies its DER encoding unchanged.  If the CDP extension contains more than one <tt>DistributionPoint</tt> with a <tt>distributionPoint</tt> field, the EST client <bcp14>MAY</bcp14> use any of them.</t>
          <t>The EST server processes the <tt>dp</tt> parameter as follows:</t>
          <ul spacing="normal">
            <li>
              <t>If the CA does not partition its CRLs, the EST server <bcp14>MUST</bcp14> ignore the <tt>dp</tt> parameter and select the single current CRL of the CA.</t>
            </li>
            <li>
              <t>If the CA partitions its CRLs and the <tt>dp</tt> parameter is present, the EST server <bcp14>MUST</bcp14> select the current CRL whose IDP distribution point name matches the decoded <tt>DistributionPointName</tt>, using the name matching rules of <xref section="6.3.3" sectionFormat="comma" target="RFC5280"/>.  If no CRL matches, the EST server <bcp14>MUST</bcp14> return HTTP 404 (Not Found).</t>
            </li>
            <li>
              <t>If the CA partitions its CRLs and the <tt>dp</tt> parameter is absent, the EST server <bcp14>MUST</bcp14> return HTTP 400 (Bad Request), because no single current CRL can be selected.  The response body <bcp14>SHOULD</bcp14> be a human-readable <tt>text/plain</tt> message indicating that the <tt>dp</tt> parameter is required.</t>
            </li>
            <li>
              <t>If the <tt>dp</tt> parameter cannot be decoded as a DER-encoded <tt>DistributionPointName</tt>, the EST server <bcp14>MUST</bcp14> return HTTP 400 (Bad Request).</t>
            </li>
          </ul>
          <t>An EST client <bcp14>SHOULD</bcp14> include the <tt>dp</tt> parameter whenever the certificate to be checked contains a CDP extension with a <tt>distributionPoint</tt> field, so that the request succeeds regardless of whether the CA partitions its CRLs.  Because the <tt>dp</tt> parameter is part of the request URI, each partition is cached separately by HTTP caches (<xref target="http-caching"/>).</t>
        </section>
        <section anchor="crl-indirect">
          <name>Indirect CRLs</name>
          <t>The revocation information for certificates issued by the target CA may be published in an indirect CRL (<xref section="5.2.5" sectionFormat="comma" target="RFC5280"/>) signed by a CRL issuer other than the CA.  In this case, the EST server <bcp14>MUST</bcp14> obtain the current indirect CRL from the CRL issuer in advance, and <bcp14>MUST</bcp14> obtain each newer CRL before the <tt>nextUpdate</tt> time of the previous one.  The EST server returns the indirect CRL through <tt>ucrl</tt> and describes it through <tt>ucrlinfo</tt> in the same way as a CRL issued by the CA itself.  The EST server <bcp14>MUST NOT</bcp14> modify the CRL.</t>
          <t>The <tt>issuer</tt> field of the <tt>ucrlinfo</tt> response is then the name of the CRL issuer, which differs from the name of the target CA.  EST clients <bcp14>MUST NOT</bcp14> assume that the CRL issuer is the target CA, and <bcp14>MUST</bcp14> process indirect CRLs as specified in <xref section="6.3.3" sectionFormat="comma" target="RFC5280"/>, including the Certificate Issuer CRL entry extension (<xref section="5.3.3" sectionFormat="comma" target="RFC5280"/>).</t>
        </section>
      </section>
      <section anchor="ucrlinfo">
        <name>ucrlinfo</name>
        <t>The <tt>ucrlinfo</tt> operation returns metadata about the current CRL for the target CA without downloading the full CRL body.  This enables an EST client to check whether its locally cached CRL is still current (by comparing <tt>nextupdate</tt>, <tt>crlnumber</tt>, or <tt>sha256sum</tt>) before deciding to issue a <tt>ucrl</tt> request.  Unlike the RFC 8295 <tt>crls</tt> operation, <tt>ucrlinfo</tt> does not describe a set of CRLs; it describes only the current CRL selected by the EST server for the target CA.</t>
        <section anchor="ucrlinfo-request">
          <name>Request</name>
          <t>The EST client requests the CRL metadata using the HTTP GET method.  No request body is sent.  The EST server <bcp14>SHOULD NOT</bcp14> require client authentication for this operation, consistent with <xref section="4.1.2" sectionFormat="comma" target="RFC7030"/>.</t>
          <artwork><![CDATA[
GET /.well-known/est/<label>/ucrlinfo
GET /.well-known/est/<label>/ucrlinfo?dp=<dpname>
]]></artwork>
          <t>The optional <tt>dp</tt> query parameter selects a CRL partition, as specified in <xref target="crl-partitioned"/>.</t>
        </section>
        <section anchor="ucrlinfo-response">
          <name>Response</name>
          <t>On success, the EST server returns HTTP status 200 with:</t>
          <ul spacing="normal">
            <li>
              <t>Content-Type: <tt>text/plain</tt></t>
            </li>
            <li>
              <t>Body: A plain-text list of CRL metadata fields, one field per line, using the line format specified in <xref target="text-line-format"/>.  Each line has the form <tt>&lt;name&gt;=&lt;value&gt;</tt>.  Field order is not significant; EST clients <bcp14>MUST</bcp14> accept fields in any order and <bcp14>MUST</bcp14> ignore unknown field names.</t>
            </li>
          </ul>
          <t>Field names are case-insensitive; the canonical form is lowercase as shown in <xref target="tab-ucrlinfo-fields"/>.  EST servers <bcp14>SHOULD</bcp14> use the canonical lowercase form.  EST clients <bcp14>MUST</bcp14> match field names in a case-insensitive manner.</t>
          <t>The defined fields are listed in <xref target="tab-ucrlinfo-fields"/>.  Date/time values are expressed as Unix time (seconds since 1970-01-01T00:00:00Z).</t>
          <table anchor="tab-ucrlinfo-fields">
            <name>ucrlinfo Response Fields</name>
            <thead>
              <tr>
                <th align="left">Field name</th>
                <th align="left">Value</th>
                <th align="left">Presence</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>sha256sum</tt></td>
                <td align="left">Base64 encoding (<xref section="4" sectionFormat="comma" target="RFC4648"/>, with padding) of the SHA-256 digest of the DER-encoded CRL; note that this is not the hexadecimal form</td>
                <td align="left">
                  <bcp14>MUST</bcp14></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>issuer</tt></td>
                <td align="left">Single-line Base64-encoded DER encoding of the CRL <tt>issuer</tt> field (<xref section="5.1.2.3" sectionFormat="comma" target="RFC5280"/>)</td>
                <td align="left">
                  <bcp14>MUST</bcp14></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>thisupdate</tt></td>
                <td align="left">
                  <tt>thisUpdate</tt> time of the CRL as Unix time (seconds since 1970-01-01T00:00:00Z) (<xref section="5.1.2.4" sectionFormat="comma" target="RFC5280"/>)</td>
                <td align="left">
                  <bcp14>MUST</bcp14></td>
              </tr>
              <tr>
                <td align="left">
                  <tt>nextupdate</tt></td>
                <td align="left">
                  <tt>nextUpdate</tt> time of the CRL as Unix time (seconds since 1970-01-01T00:00:00Z) (<xref section="5.1.2.5" sectionFormat="comma" target="RFC5280"/>)</td>
                <td align="left">
                  <bcp14>MUST</bcp14> if present in CRL</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>crlnumber</tt></td>
                <td align="left">Decimal representation of the CRL Number extension value (<xref section="5.2.3" sectionFormat="comma" target="RFC5280"/>)</td>
                <td align="left">
                  <bcp14>MUST</bcp14> if present in CRL</td>
              </tr>
            </tbody>
          </table>
          <t>Example response:</t>
          <artwork><![CDATA[
sha256sum=fcWyNz1VMfF2wj4/ozla0+Aqj5s0c4fHkkjY8d26oF0=
issuer=MIHxMQswCQYDVQQGEwJERTEP...
thisupdate=1735732800
nextupdate=1736337600
crlnumber=42
]]></artwork>
          <t>If no current CRL is available, the EST server <bcp14>MUST</bcp14> return HTTP status 503 (Service Unavailable).  The server <bcp14>MAY</bcp14> include a <tt>Retry-After</tt> header (<xref section="10.2.3" sectionFormat="comma" target="RFC9110"/>) to indicate when the CRL is expected to become available.</t>
        </section>
        <section anchor="ucrlinfo-format-rationale">
          <name>Choice of CRL-Metadata Format</name>
          <t>The <tt>ucrlinfo</tt> response uses <tt>text/plain</tt> rather than JSON or CBOR because the response is a small set of independent <tt>name=value</tt> fields.  The values are already encoded as simple strings: Unix time values for freshness checks, decimal text for the CRL number, and Base64 text for binary DER or digest values.  A line-oriented format lets an EST client compare freshness indicators and decide whether to download the CRL without adding a JSON, CBOR, CMS, or ASN.1 parser for the metadata response itself.</t>
          <t>JSON or CBOR would be useful if <tt>ucrlinfo</tt> needed nested objects, arrays, typed alternatives, or complex policy information.  This operation deliberately avoids those semantics.  Field order is insignificant, unknown fields are ignored, and each defined field has a single textual representation, so a structured container would add implementation cost without changing the protocol semantics.</t>
          <t>Future specifications that need richer revocation metadata can define additional fields with simple textual encodings or a separate structured operation.  Such an extension would be preferable to changing the base <tt>ucrlinfo</tt> response format.</t>
          <t><tt>ucrlinfo</tt> complements, rather than replaces, HTTP conditional requests (<xref section="13" sectionFormat="comma" target="RFC9110"/>).  A conditional <tt>ucrl</tt> request using <tt>If-None-Match</tt> indicates only whether the CRL held by this EST server has changed, and the entity tag is opaque to the client.  In contrast, <tt>ucrlinfo</tt> exposes the CRL metadata itself at the application layer: a client can compare <tt>sha256sum</tt> or <tt>crlnumber</tt> against a CRL obtained by other means, such as from a CRL Distribution Point, and can schedule its next check from <tt>nextupdate</tt>, without retaining HTTP validators or parsing the CRL.</t>
          <t>Because the purpose of <tt>ucrlinfo</tt> is to report the current CRL state, EST servers <bcp14>SHOULD NOT</bcp14> allow <tt>ucrlinfo</tt> responses to remain fresh beyond the <tt>nextUpdate</tt> time of the described CRL, and <bcp14>SHOULD</bcp14> include <tt>Cache-Control: no-cache</tt> when a new CRL may be issued before that time.</t>
        </section>
      </section>
      <section anchor="ucrl">
        <name>ucrl</name>
        <t>The <tt>ucrl</tt> operation returns the current CRL for the target CA as a DER-encoded CRL.  Unlike the RFC 8295 <tt>crls</tt> operation, which distributes one or more CRLs in a CRL package, <tt>ucrl</tt> returns only the single current CRL selected by the EST server for the target CA.</t>
        <section anchor="ucrl-request">
          <name>Request</name>
          <t>The EST client requests the current CRL using the HTTP GET method.  No request body is sent.  The EST server <bcp14>SHOULD NOT</bcp14> require client authentication for this operation, consistent with <xref section="4.1.2" sectionFormat="comma" target="RFC7030"/>.</t>
          <artwork><![CDATA[
GET /.well-known/est/<label>/ucrl
GET /.well-known/est/<label>/ucrl?dp=<dpname>
]]></artwork>
          <t>The optional <tt>dp</tt> query parameter selects a CRL partition, as specified in <xref target="crl-partitioned"/>.</t>
        </section>
        <section anchor="ucrl-response">
          <name>Response</name>
          <t>On success, the EST server returns HTTP status 200 with:</t>
          <ul spacing="normal">
            <li>
              <t>Content-Type: <tt>application/pkix-crl</tt></t>
            </li>
            <li>
              <t>Body: The Base64 encoding of the DER-encoded X.509 CRL <xref target="RFC5280"/> of the target CA.</t>
            </li>
          </ul>
          <t>Successful <tt>ucrl</tt> responses <bcp14>SHOULD</bcp14> include HTTP caching metadata.  In particular, EST servers <bcp14>SHOULD</bcp14> include <tt>Last-Modified</tt>, <tt>ETag</tt>, <tt>Expires</tt>, and <tt>Cache-Control</tt> headers <xref target="RFC9111"/>.  When present, <tt>Last-Modified</tt> <bcp14>SHOULD</bcp14> reflect the CRL <tt>thisUpdate</tt> value, and <tt>Expires</tt> <bcp14>SHOULD</bcp14> reflect the CRL <tt>nextUpdate</tt> value.  The <tt>Cache-Control</tt> header <bcp14>SHOULD</bcp14> include the <tt>public</tt>, <tt>no-transform</tt>, and <tt>must-revalidate</tt> directives, and a <tt>max-age</tt> value chosen so that the response does not remain fresh beyond the CRL <tt>nextUpdate</tt> time.</t>
          <t>If no current CRL is available, the EST server <bcp14>MUST</bcp14> return HTTP status 503 (Service Unavailable).  The server <bcp14>MAY</bcp14> include a <tt>Retry-After</tt> header to indicate when the CRL is expected to become available.</t>
        </section>
      </section>
    </section>
    <section anchor="enrollment-ops">
      <name>Client Certificate Request Functions</name>
      <t>This section defines three enrollment operations that extend the Client Certificate Request Functions of <xref section="4.2" sectionFormat="comma" target="RFC7030"/> and the Server-Side Key Generation operation of <xref section="4.4" sectionFormat="comma" target="RFC7030"/>.</t>
      <section anchor="enrollment-auth">
        <name>Client Authentication</name>
        <t>The enrollment operations defined in this section (<tt>usimpleenroll</tt>, <tt>usimplereenroll</tt>, and <tt>userverkeygen</tt>) require client authentication.  The client authentication requirements are unchanged from <xref target="RFC7030"/>.  EST clients and EST servers <bcp14>MUST</bcp14> follow <xref section="3.2.3" sectionFormat="comma" target="RFC7030"/> for HTTP-based client authentication and <xref section="3.3.2" sectionFormat="comma" target="RFC7030"/> for certificate-based client authentication at the TLS layer, as applicable to the authentication method in use.</t>
      </section>
      <section anchor="enrollment-common">
        <name>Common Processing Rules</name>
        <t>Unless stated otherwise, the enrollment operations defined in this section follow the processing rules of the corresponding operations in <xref target="RFC7030"/>.  In particular:</t>
        <ul spacing="normal">
          <li>
            <t>Linking identity and POP: <xref section="3.5" sectionFormat="comma" target="RFC7030"/> applies to <tt>usimpleenroll</tt> and <tt>usimplereenroll</tt>.  EST clients <bcp14>SHOULD</bcp14> include the tls-unique value in the challenge-password attribute of the CSR, and if it is present, the EST server <bcp14>MUST</bcp14> verify it.  The EST server <bcp14>MAY</bcp14> reject requests without this information, as indicated by server policy.  This mechanism does not apply to <tt>userverkeygen</tt>, whose CSR carries no PoP signature (<xref target="userverkeygen-request"/>).</t>
          </li>
          <li>
            <t>Deferred processing: As specified in <xref section="4.2.3" sectionFormat="comma" target="RFC7030"/>, an EST server <bcp14>MAY</bcp14> respond with HTTP 202 (Accepted) when the request has been accepted for processing but the certificate is not yet available, for example because manual approval is required.  The response <bcp14>MUST</bcp14> include a <tt>Retry-After</tt> header field (<xref section="10.2.3" sectionFormat="comma" target="RFC9110"/>).  The EST client <bcp14>MUST</bcp14> wait at least the specified time before repeating the same request, and the EST server is responsible for maintaining the state needed to recognize the repeated request.  If the CSR includes tls-unique information and the client repeats the request in a new TLS session, the CSR has to be recreated as described in <xref section="4.2.3" sectionFormat="comma" target="RFC7030"/>.</t>
          </li>
          <li>
            <t>Error responses: As specified in <xref section="4.2.3" sectionFormat="comma" target="RFC7030"/>, the EST server <bcp14>MUST</bcp14> answer with a suitable 4xx or 5xx HTTP status code when a problem occurs.  Because the operations in this document are intended for EST clients that do not implement CMS, the EST server <bcp14>SHOULD NOT</bcp14> convey errors as a CMC Simple PKI Response.  Instead, the response body <bcp14>SHOULD</bcp14> be a human-readable error message with the Content-Type <tt>text/plain</tt>, describing why the request was rejected.</t>
          </li>
        </ul>
      </section>
      <section anchor="usimpleenroll">
        <name>usimpleenroll</name>
        <t>The <tt>usimpleenroll</tt> operation requests a new certificate from the EST server (<xref section="4.2.1" sectionFormat="comma" target="RFC7030"/>) and returns the issued certificate as a DER-encoded X.509 certificate.</t>
        <section anchor="usimpleenroll-request">
          <name>Request</name>
          <t>An authenticated EST client submits a PKCS#10 CSR <xref target="RFC2986"/> using the HTTP POST method.</t>
          <t>The request body is the Base64 encoding of the DER-encoded PKCS#10 CSR.</t>
          <artwork><![CDATA[
POST /.well-known/est/<label>/usimpleenroll
Content-Type: application/pkcs10

<Base64-encoded DER CSR>
]]></artwork>
          <t>The CSR <bcp14>MUST</bcp14> include a valid PoP signature.  The EST server <bcp14>MUST</bcp14> verify the PoP signature against the public key in the CSR before issuing a certificate, as required by <xref section="3.4" sectionFormat="comma" target="RFC7030"/>.</t>
        </section>
        <section anchor="usimpleenroll-response">
          <name>Response</name>
          <t>On success, the EST server returns HTTP status 200 with:</t>
          <ul spacing="normal">
            <li>
              <t>Content-Type: <tt>application/pkix-cert</tt></t>
            </li>
            <li>
              <t>Body: The Base64 encoding of the DER-encoded X.509 certificate <xref target="RFC5280"/> issued for the subject in the CSR.</t>
            </li>
          </ul>
        </section>
        <section anchor="usimpleenroll-vs-simpleenroll">
          <name>Comparison to simpleenroll</name>
          <t>The <tt>simpleenroll</tt> response (<xref section="4.2.3" sectionFormat="comma" target="RFC7030"/>) wraps the issued certificate in a CMS <tt>certs-only</tt> structure (<tt>application/pkcs7-mime; smime-type=certs-only</tt>).  <tt>usimpleenroll</tt> returns that certificate as the Base64 encoding of a single DER-encoded certificate.</t>
        </section>
      </section>
      <section anchor="usimplereenroll">
        <name>usimplereenroll</name>
        <t>The <tt>usimplereenroll</tt> operation renews or rekeys an existing certificate (<xref section="4.2.2" sectionFormat="comma" target="RFC7030"/>) and returns the renewed certificate as a DER-encoded X.509 certificate.</t>
        <section anchor="usimplereenroll-request">
          <name>Request</name>
          <t>An authenticated EST client submits a PKCS#10 CSR for re-enrollment using the HTTP POST method.</t>
          <t>The request body is the Base64 encoding of the DER-encoded PKCS#10 CSR.</t>
          <artwork><![CDATA[
POST /.well-known/est/<label>/usimplereenroll
Content-Type: application/pkcs10

<Base64-encoded DER CSR>
]]></artwork>
          <t>Re-enrollment processing follows <xref section="4.2.2" sectionFormat="comma" target="RFC7030"/>, including the optional use of the <tt>id-cmc-changeSubjectName</tt> attribute (<xref section="2.8" sectionFormat="comma" target="RFC6402"/>) to request a different subject name (see <xref target="subject-name-validation"/>).</t>
        </section>
        <section anchor="usimplereenroll-response">
          <name>Response</name>
          <t>On success, the EST server returns HTTP status 200 with:</t>
          <ul spacing="normal">
            <li>
              <t>Content-Type: <tt>application/pkix-cert</tt></t>
            </li>
            <li>
              <t>Body: The Base64 encoding of the DER-encoded renewed X.509 certificate.</t>
            </li>
          </ul>
        </section>
        <section anchor="usimplereenroll-vs-simplereenroll">
          <name>Comparison to simplereenroll</name>
          <t>The <tt>simplereenroll</tt> response (<xref section="4.2.3" sectionFormat="comma" target="RFC7030"/>) wraps the renewed certificate in a CMS <tt>certs-only</tt> structure.  <tt>usimplereenroll</tt> returns that certificate as the Base64 encoding of a DER-encoded certificate.</t>
        </section>
      </section>
      <section anchor="userverkeygen">
        <name>userverkeygen</name>
        <t>The <tt>userverkeygen</tt> operation requests server-side key generation and returns the generated private key and certificate (<xref section="4.4" sectionFormat="comma" target="RFC7030"/>).</t>
        <section anchor="userverkeygen-request">
          <name>Request</name>
          <t>An authenticated EST client requests server-side key generation by submitting a PKCS#10 CSR using the HTTP POST method.  The EST client does not possess the private key and does not know the public key that the EST server will generate.  Therefore:</t>
          <ul spacing="normal">
            <li>
              <t>The <tt>algorithm</tt> field of <tt>subjectPKInfo</tt> in the <tt>CertificationRequestInfo</tt> <bcp14>SHOULD</bcp14> be set to <tt>id-alg-empty-publickey</tt> (<xref target="empty-publickey"/>) with absent parameters, and the <tt>subjectPublicKey</tt> field <bcp14>SHOULD</bcp14> be a BIT STRING of length zero.</t>
            </li>
            <li>
              <t>Because no PoP signature can be computed, the <tt>signatureAlgorithm</tt> field of the <tt>CertificationRequest</tt> <bcp14>SHOULD</bcp14> be set to <tt>id-alg-unsigned</tt> (<xref section="3.1" sectionFormat="comma" target="RFC9925"/>) with absent parameters, and the <tt>signature</tt> field <bcp14>SHOULD</bcp14> be a BIT STRING of length zero.</t>
            </li>
          </ul>
          <t>EST servers <bcp14>MUST</bcp14> accept CSRs that use <tt>id-alg-empty-publickey</tt> and <tt>id-alg-unsigned</tt>.  For compatibility with existing CSR generation code, an EST client <bcp14>MAY</bcp14> instead include an arbitrary public key and signature; as specified in <xref section="4.4.1" sectionFormat="comma" target="RFC7030"/>, the EST server <bcp14>MUST</bcp14> ignore the public key values and the signature in that case.  The algorithm and parameters of the generated key pair are determined by EST server policy, for example by the certificate profile associated with <tt>&lt;label&gt;</tt>.</t>
          <t>This document does not support additional encryption of the returned private key.  An EST server <bcp14>MUST</bcp14> reject a <tt>userverkeygen</tt> request whose CSR contains a <tt>DecryptKeyIdentifier</tt> (<xref section="4.4.1.1" sectionFormat="comma" target="RFC7030"/>) or <tt>AsymmetricDecryptKeyIdentifier</tt> (<xref section="4.4.1.2" sectionFormat="comma" target="RFC7030"/>) attribute, rather than returning the private key without the requested encryption.  EST clients that require such encryption use <tt>serverkeygen</tt> (<xref section="4.4" sectionFormat="comma" target="RFC7030"/>).</t>
          <t>The request body is the Base64 encoding of the DER-encoded PKCS#10 CSR.</t>
          <artwork><![CDATA[
POST /.well-known/est/<label>/userverkeygen
Content-Type: application/pkcs10

<Base64-encoded DER CSR>
]]></artwork>
          <t>Unlike <tt>usimpleenroll</tt>, the EST server <bcp14>MUST NOT</bcp14> verify a PoP signature for <tt>userverkeygen</tt> because no client-generated public key is being certified (consistent with <xref section="4.4.1" sectionFormat="comma" target="RFC7030"/>).  If the CSR uses <tt>id-alg-unsigned</tt> (<xref target="RFC9925"/>), there is no signature value to check.</t>
        </section>
        <section anchor="empty-publickey">
          <name>The empty-publickey Algorithm</name>
          <t>This document defines a placeholder public key algorithm, <tt>id-alg-empty-publickey</tt>, to indicate that a PKCS#10 CSR intentionally carries no public key:</t>
          <sourcecode type="asn.1"><![CDATA[
id-alg-empty-publickey OBJECT IDENTIFIER ::= {
    iso(1) identified-organization(3) dod(6) internet(1)
    security(5) mechanisms(5) pkix(7) algorithms(6) TBD1 }
]]></sourcecode>
          <t>When <tt>id-alg-empty-publickey</tt> is used, the <tt>parameters</tt> field of the <tt>AlgorithmIdentifier</tt> <bcp14>MUST</bcp14> be absent, and the <tt>subjectPublicKey</tt> field <bcp14>MUST</bcp14> be a BIT STRING of length zero.</t>
          <t><tt>id-alg-empty-publickey</tt> <bcp14>MUST</bcp14> be used only in the <tt>subjectPKInfo</tt> field of a PKCS#10 <tt>CertificationRequestInfo</tt> in a server-side key generation request (<tt>userverkeygen</tt> or <tt>serverkeygen</tt>).  It <bcp14>MUST NOT</bcp14> appear in certificates.  EST servers <bcp14>MUST</bcp14> reject a CSR that uses <tt>id-alg-empty-publickey</tt> in any other operation, including <tt>usimpleenroll</tt>, <tt>usimplereenroll</tt>, <tt>simpleenroll</tt>, and <tt>simplereenroll</tt>.</t>
        </section>
        <section anchor="userverkeygen-response">
          <name>Response</name>
          <t>On success, the EST server returns HTTP status 200 with:</t>
          <ul spacing="normal">
            <li>
              <t>Content-Type: <tt>application/pem-key-certificate-chain</tt></t>
            </li>
            <li>
              <t>Body: The generated private key followed by the issued certificate, in the format defined in <xref target="pem-key-cert-chain"/>.  Consistent with <xref section="4.4.2" sectionFormat="comma" target="RFC7030"/>, the body <bcp14>MUST</bcp14> contain exactly one <tt>CERTIFICATE</tt> block, which is the certificate issued for the generated key pair; CA certificates are not included.  EST clients obtain CA certificates using <tt>ucacerts</tt> (<xref target="ucacerts"/>) or <tt>cacerts</tt> (<xref section="4.1" sectionFormat="comma" target="RFC7030"/>).</t>
            </li>
          </ul>
          <t>The response <bcp14>MUST</bcp14> include a <tt>Cache-Control: no-store</tt> header field (<xref section="5.2.2.5" sectionFormat="comma" target="RFC9111"/>), because the response body contains an unencrypted private key.</t>
          <t>Example response body:</t>
          <artwork><![CDATA[
-----BEGIN PRIVATE KEY-----
<Base64-encoded PKCS#8 private key>
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<Base64-encoded issued certificate>
-----END CERTIFICATE-----
]]></artwork>
          <t>The private key is protected only by the TLS channel; no additional encryption is applied.  Requirements for the handling of the generated private key are specified in <xref target="private-key-delivery"/>.</t>
        </section>
        <section anchor="pem-key-cert-chain">
          <name>The application/pem-key-certificate-chain Format</name>
          <t>A body of media type <tt>application/pem-key-certificate-chain</tt> is a sequence of PEM textual encodings that <bcp14>MUST</bcp14> conform to the strict textual encoding defined in <xref section="3" sectionFormat="comma" target="RFC7468"/>.  In particular, explanatory text before, between, or after the encapsulation boundaries is not permitted.  The body consists of the following blocks, in this order:</t>
          <ol spacing="normal" type="1"><li>
              <t>Exactly one block with the label <tt>PRIVATE KEY</tt> (<xref section="10" sectionFormat="comma" target="RFC7468"/>), containing the DER-encoded <tt>OneAsymmetricKey</tt> (PKCS#8) structure <xref target="RFC5958"/> of the private key.</t>
            </li>
            <li>
              <t>One or more blocks with the label <tt>CERTIFICATE</tt> (<xref section="5" sectionFormat="comma" target="RFC7468"/>), each containing a DER-encoded X.509 certificate <xref target="RFC5280"/>.  The first certificate <bcp14>MUST</bcp14> be the end-entity certificate for the public key corresponding to the private key in the first block.  Each following certificate <bcp14>SHOULD</bcp14> directly certify the one preceding it.  The certificate of the trust anchor <bcp14>MAY</bcp14> be omitted.</t>
            </li>
          </ol>
          <t>The <tt>PRIVATE KEY</tt> block <bcp14>MUST NOT</bcp14> be encrypted.  Receivers <bcp14>MUST</bcp14> reject a body that does not start with a <tt>PRIVATE KEY</tt> block, that contains more than one <tt>PRIVATE KEY</tt> block, or that contains no <tt>CERTIFICATE</tt> block.  Receivers <bcp14>SHOULD</bcp14> verify that the public key in the first certificate matches the private key.</t>
          <t>The certificate blocks follow the same conventions as <tt>application/pem-certificate-chain</tt> (<xref section="9.1" sectionFormat="comma" target="RFC8555"/>); a receiver can therefore process the certificate part of the body with existing code for that media type after removing the leading <tt>PRIVATE KEY</tt> block.</t>
        </section>
        <section anchor="userverkeygen-vs-serverkeygen">
          <name>Comparison to serverkeygen</name>
          <t>The <tt>serverkeygen</tt> response (<xref section="4.4.2" sectionFormat="comma" target="RFC7030"/>) uses a <tt>multipart/mixed</tt> MIME response containing a PKCS#8 part and a CMS <tt>certs-only</tt> part.  <tt>userverkeygen</tt> delivers the private key together with the issued certificate in a single PEM-encoded response body, eliminating the need for a MIME multipart parser and a CMS library.</t>
        </section>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>The security requirements of <xref target="RFC7030"/> apply in full to all operations defined in this document.  The following subsections address security considerations specific to the new operations.</t>
      <section anchor="transport-security">
        <name>Transport Security</name>
        <t>All operations defined in this document <bcp14>MUST</bcp14> be carried out over HTTPS (HTTP over TLS) as required by <xref section="3" sectionFormat="comma" target="RFC7030"/>.  Implementations <bcp14>MUST NOT</bcp14> fall back to plain HTTP.  EST servers <bcp14>MUST</bcp14> present a TLS certificate that EST clients can validate against a configured trust anchor, and EST clients <bcp14>MUST</bcp14> reject server certificates that cannot be validated, except during trust anchor bootstrapping as described in <xref target="response-integrity"/>.</t>
        <t>Implementers <bcp14>SHOULD</bcp14> consult <xref target="RFC7925"/> for guidance on TLS version, cipher suite selection, and certificate profiles when those recommendations are applicable to the deployment.</t>
      </section>
      <section anchor="sec-authentication">
        <name>Client Authentication</name>
        <t>The <tt>ucacaps</tt>, <tt>ucacert</tt>, <tt>ucacerts</tt>, <tt>ucrlinfo</tt>, and <tt>ucrl</tt> retrieval operations follow the same authentication policy as the <tt>cacerts</tt> operation defined in <xref section="4.1.2" sectionFormat="comma" target="RFC7030"/>: the EST server <bcp14>SHOULD NOT</bcp14> require client authentication for these operations.  CRLs and related CRL metadata are public information that relying parties must be able to retrieve without impediment; requiring authentication for <tt>ucrlinfo</tt> or <tt>ucrl</tt> would hinder revocation checking, consistent with the design intent of CRL distribution points in <xref target="RFC5280"/>.</t>
        <t>Enrollment operations (<tt>usimpleenroll</tt>, <tt>usimplereenroll</tt>, <tt>userverkeygen</tt>) <bcp14>MUST</bcp14> require client authentication as specified in <xref target="enrollment-auth"/>.</t>
        <t>When HTTP Basic authentication is used, the considerations in <xref section="3.2.3" sectionFormat="comma" target="RFC7030"/> apply.  In particular, the <tt>user:password</tt> credential is Base64-encoded and visible to any observer that can read the TLS plaintext.  Basic authentication <bcp14>MUST</bcp14> therefore only be used inside a TLS session.  EST servers <bcp14>SHOULD</bcp14> rate-limit failed authentication attempts to mitigate brute-force attacks against user credentials.</t>
        <t>When TLS client certificate authentication is used, the requirements and considerations in <xref section="3.3.2" sectionFormat="comma" target="RFC7030"/> apply.</t>
      </section>
      <section anchor="proof-of-possession">
        <name>Proof of Possession</name>
        <t><tt>usimpleenroll</tt> and <tt>usimplereenroll</tt> <bcp14>MUST</bcp14> verify the PoP signature in the PKCS#10 CSR before issuing a certificate, as required by <xref section="3.4" sectionFormat="comma" target="RFC7030"/>.  An EST server that skips PoP verification may issue certificates for public keys that the requester does not control, undermining the binding between the certified key pair and the subscriber.</t>
        <t>The <tt>userverkeygen</tt> operation does not require PoP verification because the EST server generates the key pair itself (see <xref section="4.4.1" sectionFormat="comma" target="RFC7030"/>).  The authenticity of the request is therefore established solely by client authentication (<xref target="sec-authentication"/>).  EST servers <bcp14>MUST</bcp14> enforce client authentication at least as strongly for <tt>userverkeygen</tt> as for the other enrollment operations.</t>
      </section>
      <section anchor="private-key-delivery">
        <name>Private Key Delivery</name>
        <t>The <tt>userverkeygen</tt> operation delivers a generated private key to the EST client over TLS in a PEM file.  This follows the same model as the <tt>serverkeygen</tt> operation in <xref section="4.4" sectionFormat="comma" target="RFC7030"/>.  The following additional considerations apply:</t>
        <ul spacing="normal">
          <li>
            <t>The EST server <bcp14>SHOULD</bcp14> delete the generated private key immediately after the response has been transmitted successfully.  If the deployment requires the server to retain a copy (e.g., for key escrow or disaster recovery), the private key <bcp14>MUST</bcp14> be stored in encrypted form with access controls that restrict retrieval to authorized personnel only.</t>
          </li>
          <li>
            <t>EST clients <bcp14>MUST</bcp14> verify the EST server's TLS certificate before transmitting the enrollment request, as the TLS channel is the only confidentiality protection for the delivered private key.</t>
          </li>
          <li>
            <t>Server-side key generation is generally discouraged when the EST client is capable of generating its own key pair; see <xref section="6" sectionFormat="comma" target="RFC7030"/> for further guidance.</t>
          </li>
          <li>
            <t>The PEM response contains the private key in a <tt>PRIVATE KEY</tt> block with no encryption.  EST clients <bcp14>MUST</bcp14> store the key material securely immediately upon receipt (e.g., import it into a hardware security module or an encrypted key store) and <bcp14>MUST NOT</bcp14> write it to unprotected storage.</t>
          </li>
        </ul>
      </section>
      <section anchor="response-integrity">
        <name>Response Integrity and Trust Anchor Bootstrapping</name>
        <t>The <tt>ucacert</tt>, <tt>ucacerts</tt>, and <tt>ucrl</tt> operations return PKI objects over a TLS-protected channel without an additional application-layer signature.  Except during the bootstrapping case described below, EST clients <bcp14>MUST</bcp14> validate received certificates and CRLs against an independently configured trust anchor.</t>
        <t>When bootstrapping a device that does not yet possess a trust anchor, the initial <tt>ucacert</tt> or <tt>ucacerts</tt> exchange is subject to the same considerations as the <tt>cacerts</tt> bootstrap operation described in <xref section="4.1.1" sectionFormat="comma" target="RFC7030"/>.  In particular, certificates obtained in this way <bcp14>MUST NOT</bcp14> be accepted as trust anchors until they have been verified out-of-band as described there.  EST clients <bcp14>SHOULD</bcp14> follow the guidance in <xref section="3.6" sectionFormat="comma" target="RFC7030"/> (Server Authorization) for trust anchor selection, and <bcp14>SHOULD</bcp14> use an Implicit Trust Anchor (<xref section="3.6.2" sectionFormat="comma" target="RFC7030"/>) only when an Explicit Trust Anchor is not available.</t>
        <t>The <tt>ucacert</tt> operation returns only the issuing CA certificate.  An EST client that relies only on <tt>ucacert</tt> can build a certification path to its trust anchor only if it already holds, or can otherwise obtain, any intermediate CA certificates between the issuing CA and that trust anchor.  EST clients that need intermediate CA certificates <bcp14>SHOULD</bcp14> use <tt>ucacerts</tt> (<xref target="ucacerts"/>) or <tt>cacerts</tt> (<xref section="4.1" sectionFormat="comma" target="RFC7030"/>).</t>
      </section>
      <section anchor="subject-name-validation">
        <name>Subject Name and SAN Validation for Re-enrollment</name>
        <t>The <tt>usimplereenroll</tt> operation identifies the certificate to be renewed by the subject DN (and optionally SAN) carried in the CSR, consistent with <xref section="4.2.2" sectionFormat="comma" target="RFC7030"/>.  EST servers <bcp14>MUST</bcp14> ensure that the authenticated requester is authorized to renew the certificate identified by that subject identity.</t>
        <t>When the <tt>id-cmc-changeSubjectName</tt> attribute (<xref section="2.8" sectionFormat="comma" target="RFC6402"/>) is present in the CSR, the EST server <bcp14>MUST</bcp14> validate that the requested new subject DN and SAN values are within the policy permitted for the authenticated requester and the selected certificate profile.</t>
      </section>
      <section anchor="capability-discovery-security">
        <name>Capability Discovery Security</name>
        <t>The <tt>ucacaps</tt> operation <bcp14>SHOULD NOT</bcp14> require client authentication (consistent with <xref section="4.1.2" sectionFormat="comma" target="RFC7030"/>) and returns its response without any application-layer signature.  Its integrity therefore depends entirely on TLS server authentication.  When the EST client has authenticated the EST server against an Explicit Trust Anchor, an on-path attacker cannot modify the response.  However, when the client has not yet authenticated the server in this way, for example during bootstrapping with an Implicit Trust Anchor or with no trust anchor at all (<xref target="response-integrity"/>), an on-path attacker could return a manipulated capability list.  For example, the attacker could omit <tt>userverkeygen</tt> to prevent key generation or omit <tt>ucrlinfo</tt> and <tt>ucrl</tt> to interfere with CRL checking.</t>
        <t>EST clients <bcp14>SHOULD</bcp14> treat the <tt>ucacaps</tt> response as advisory information only.  EST clients <bcp14>SHOULD NOT</bcp14> rely on it as a security enforcement mechanism.  In particular, a negative <tt>ucacaps</tt> response (e.g., an absent keyword) <bcp14>MUST NOT</bcp14> cause an EST client to fall back to less secure behavior.</t>
        <t>EST clients that obtain the <tt>ucacaps</tt> response via a TLS session in which the server certificate has been validated against an Explicit Trust Anchor <bcp14>MAY</bcp14> treat the response as reliable.</t>
      </section>
      <section anchor="dos-considerations">
        <name>Denial-of-Service Considerations</name>
        <t>The <tt>ucrl</tt> operation returns the full CRL, which may be large.  EST servers <bcp14>SHOULD</bcp14> implement rate limiting and response size limits to prevent resource exhaustion from concurrent CRL download requests.  EST clients <bcp14>SHOULD</bcp14> call <tt>ucrlinfo</tt> before <tt>ucrl</tt> to determine whether the locally cached CRL is still current.  If the <tt>crlnumber</tt>, <tt>nextupdate</tt>, or <tt>sha256sum</tt> fields indicate no change since the last download, the client <bcp14>SHOULD</bcp14> refrain from issuing a <tt>ucrl</tt> request.  EST clients that cache the CRL locally <bcp14>SHOULD</bcp14> use the <tt>nextupdate</tt> field from <tt>ucrlinfo</tt> (or from the cached CRL itself) to determine when to refresh, and <bcp14>SHOULD NOT</bcp14> poll more frequently than necessary.  EST servers <bcp14>SHOULD</bcp14> limit the accepted length of the <tt>dp</tt> query parameter (<xref target="crl-partitioned"/>) and <bcp14>SHOULD</bcp14> reject longer values with HTTP 414 (URI Too Long) or 400 (Bad Request).</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="iana-media-type">
        <name>Media Type Registration</name>
        <t>IANA is requested to register the following media type in the "Media Types" registry, in the manner described in <xref target="RFC6838"/>.</t>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>pem-key-certificate-chain</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>7bit.  The body consists of US-ASCII characters only.</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>The body contains an unencrypted private key.  It <bcp14>MUST</bcp14> be transmitted only over a channel that provides confidentiality and integrity protection, such as TLS, and <bcp14>MUST NOT</bcp14> be stored by HTTP caches or intermediaries.  Recipients <bcp14>MUST</bcp14> store the private key securely immediately upon receipt.  The certificates carry no confidentiality requirements, but recipients <bcp14>MUST</bcp14> validate them before use.  See <xref target="private-key-delivery"/> of RFC XXXX.</t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>The body uses the strict PEM textual encoding defined in <xref section="3" sectionFormat="comma" target="RFC7468"/>.  The certificate part follows the conventions of <tt>application/pem-certificate-chain</tt> (<xref section="9.1" sectionFormat="comma" target="RFC8555"/>).</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t><xref target="pem-key-cert-chain"/> of RFC XXXX</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>EST clients and servers implementing the <tt>userverkeygen</tt> operation, and other applications that deliver a private key together with its certificate chain.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <t>Deprecated alias names for this type: None</t>
          </dd>
          <dt/>
          <dd>
            <t>Magic number(s): None</t>
          </dd>
          <dt/>
          <dd>
            <t>File extension(s): .pem</t>
          </dd>
          <dt/>
          <dd>
            <t>Macintosh file type code(s): None</t>
          </dd>
          <dt>Person &amp; email address to contact for further information:</dt>
          <dd>
            <t>Lijun Liao <eref target="mailto:lijun.liao@nio.io">lijun.liao@nio.io</eref></t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>Lijun Liao <eref target="mailto:lijun.liao@nio.io">lijun.liao@nio.io</eref></t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
        <ul empty="true">
          <li>
            <t><strong>RFC Editor's Note:</strong> Please replace "RFC XXXX" with the RFC number assigned to this document.</t>
          </li>
        </ul>
      </section>
      <section anchor="iana-empty-publickey">
        <name>SMI Security for PKIX Algorithms</name>
        <t>IANA is requested to assign the following object identifier in the "SMI Security for PKIX Algorithms" registry (1.3.6.1.5.5.7.6):</t>
        <table anchor="tab-iana-empty-publickey">
          <name>id-alg-empty-publickey Registration</name>
          <thead>
            <tr>
              <th align="left">Decimal</th>
              <th align="left">Description</th>
              <th align="left">References</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TBD1</td>
              <td align="left">id-alg-empty-publickey</td>
              <td align="left">This document (<xref target="empty-publickey"/>)</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="media-types">
        <name>Media Types Used (Informative)</name>
        <t>The operations defined in this document use the media types listed in <xref target="tab-media-types"/>.  All of them except <tt>application/pem-key-certificate-chain</tt>, which is registered by this document, are already registered in the IANA Media Types registry.</t>
        <table anchor="tab-media-types">
          <name>Media Types Used by Lightweight EST Operations</name>
          <thead>
            <tr>
              <th align="left">Media Type</th>
              <th align="left">Used by</th>
              <th align="left">Registered in</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>application/pkcs10</tt></td>
              <td align="left">Request body for enrollment operations</td>
              <td align="left">
                <xref target="RFC5967"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>application/pkix-cert</tt></td>
              <td align="left">Response body for ucacert, usimpleenroll, usimplereenroll</td>
              <td align="left">
                <xref target="RFC2585"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>application/pkix-crl</tt></td>
              <td align="left">Response body for ucrl</td>
              <td align="left">
                <xref target="RFC2585"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>application/pkcs7-mime</tt></td>
              <td align="left">(existing cacerts/simpleenroll format, for reference)</td>
              <td align="left">
                <xref target="RFC8551"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>application/pem-certificate-chain</tt></td>
              <td align="left">Response body for ucacerts</td>
              <td align="left">
                <xref target="RFC8555"/></td>
            </tr>
            <tr>
              <td align="left">
                <tt>application/pem-key-certificate-chain</tt></td>
              <td align="left">Response body for userverkeygen (key + cert)</td>
              <td align="left">This document (<xref target="iana-media-type"/>)</td>
            </tr>
            <tr>
              <td align="left">
                <tt>text/plain</tt></td>
              <td align="left">Response body for ucacaps and ucrlinfo</td>
              <td align="left">
                <xref target="RFC2046"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2046">
          <front>
            <title>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="N. Borenstein" initials="N." surname="Borenstein"/>
            <date month="November" year="1996"/>
            <abstract>
              <t>This second document defines the general structure of the MIME media typing system and defines an initial set of media types. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2046"/>
          <seriesInfo name="DOI" value="10.17487/RFC2046"/>
        </reference>
        <reference anchor="RFC2585">
          <front>
            <title>Internet X.509 Public Key Infrastructure Operational Protocols: FTP and HTTP</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="May" year="1999"/>
            <abstract>
              <t>The protocol conventions described in this document satisfy some of the operational requirements of the Internet Public Key Infrastructure (PKI). This document specifies the conventions for using the File Transfer Protocol (FTP) and the Hypertext Transfer Protocol (HTTP) to obtain certificates and certificate revocation lists (CRLs) from PKI repositories. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2585"/>
          <seriesInfo name="DOI" value="10.17487/RFC2585"/>
        </reference>
        <reference anchor="RFC2986">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author fullname="M. Nystrom" initials="M." surname="Nystrom"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <date month="November" year="2000"/>
            <abstract>
              <t>This memo represents a republication of PKCS #10 v1.7 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series, and change control is retained within the PKCS process. The body of this document, except for the security considerations section, is taken directly from the PKCS #9 v2.0 or the PKCS #10 v1.7 document. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2986"/>
          <seriesInfo name="DOI" value="10.17487/RFC2986"/>
        </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="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="D. Cooper" initials="D." surname="Cooper"/>
            <author fullname="S. Santesson" initials="S." surname="Santesson"/>
            <author fullname="S. Farrell" initials="S." surname="Farrell"/>
            <author fullname="S. Boeyen" initials="S." surname="Boeyen"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <date month="May" year="2008"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 certificate revocation list (CRL) for use in the Internet. An overview of this approach and model is provided as an introduction. The X.509 v3 certificate format is described in detail, with additional information regarding the format and semantics of Internet name forms. Standard certificate extensions are described and two Internet-specific extensions are defined. A set of required certificate extensions is specified. The X.509 v2 CRL format is described in detail along with standard and Internet-specific extensions. An algorithm for X.509 certification path validation is described. An ASN.1 module and examples are provided in the appendices. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5280"/>
          <seriesInfo name="DOI" value="10.17487/RFC5280"/>
        </reference>
        <reference anchor="RFC5652">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2009"/>
            <abstract>
              <t>This document describes the Cryptographic Message Syntax (CMS). This syntax is used to digitally sign, digest, authenticate, or encrypt arbitrary message content. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="70"/>
          <seriesInfo name="RFC" value="5652"/>
          <seriesInfo name="DOI" value="10.17487/RFC5652"/>
        </reference>
        <reference anchor="RFC5958">
          <front>
            <title>Asymmetric Key Packages</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document defines the syntax for private-key information and a content type for it. Private-key information includes a private key for a specified public-key algorithm and a set of attributes. The Cryptographic Message Syntax (CMS), as defined in RFC 5652, can be used to digitally sign, digest, authenticate, or encrypt the asymmetric key format content type. This document obsoletes RFC 5208. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5958"/>
          <seriesInfo name="DOI" value="10.17487/RFC5958"/>
        </reference>
        <reference anchor="RFC5967">
          <front>
            <title>The application/pkcs10 Media Type</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="August" year="2010"/>
            <abstract>
              <t>This document specifies a media type used to carry PKCS #10 certification requests as defined in RFC 2986. It carries over the original specification from RFC 2311, which recently has been moved to Historic status, and properly links it to RFC 2986. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5967"/>
          <seriesInfo name="DOI" value="10.17487/RFC5967"/>
        </reference>
        <reference anchor="RFC6402">
          <front>
            <title>Certificate Management over CMS (CMC) Updates</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="November" year="2011"/>
            <abstract>
              <t>This document contains a set of updates to the base syntax for CMC, a Certificate Management protocol using the Cryptographic Message Syntax (CMS). This document updates RFC 5272, RFC 5273, and RFC 5274.</t>
              <t>The new items in this document are: new controls for future work in doing server side key generation, definition of a Subject Information Access value to identify CMC servers, and the registration of a port number for TCP/IP for the CMC service to run on. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6402"/>
          <seriesInfo name="DOI" value="10.17487/RFC6402"/>
        </reference>
        <reference anchor="RFC7030">
          <front>
            <title>Enrollment over Secure Transport</title>
            <author fullname="M. Pritikin" initials="M." role="editor" surname="Pritikin"/>
            <author fullname="P. Yee" initials="P." role="editor" surname="Yee"/>
            <author fullname="D. Harkins" initials="D." role="editor" surname="Harkins"/>
            <date month="October" year="2013"/>
            <abstract>
              <t>This document profiles certificate enrollment for clients using Certificate Management over CMS (CMC) messages over a secure transport. This profile, called Enrollment over Secure Transport (EST), describes a simple, yet functional, certificate management protocol targeting Public Key Infrastructure (PKI) clients that need to acquire client certificates and associated Certification Authority (CA) certificates. It also supports client-generated public/private key pairs as well as key pairs generated by the CA.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7030"/>
          <seriesInfo name="DOI" value="10.17487/RFC7030"/>
        </reference>
        <reference anchor="RFC7468">
          <front>
            <title>Textual Encodings of PKIX, PKCS, and CMS Structures</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="S. Leonard" initials="S." surname="Leonard"/>
            <date month="April" year="2015"/>
            <abstract>
              <t>This document describes and discusses the textual encodings of the Public-Key Infrastructure X.509 (PKIX), Public-Key Cryptography Standards (PKCS), and Cryptographic Message Syntax (CMS). The textual encodings are well-known, are implemented by several applications and libraries, and are widely deployed. This document articulates the de facto rules by which existing implementations operate and defines them so that future implementations can interoperate.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7468"/>
          <seriesInfo name="DOI" value="10.17487/RFC7468"/>
        </reference>
        <reference anchor="RFC8295">
          <front>
            <title>EST (Enrollment over Secure Transport) Extensions</title>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2018"/>
            <abstract>
              <t>The EST (Enrollment over Secure Transport) protocol defines the Well-Known URI (Uniform Resource Identifier) -- /.well-known/est -- along with a number of other path components that clients use for PKI (Public Key Infrastructure) services, namely certificate enrollment (e.g., /simpleenroll). This document defines a number of other PKI services as additional path components -- specifically, firmware and trust anchors as well as symmetric, asymmetric, and encrypted keys. This document also specifies the PAL (Package Availability List), which is an XML (Extensible Markup Language) file or JSON (JavaScript Object Notation) object that clients use to retrieve packages available and authorized for them. This document extends the EST server path components to provide these additional services.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8295"/>
          <seriesInfo name="DOI" value="10.17487/RFC8295"/>
        </reference>
        <reference anchor="RFC8551">
          <front>
            <title>Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 Message Specification</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="B. Ramsdell" initials="B." surname="Ramsdell"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>This document defines Secure/Multipurpose Internet Mail Extensions (S/MIME) version 4.0. S/MIME provides a consistent way to send and receive secure MIME data. Digital signatures provide authentication, message integrity, and non-repudiation with proof of origin. Encryption provides data confidentiality. Compression can be used to reduce data size. This document obsoletes RFC 5751.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8551"/>
          <seriesInfo name="DOI" value="10.17487/RFC8551"/>
        </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="RFC8951">
          <front>
            <title>Clarification of Enrollment over Secure Transport (EST): Transfer Encodings and ASN.1</title>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="T. Werner" initials="T." surname="Werner"/>
            <author fullname="W. Pan" initials="W." surname="Pan"/>
            <date month="November" year="2020"/>
            <abstract>
              <t>This document updates RFC 7030: Enrollment over Secure Transport to resolve some errata that were reported and that have proven to cause interoperability issues when RFC 7030 was extended.</t>
              <t>This document deprecates the specification of "Content-Transfer-Encoding" headers for Enrollment over Secure Transport (EST) endpoints. This document fixes some syntactical errors in ASN.1 that were present.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8951"/>
          <seriesInfo name="DOI" value="10.17487/RFC8951"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9111">
          <front>
            <title>HTTP Caching</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document defines HTTP caches and the associated header fields that control cache behavior or indicate cacheable response messages.</t>
              <t>This document obsoletes RFC 7234.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="98"/>
          <seriesInfo name="RFC" value="9111"/>
          <seriesInfo name="DOI" value="10.17487/RFC9111"/>
        </reference>
        <reference anchor="RFC9810">
          <front>
            <title>Internet X.509 Public Key Infrastructure -- Certificate Management Protocol (CMP)</title>
            <author fullname="H. Brockhaus" initials="H." surname="Brockhaus"/>
            <author fullname="D. von Oheimb" initials="D." surname="von Oheimb"/>
            <author fullname="M. Ounsworth" initials="M." surname="Ounsworth"/>
            <author fullname="J. Gray" initials="J." surname="Gray"/>
            <date month="July" year="2025"/>
            <abstract>
              <t>This document describes the Internet X.509 Public Key Infrastructure (PKI) Certificate Management Protocol (CMP). Protocol messages are defined for X.509v3 certificate creation and management. CMP provides interactions between client systems and PKI components such as a Registration Authority (RA) and a Certification Authority (CA).</t>
              <t>This document adds support for management of certificates containing a Key Encapsulation Mechanism (KEM) public key and uses EnvelopedData instead of EncryptedValue. This document also includes the updates specified in Section 2 and Appendix A.2 of RFC 9480.</t>
              <t>This document obsoletes RFC 4210, and together with RFC 9811, it also obsoletes RFC 9480. Appendix F of this document updates Section 9 of RFC 5912.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9810"/>
          <seriesInfo name="DOI" value="10.17487/RFC9810"/>
        </reference>
        <reference anchor="RFC9908">
          <front>
            <title>Clarification and Enhancement of the CSR Attributes Definition in RFC 7030</title>
            <author fullname="M. Richardson" initials="M." role="editor" surname="Richardson"/>
            <author fullname="O. Friel" initials="O." surname="Friel"/>
            <author fullname="D. von Oheimb" initials="D." surname="von Oheimb"/>
            <author fullname="D. Harkins" initials="D." surname="Harkins"/>
            <date month="January" year="2026"/>
            <abstract>
              <t>This document updates RFC 7030, "Enrollment over Secure Transport" (EST), clarifying how the Certificate Signing Request (CSR) Attributes Response can be used by an EST server to specify both CSR attribute Object Identifiers (OIDs) and CSR attribute values, particularly X.509 extension values, that the server expects the client to include in a subsequent CSR request. RFC 9148 is derived from RFC 7030 and is also updated.</t>
              <t>RFC 7030 is ambiguous in its specification of the CSR Attributes Response. This has resulted in implementation challenges and implementor confusion because there was no universal understanding of what was specified. This document clarifies the encoding rules.</t>
              <t>This document also provides a new straightforward approach: using a template for CSR contents that may be partially filled in by the server. This also allows an EST server to specify a subject Distinguished Name (DN).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9908"/>
          <seriesInfo name="DOI" value="10.17487/RFC9908"/>
        </reference>
        <reference anchor="RFC9925">
          <front>
            <title>Unsigned X.509 Certificates</title>
            <author fullname="D. Benjamin" initials="D." surname="Benjamin"/>
            <date month="February" year="2026"/>
            <abstract>
              <t>This document defines a placeholder X.509 signature algorithm that may be used in contexts where the consumer of the certificate is not expected to verify the signature. As part of this, it updates RFC 5280.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9925"/>
          <seriesInfo name="DOI" value="10.17487/RFC9925"/>
        </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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
        <reference anchor="RFC7228">
          <front>
            <title>Terminology for Constrained-Node Networks</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="M. Ersue" initials="M." surname="Ersue"/>
            <author fullname="A. Keranen" initials="A." surname="Keranen"/>
            <date month="May" year="2014"/>
            <abstract>
              <t>The Internet Protocol Suite is increasingly used on small devices with severe constraints on power, memory, and processing resources, creating constrained-node networks. This document provides a number of basic terms that have been useful in the standardization work for constrained-node networks.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7228"/>
          <seriesInfo name="DOI" value="10.17487/RFC7228"/>
        </reference>
        <reference anchor="RFC7925">
          <front>
            <title>Transport Layer Security (TLS) / Datagram Transport Layer Security (DTLS) Profiles for the Internet of Things</title>
            <author fullname="H. Tschofenig" initials="H." role="editor" surname="Tschofenig"/>
            <author fullname="T. Fossati" initials="T." surname="Fossati"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>A common design pattern in Internet of Things (IoT) deployments is the use of a constrained device that collects data via sensors or controls actuators for use in home automation, industrial control systems, smart cities, and other IoT deployments.</t>
              <t>This document defines a Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) 1.2 profile that offers communications security for this data exchange thereby preventing eavesdropping, tampering, and message forgery. The lack of communication security is a common vulnerability in IoT products that can easily be solved by using these well-researched and widely deployed Internet security protocols.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7925"/>
          <seriesInfo name="DOI" value="10.17487/RFC7925"/>
        </reference>
        <reference anchor="RFC7942">
          <front>
            <title>Improving Awareness of Running Code: The Implementation Status Section</title>
            <author fullname="Y. Sheffer" initials="Y." surname="Sheffer"/>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <date month="July" year="2016"/>
            <abstract>
              <t>This document describes a simple process that allows authors of Internet-Drafts to record the status of known implementations by including an Implementation Status section. This will allow reviewers and working groups to assign due consideration to documents that have the benefit of running code, which may serve as evidence of valuable experimentation and feedback that have made the implemented protocols more mature.</t>
              <t>This process is not mandatory. Authors of Internet-Drafts are encouraged to consider using the process for their documents, and working groups are invited to think about applying the process to all of their protocol specifications. This document obsoletes RFC 6982, advancing it to a Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="205"/>
          <seriesInfo name="RFC" value="7942"/>
          <seriesInfo name="DOI" value="10.17487/RFC7942"/>
        </reference>
        <reference anchor="RFC9148">
          <front>
            <title>EST-coaps: Enrollment over Secure Transport with the Secure Constrained Application Protocol</title>
            <author fullname="P. van der Stok" initials="P." surname="van der Stok"/>
            <author fullname="P. Kampanakis" initials="P." surname="Kampanakis"/>
            <author fullname="M. Richardson" initials="M." surname="Richardson"/>
            <author fullname="S. Raza" initials="S." surname="Raza"/>
            <date month="April" year="2022"/>
            <abstract>
              <t>Enrollment over Secure Transport (EST) is used as a certificate provisioning protocol over HTTPS. Low-resource devices often use the lightweight Constrained Application Protocol (CoAP) for message exchanges. This document defines how to transport EST payloads over secure CoAP (EST-coaps), which allows constrained devices to use existing EST functionality for provisioning certificates.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9148"/>
          <seriesInfo name="DOI" value="10.17487/RFC9148"/>
        </reference>
      </references>
    </references>
    <?line 769?>

<section anchor="flows">
      <name>Message Flow Diagrams</name>
      <t>This appendix illustrates the HTTP message flows for each operation defined in this document.  All exchanges occur within a TLS session; the TLS handshake is not shown.  For DER-carrying operations, the examples show the base64-encoded form required by this specification.</t>
      <section anchor="flow-ucacaps">
        <name>ucacaps</name>
        <figure anchor="fig-ucacaps">
          <name>ucacaps message flow</name>
          <artwork><![CDATA[
EST Client                             EST Server
   |                                        |
   |  GET /.well-known/est/<label>/ucacaps  |
   |--------------------------------------->|
   |                                        |
   |  HTTP/1.1 200 OK                       |
   |  Content-Type: text/plain              |
   |                                        |
   |  cacerts                               |
   |  simpleenroll                          |
   |  simplereenroll                        |
   |  serverkeygen                          |
   |  ucacert                               |
   |  ucacerts                              |
   |  ucrl                                  |
   |  ucrlinfo                              |
   |  usimpleenroll                         |
   |  usimplereenroll                       |
   |  userverkeygen                         |
   |<---------------------------------------|
   |                                        |
]]></artwork>
        </figure>
      </section>
      <section anchor="flow-ucacert">
        <name>ucacert</name>
        <figure anchor="fig-ucacert">
          <name>ucacert message flow</name>
          <artwork><![CDATA[
EST Client                             EST Server
   |                                        |
   |  GET /.well-known/est/<label>/ucacert  |
   |--------------------------------------->|
   |                                        |
   |  HTTP/1.1 200 OK                       |
   |  Content-Type: application/pkix-cert   |
   |                                        |
   |  <Base64 DER CA certificate>           |
   |<---------------------------------------|
   |                                        |
]]></artwork>
        </figure>
      </section>
      <section anchor="flow-ucacerts">
        <name>ucacerts</name>
        <figure anchor="fig-ucacerts">
          <name>ucacerts message flow</name>
          <artwork><![CDATA[
EST Client                             EST Server
   |                                        |
   |  GET /.well-known/est/<label>/ucacerts |
   |--------------------------------------->|
   |                                        |
   |  HTTP/1.1 200 OK                       |
   |  Content-Type:                         |
   |    application/pem-certificate-chain   |
   |                                        |
   |  <PEM-encoded issuing CA certificate>  |
   |  [ <PEM-encoded intermediate           |
   |      CA certificates> ]                |
   |  <PEM-encoded root CA certificate>     |
   |  [ <Root CA Key Update certificates> ] |
   |<---------------------------------------|
   |                                        |
]]></artwork>
        </figure>
      </section>
      <section anchor="flow-ucrlinfo">
        <name>ucrlinfo</name>
        <figure anchor="fig-ucrlinfo">
          <name>ucrlinfo message flow</name>
          <artwork><![CDATA[
EST Client                             EST Server
   |                                        |
   |  GET /.well-known/est/<label>/ucrlinfo |
   |--------------------------------------->|
   |                                        |
   |  HTTP/1.1 200 OK                       |
   |  Content-Type: text/plain              |
   |                                        |
   |  sha256sum=fcWyNz...26oF0=             |
   |  issuer=MIHxMQswCQYDVQQGEw...          |
   |  thisupdate=1735732800                 |
   |  nextupdate=1736337600                 |
   |  crlnumber=42                          |
   |<---------------------------------------|
   |                                        |
]]></artwork>
        </figure>
      </section>
      <section anchor="flow-ucrl">
        <name>ucrl</name>
        <figure anchor="fig-ucrl">
          <name>ucrl message flow</name>
          <artwork><![CDATA[
EST Client                             EST Server
   |                                        |
   |  GET /.well-known/est/<label>/ucrl     |
   |--------------------------------------->|
   |                                        |
   |  HTTP/1.1 200 OK                       |
   |  Content-Type: application/pkix-crl    |
   |                                        |
   |  <Base64 DER CRL>                      |
   |<---------------------------------------|
   |                                        |
]]></artwork>
        </figure>
      </section>
      <section anchor="flow-usimpleenroll">
        <name>usimpleenroll</name>
        <figure anchor="fig-usimpleenroll">
          <name>usimpleenroll message flow</name>
          <artwork><![CDATA[
EST Client                             EST Server
   |                                        |
   |  [HTTP Basic auth header,              |
   |   or TLS client certificate]           |
   |                                        |
   |  POST /.well-known/est/<label>/        |
   |       usimpleenroll                    |
   |  Content-Type: application/pkcs10      |
   |                                        |
   |  <Base64 PKCS#10 CSR>                  |
   |--------------------------------------->|
   |                                        |  Verify PoP,
   |                                        |  Issue certificate
   |                                        |
   |  HTTP/1.1 200 OK                       |
   |  Content-Type: application/pkix-cert   |
   |                                        |
   |  <Base64 DER certificate>              |
   |<---------------------------------------|
   |                                        |
]]></artwork>
        </figure>
      </section>
      <section anchor="flow-usimplereenroll">
        <name>usimplereenroll</name>
        <figure anchor="fig-usimplereenroll">
          <name>usimplereenroll message flow</name>
          <artwork><![CDATA[
EST Client                             EST Server
   |                                        |
   |  [HTTP Basic auth header,              |
   |   or TLS client certificate]           |
   |                                        |
   |  POST /.well-known/est/<label>/        |
   |       usimplereenroll                  |
   |  Content-Type: application/pkcs10      |
   |                                        |
   |  <Base64 PKCS#10 CSR>                  |
   |  (subject = cert to renew;             |
   |   optionally includes                  |
   |   id-cmc-changeSubjectName)            |
   |--------------------------------------->|
   |                                        |  Verify PoP,
   |                                        |  Renew certificate
   |                                        |
   |  HTTP/1.1 200 OK                       |
   |  Content-Type: application/pkix-cert   |
   |                                        |
   |  <Base64 DER certificate>              |
   |<---------------------------------------|
   |                                        |
]]></artwork>
        </figure>
      </section>
      <section anchor="flow-userverkeygen">
        <name>userverkeygen</name>
        <figure anchor="fig-userverkeygen">
          <name>userverkeygen message flow</name>
          <artwork><![CDATA[
EST Client                             EST Server
   |                                        |
   |  [HTTP Basic auth header,              |
   |   or TLS client certificate]           |
   |                                        |
   |  POST /.well-known/est/<label>/        |
   |       userverkeygen                    |
   |  Content-Type: application/pkcs10      |
   |                                        |
   |  <Base64 PKCS#10 CSR>                  |
   |  (empty-publickey, id-alg-unsigned)    |
   |--------------------------------------->|
   |                                        |  Generate key pair,
   |                                        |  Issue certificate,
   |                                        |
   |  HTTP/1.1 200 OK                       |
   |  Content-Type:                          |
   |  application/pem-key-certificate-chain |
   |                                        |
   |  <PEM-encoded PKCS#8 private key>      |
   |  <PEM-encoded issued certificate>      |
   |<---------------------------------------|
   |                                        |  Delete key, unless
   |                                        |  retained by policy
   |                                        |
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="comparison-table">
      <name>Comparison with RFC 7030 Operations</name>
      <t>The following table summarizes how each new operation relates to its RFC 7030 counterpart, the changes in response format, and the corresponding RFC 7030 section (see <xref target="tab-comparison"/>).</t>
      <table anchor="tab-comparison">
        <name>Comparison of New Operations with RFC 7030 Counterparts</name>
        <thead>
          <tr>
            <th align="left">New Operation</th>
            <th align="left">RFC 7030 Operation</th>
            <th align="left">Auth</th>
            <th align="left">New Content-Type</th>
            <th align="left">New Format</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">
              <tt>ucacaps</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">No</td>
            <td align="left">
              <tt>text/plain</tt></td>
            <td align="left">Keyword list</td>
          </tr>
          <tr>
            <td align="left">
              <tt>ucacert</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">No</td>
            <td align="left">
              <tt>application/pkix-cert</tt></td>
            <td align="left">Single DER cert</td>
          </tr>
          <tr>
            <td align="left">
              <tt>ucacerts</tt></td>
            <td align="left">
              <tt>cacerts</tt> (<xref section="4.1" sectionFormat="comma" target="RFC7030"/>)</td>
            <td align="left">No</td>
            <td align="left">
              <tt>application/pem-certificate-chain</tt></td>
            <td align="left">PEM cert chain</td>
          </tr>
          <tr>
            <td align="left">
              <tt>ucrlinfo</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">No</td>
            <td align="left">
              <tt>text/plain</tt></td>
            <td align="left">CRL metadata</td>
          </tr>
          <tr>
            <td align="left">
              <tt>ucrl</tt></td>
            <td align="left">
              <em>(none)</em></td>
            <td align="left">No</td>
            <td align="left">
              <tt>application/pkix-crl</tt></td>
            <td align="left">DER CRL</td>
          </tr>
          <tr>
            <td align="left">
              <tt>usimpleenroll</tt></td>
            <td align="left">
              <tt>simpleenroll</tt> (<xref section="4.2.1" sectionFormat="comma" target="RFC7030"/>)</td>
            <td align="left">Yes</td>
            <td align="left">
              <tt>application/pkix-cert</tt></td>
            <td align="left">DER cert</td>
          </tr>
          <tr>
            <td align="left">
              <tt>usimplereenroll</tt></td>
            <td align="left">
              <tt>simplereenroll</tt> (<xref section="4.2.2" sectionFormat="comma" target="RFC7030"/>)</td>
            <td align="left">Yes</td>
            <td align="left">
              <tt>application/pkix-cert</tt></td>
            <td align="left">DER cert</td>
          </tr>
          <tr>
            <td align="left">
              <tt>userverkeygen</tt></td>
            <td align="left">
              <tt>serverkeygen</tt> (<xref section="4.4" sectionFormat="comma" target="RFC7030"/>)</td>
            <td align="left">Yes</td>
            <td align="left">
              <tt>application/pem-key-certificate-chain</tt></td>
            <td align="left">PEM: PKCS#8 + certificate</td>
          </tr>
        </tbody>
      </table>
      <t>Key differences from RFC 7030 equivalents:</t>
      <ul spacing="normal">
        <li>
          <t><strong>New single-certificate retrieval operation</strong>: <tt>ucacert</tt> returns the issuing CA certificate as the Base64 encoding of a single DER-encoded X.509 certificate, with no certificate chain and no CMS wrapper.  <xref target="RFC7030"/> has no equivalent.  <tt>cacerts</tt> always returns the full chain in CMS format.</t>
        </li>
        <li>
          <t><strong>No CMS wrapper</strong>: The certificate- and CRL-returning operations deliver their payloads without CMS encapsulation.  EST clients therefore do not need a CMS library to parse those responses.</t>
        </li>
        <li>
          <t><strong>PEM instead of multipart</strong>: <tt>userverkeygen</tt> returns the private key and the issued certificate in a single PEM-encoded body (<tt>application/pem-key-certificate-chain</tt>) rather than a <tt>multipart/mixed</tt> MIME response (<xref section="4.4.2" sectionFormat="comma" target="RFC7030"/>).  EST clients do not need a MIME multipart parser or a CMS library.</t>
        </li>
        <li>
          <t><strong>New capability discovery operation</strong>: <tt>ucacaps</tt> enables EST clients to discover which operations the EST server supports.  <xref target="RFC7030"/> has no equivalent operation.</t>
        </li>
        <li>
          <t><strong>New CRL operations</strong>: <tt>ucrlinfo</tt> provides lightweight CRL metadata (number, validity window, issuer, and SHA-256 fingerprint) without downloading the full CRL body, and <tt>ucrl</tt> extends EST with in-band CRL retrieval when the full CRL is needed.  <xref target="RFC7030"/> does not define CRL distribution or CRL status operations; CRL retrieval is normally handled via the CDP extension in issued certificates.</t>
        </li>
      </ul>
    </section>
    <section anchor="rfc8295-comparison">
      <name>Comparison with RFC 8295</name>
      <t><xref target="RFC8295"/> defines EST extensions for package distribution, including the <tt>crls</tt> operation for distributing one or more CRLs (and ARLs).  This document addresses a narrower use case for the latest CRL of the selected CA.</t>
      <t>The main differences are summarized in <xref target="tab-rfc8295-comparison"/>.</t>
      <table anchor="tab-rfc8295-comparison">
        <name>Comparison with RFC 8295</name>
        <thead>
          <tr>
            <th align="left">Topic</th>
            <th align="left">RFC 8295 crls</th>
            <th align="left">This Document</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Object scope</td>
            <td align="left">Returns one or more CRLs in a CRL package and may also distribute ARLs.</td>
            <td align="left">
              <tt>ucrl</tt> returns a single current CRL; <tt>ucrlinfo</tt> returns metadata for that current CRL.</td>
          </tr>
          <tr>
            <td align="left">Metadata-only check</td>
            <td align="left">Not defined.</td>
            <td align="left">
              <tt>ucrlinfo</tt> allows freshness checks without downloading the CRL body.</td>
          </tr>
          <tr>
            <td align="left">Response format</td>
            <td align="left">Follows the RFC 7030 CMS-based response model for CRL packages.</td>
            <td align="left">Uses Base64-encoded DER for <tt>ucrl</tt> and plain text for <tt>ucrlinfo</tt>, without CMS.</td>
          </tr>
          <tr>
            <td align="left">Intended use</td>
            <td align="left">General EST extension for CRL/ARL distribution.</td>
            <td align="left">Lightweight retrieval of the current CRL and its metadata.</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section anchor="rfc9148-comparison">
      <name>Comparison with RFC 9148 (EST-coaps)</name>
      <t>RFC 9148 defines EST-coaps: a profile and transport mapping that carries EST messages over secure CoAP instead of HTTPS.  It changes the transfer substrate by using CoAP, DTLS, short CoAP resource paths, CoAP resource discovery, CoAP Block-Wise Transfer, and CoAP Content-Format identifiers.</t>
      <t>RFC 9148 is important prior art for reducing EST payload overhead.  In particular, it defines Content-Format 287 for <tt>application/pkix-cert</tt>, allowing a client to request a single DER-encoded certificate rather than a CMS <tt>certs-only</tt> object for certificate-returning EST-coaps functions.  RFC 9148 performs this selection with CoAP content negotiation, using the Accept Option, rather than by defining separate resources for each response format.</t>
      <t>This document addresses a related but different problem.  It keeps the HTTPS-based EST model of <xref target="RFC7030"/> and defines additional EST operations with simpler response payloads.  The goal is to reduce application-layer parsing requirements for EST clients that still use HTTP/TLS and to add operations that are not present in RFC 7030 or RFC 9148.</t>
      <t>The main differences are summarized in <xref target="tab-rfc9148-comparison"/>.</t>
      <table anchor="tab-rfc9148-comparison">
        <name>Comparison with RFC 9148</name>
        <thead>
          <tr>
            <th align="left">Topic</th>
            <th align="left">RFC 9148</th>
            <th align="left">This Document</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Transport</td>
            <td align="left">Defines EST over CoAP secured with DTLS.</td>
            <td align="left">Uses the existing EST HTTPS/TLS transport from RFC 7030.</td>
          </tr>
          <tr>
            <td align="left">URI design</td>
            <td align="left">Maps EST operations to short CoAP paths such as <tt>/crts</tt>, <tt>/sen</tt>, <tt>/sren</tt>, <tt>/skg</tt>, <tt>/skc</tt>, and <tt>/att</tt>.</td>
            <td align="left">Adds HTTP EST operations under the RFC 7030 <tt>/.well-known/est/</tt> path structure.</td>
          </tr>
          <tr>
            <td align="left">Discovery</td>
            <td align="left">Uses CoRE Link Format resource discovery for EST-coaps resources.</td>
            <td align="left">Defines <tt>ucacaps</tt> as an EST operation that returns supported operation keywords.</td>
          </tr>
          <tr>
            <td align="left">Response selection</td>
            <td align="left">Uses CoAP content negotiation; a client uses the Accept Option to request an available Content-Format.</td>
            <td align="left">Uses distinct HTTP EST resources for the unencapsulated operations, with <tt>ucacaps</tt> for capability discovery.</td>
          </tr>
          <tr>
            <td align="left">Certificate response format</td>
            <td align="left">Supports PKCS#7 <tt>certs-only</tt> Content-Format 281 and defines Content-Format 287 (<tt>application/pkix-cert</tt>) for a single non-CMS certificate response.</td>
            <td align="left">Defines unencapsulated HTTP operations whose successful responses use base64-encoded DER certificates or PEM certificate chains without CMS.</td>
          </tr>
          <tr>
            <td align="left">CA certificate retrieval</td>
            <td align="left">Maps the EST <tt>cacerts</tt> function to <tt>/crts</tt>; Content-Format 287 can carry a single certificate when negotiated.</td>
            <td align="left">Adds <tt>ucacert</tt> for a single issuing CA certificate and <tt>ucacerts</tt> for a PEM certificate chain.</td>
          </tr>
          <tr>
            <td align="left">Enrollment responses</td>
            <td align="left">Maps <tt>simpleenroll</tt> and <tt>simplereenroll</tt> to CoAP and permits single-certificate responses when Content-Format 287 is negotiated.</td>
            <td align="left">Defines <tt>usimpleenroll</tt> and <tt>usimplereenroll</tt> as HTTP/TLS operations that directly return a DER certificate.</td>
          </tr>
          <tr>
            <td align="left">Server-side key generation</td>
            <td align="left">Defines CoAP resources for server-side key generation and uses <tt>application/multipart-core</tt> for key-and-certificate responses.</td>
            <td align="left">Defines <tt>userverkeygen</tt>, returning a PEM-encoded private key and certificate in a single response body.</td>
          </tr>
          <tr>
            <td align="left">CRL support</td>
            <td align="left">Does not define EST-coaps CRL metadata or CRL retrieval operations.</td>
            <td align="left">Defines <tt>ucrlinfo</tt> and <tt>ucrl</tt> for CRL freshness checks and CRL retrieval.</td>
          </tr>
        </tbody>
      </table>
      <t>RFC 9148 is therefore complementary to this document rather than a substitute for it.  It already solves part of the same problem for EST-coaps by defining a non-CMS single-certificate format and negotiating it with Accept.  That mechanism may also inform implementations that expose the same semantics over transports other than CoAP.  However, RFC 9148 does not update the HTTPS resource model of RFC 7030, does not define the <tt>ucacaps</tt>, <tt>ucacert</tt>, <tt>ucacerts</tt>, <tt>ucrlinfo</tt>, <tt>ucrl</tt>, <tt>usimpleenroll</tt>, <tt>usimplereenroll</tt>, or <tt>userverkeygen</tt> HTTP operations, and does not define EST-based CRL metadata or CRL retrieval.</t>
      <t>An implementation can support both specifications.  For example, a server could offer EST-coaps resources for CoAP clients while also offering the operations defined in this document for HTTPS EST clients.  Another implementation might choose to apply RFC 9148-style content-negotiation semantics across multiple transports.  The interfaces can share the same CA, RA policy, authentication checks, and certificate issuance logic, but their standardized protocol bindings and payload formats are distinct.</t>
    </section>
    <section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The author wants to thank Michael Richardson for reviewing and commenting on intermediate versions of the draft.</t>
    </section>
    <section numbered="false" anchor="implementation-status">
      <name>Implementation Status</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section and the reference to <xref target="RFC7942"/> before publication.</t>
        </li>
      </ul>
      <t>This section records the status of known implementations of the protocol defined by this specification at the time of posting of this Internet-Draft, and is based on a proposal described in <xref target="RFC7942"/>.  The description of implementations in this section is intended to assist the IETF in its decision processes in progressing drafts to RFCs.  Please note that the listing of any individual implementation here does not imply endorsement by the IETF.  Furthermore, no effort has been spent to verify the information presented here that was supplied by IETF contributors.  This is not intended as, and must not be construed to be, a catalog of available implementations or their features.  Readers are advised to note that other implementations may exist.</t>
      <dl>
        <dt>XiPKI:</dt>
        <dd>
          <t>Organization: XiPKI open-source project.</t>
        </dd>
        <dt/>
        <dd>
          <t>Description: The <tt>gateway</tt> module of XiPKI implements all eight operations defined in this document.</t>
        </dd>
        <dt/>
        <dd>
          <t>Maturity: Reference implementation.</t>
        </dd>
        <dt/>
        <dd>
          <t>Coverage: All operations.  HTTP Basic authentication and TLS client certificate authentication are supported, consistent with <xref section="3.2.3" sectionFormat="comma" target="RFC7030"/> and <xref section="3.3.2" sectionFormat="comma" target="RFC7030"/>.  Path routing supports the single-segment <tt>&lt;label&gt;/&lt;operation&gt;</tt> form defined in <xref target="est-url-structure"/>, and additionally a non-standard <tt>&lt;ca-name&gt;/&lt;cert-profile&gt;/&lt;operation&gt;</tt> form.</t>
        </dd>
        <dt/>
        <dd>
          <t>Licensing: Apache License 2.0.</t>
        </dd>
        <dt/>
        <dd>
          <t>URL: https://github.com/xipki/xipki</t>
        </dd>
      </dl>
    </section>
    <section numbered="false" anchor="change-log">
      <name>Change Log</name>
      <ul empty="true">
        <li>
          <t><strong>RFC Editor's Note:</strong> Please remove this section before publication.</t>
        </li>
      </ul>
      <section numbered="false" anchor="changes-since-01">
        <name>Changes since -01</name>
        <ul spacing="normal">
          <li>
            <t>Removed "Updates: 7030"; <tt>&lt;label&gt;</tt> is a single path segment as in RFC 7030.</t>
          </li>
          <li>
            <t><tt>userverkeygen</tt>: registered the media type <tt>application/pem-key-certificate-chain</tt> to replace <tt>application/x-pem-file</tt>; defined <tt>id-alg-empty-publickey</tt> for the CSR; rejected requests for additional private key encryption.</t>
          </li>
          <li>
            <t><tt>ucacert</tt> / <tt>ucacerts</tt>: specified behavior during CA key rollover; the <tt>ucacerts</tt> chain includes the root CA certificate, followed by the root CA key update certificates.</t>
          </li>
          <li>
            <t><tt>ucrlinfo</tt> / <tt>ucrl</tt>: excluded delta CRLs; added the <tt>dp</tt> parameter for partitioned CRLs; specified handling of indirect CRLs; explained the relationship to HTTP conditional requests.</t>
          </li>
          <li>
            <t><tt>ucacaps</tt>: clients fall back to RFC 7030 operations on error.</t>
          </li>
          <li>
            <t>Aligned base64 transfer with RFC 8951, and adopted RFC 7030 rules for error responses, HTTP 202, and linking identity and POP.</t>
          </li>
          <li>
            <t>Clarified HTTP caching, text response format, and security considerations.</t>
          </li>
          <li>
            <t>Reference updates and editorial fixes.</t>
          </li>
        </ul>
      </section>
    </section>
  </back>
  <!-- ##markdown-source:
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
5dbptEe5hqWKnN4PYSE2jlWRPvwAamcBp84Bn76bpAHUyzmKgH/otgHZD3Yf
HBqw3O/z7PrzZ1D6PyWvoT9n6KE59YkU0ylynjun/QOfSO2A/5yo5BI5+Gnw
CVS04P+hdc+Q/p9PyV83YJabf4VPr0v8e9xkH5p7ixms+ziB0xYk0RTWpqZW
vRWwsom4BE42WOiq1r4ZtGiGBV+67zZiFN8CHWmzp7tsboX6iIyAsfak7Lfu
/DfsTtr0rVgSrkkBfInfD9QdmW/4XXzSOzrtvwC391PZdlL5bj519Krebna+
oBurlOlcgu/inTzs7wIWEN6NLeIGfJ/8zvHOx93kbnsjJeSb+eZOsJNq2Izu
yKPNfiCb/c5n0lth5/CGtzYGCEB4Hvb8BWg2CY7jEjT8rN6Fz4v0PJ+htq+i
G/R+t71gy4d2qZFGG1EzenO46uje6NrYmywQV9hAvAijGkQj7uIE1kLFxsY6
9nlraTdFwb+zvAMSF6j5ASUoGb9wLNUgHqBjODDSSVWC1EbaxUQonvOiq9TQ
hCH39VUZWKN4ktwYO9xpgT0k/DLvQ3t2Q9S0pxkcpdD1nWVhDYs7uzjevFpr
cOosSK25LbP28ncjxkGb4hNxQioUPkMcBdg8dDyzIwIMA+APIPxzomhkbepy
hooLMPEcdhCe5TAyv2Do1WPjvgDFiJiDFD5sjXSglgMjVBcHgz1Y5hrNepyI
GCpsaADBS/GMWIWlLCKOEney/Wj7sGMbgjy5QfqQEiOmaNjpevrwSYbWCp37
Ok80ocvKT5uoOXWNqR0pvZIKGewA9JjsO3qzjn/g7Ggwxe761ahZPNEGxnMY
ePPV29OzO0P+b/L6DX0+OfzD26OTwwP8fPr93suX7sNAnjj9/s3blwf+k39z
/82rV4evD/hl+DYJvhrcebX3lzssbO68OT47evN67+WdDqXIGIcJn6MKCuYg
cCHaSmk9CFwf3+0f/5//vf0QiPk/0NW7vf0MiMl/PN1+gnoU6mncG5rT8ieQ
8WaAGymtsBWULbB/8gbMClaursrrIsHNAcT96j+QMv+5m3x9PllsP/xWvsAJ
B18qzYIviWbdbzovMxEjX0W6cdQMvm9ROhzv3l+Cv5Xu5suv/3WG+v5o++m/
fjtgHrko1XiGBZjXrLHbvYdrtKwjfL5LngCxR3YHu6SrIwM2N2IDo39i0nSc
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

-->

</rfc>
