<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="info" consensus="true" docName="draft-gutmann-scep-16" indexInclude="true" ipr="pre5378Trust200902" number="8894" prepTime="2020-09-10T10:39:15" scripts="Common,Latin" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="5" tocInclude="true" xml:lang="en">
  <link href="https://datatracker.ietf.org/doc/draft-gutmann-scep-16" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc8894" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="SCEP">Simple Certificate Enrolment Protocol</title>
    <seriesInfo name="RFC" value="8894" stream="IETF"/>
    <author initials="P." surname="Gutmann" fullname="Peter Gutmann">
      <organization abbrev="University of Auckland" showOnFrontPage="true">University of Auckland</organization>
      <address>
        <postal>
          <street>Department of Computer Science</street>
          <city>Auckland</city>
          <country>New Zealand</country>
        </postal>
        <email>pgut001@cs.auckland.ac.nz</email>
      </address>
    </author>
    <date month="09" year="2020"/>
    <area>Security Area</area>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">

This document specifies the Simple Certificate Enrolment Protocol (SCEP), a
PKI protocol that leverages existing technology by using Cryptographic Message
Syntax (CMS, formerly known as PKCS #7) and PKCS #10 over HTTP.  SCEP is the
evolution of the enrolment
protocol sponsored by Cisco Systems, which enjoys wide support in both client
and server implementations, as well as being relied upon by numerous other
industry standards that work with certificates.

      </t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This document is not an Internet Standards Track specification; it is
            published for informational purposes.  
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by the
            Internet Engineering Steering Group (IESG).  Not all documents
            approved by the IESG are candidates for any level of Internet
            Standard; see Section 2 of RFC 7841. 
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc8894" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2020 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Simplified BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Simplified BSD License.
        </t>
        <t indent="0" pn="section-boilerplate.2-3">
            This document may contain material from IETF Documents or IETF
            Contributions published or made publicly available before November
            10, 2008. The person(s) controlling the copyright in some of this
            material may not have granted the IETF Trust the right to allow
            modifications of such material outside the IETF Standards Process.
            Without obtaining an adequate license from the person(s)
            controlling the copyright in such materials, this document may not
            be modified outside the IETF Standards Process, and derivative
            works of it may not be created outside the IETF Standards Process,
            except to format it for publication as an RFC or to translate it
            into languages other than English.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-conventions-used-in-this-do">Conventions Used in This Document</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scep-overview">SCEP Overview</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scep-entities">SCEP Entities</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2.1.2">
                  <li pn="section-toc.1-1.2.2.1.2.1">
                    <t indent="0" keepWithNext="true" pn="section-toc.1-1.2.2.1.2.1.1"><xref derivedContent="2.1.1" format="counter" sectionFormat="of" target="section-2.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-client">Client</xref></t>
                  </li>
                  <li pn="section-toc.1-1.2.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.2.2.1.2.2.1"><xref derivedContent="2.1.2" format="counter" sectionFormat="of" target="section-2.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certificate-authority">Certificate Authority</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ca-certificate-distribution">CA Certificate Distribution</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-client-authentication">Client Authentication</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.4">
                <t indent="0" pn="section-toc.1-1.2.2.4.1"><xref derivedContent="2.4" format="counter" sectionFormat="of" target="section-2.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-enrolment-authorisation">Enrolment Authorisation</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.5">
                <t indent="0" pn="section-toc.1-1.2.2.5.1"><xref derivedContent="2.5" format="counter" sectionFormat="of" target="section-2.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certificate-enrolment-renew">Certificate Enrolment/Renewal</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2.5.2">
                  <li pn="section-toc.1-1.2.2.5.2.1">
                    <t indent="0" pn="section-toc.1-1.2.2.5.2.1.1"><xref derivedContent="2.5.1" format="counter" sectionFormat="of" target="section-2.5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-client-state-transitions">Client State Transitions</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.2.2.6">
                <t indent="0" pn="section-toc.1-1.2.2.6.1"><xref derivedContent="2.6" format="counter" sectionFormat="of" target="section-2.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certificate-access">Certificate Access</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.7">
                <t indent="0" pn="section-toc.1-1.2.2.7.1"><xref derivedContent="2.7" format="counter" sectionFormat="of" target="section-2.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-crl-access">CRL Access</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.8">
                <t indent="0" pn="section-toc.1-1.2.2.8.1"><xref derivedContent="2.8" format="counter" sectionFormat="of" target="section-2.8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certificate-revocation">Certificate Revocation</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.9">
                <t indent="0" pn="section-toc.1-1.2.2.9.1"><xref derivedContent="2.9" format="counter" sectionFormat="of" target="section-2.9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-mandatory-to-implement-func">Mandatory-to-Implement Functionality</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scep-secure-message-objects">SCEP Secure Message Objects</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2">
              <li pn="section-toc.1-1.3.2.1">
                <t indent="0" pn="section-toc.1-1.3.2.1.1"><xref derivedContent="3.1" format="counter" sectionFormat="of" target="section-3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scep-message-object-process">SCEP Message Object Processing</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.2">
                <t indent="0" pn="section-toc.1-1.3.2.2.1"><xref derivedContent="3.2" format="counter" sectionFormat="of" target="section-3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scep-pkimessage">SCEP pkiMessage</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.2.2">
                  <li pn="section-toc.1-1.3.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.2.2.1.1"><xref derivedContent="3.2.1" format="counter" sectionFormat="of" target="section-3.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-signed-transaction-attribut">Signed Transaction Attributes</xref></t>
                    <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.2.2.1.2">
                      <li pn="section-toc.1-1.3.2.2.2.1.2.1">
                        <t indent="0" pn="section-toc.1-1.3.2.2.2.1.2.1.1"><xref derivedContent="3.2.1.1" format="counter" sectionFormat="of" target="section-3.2.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-transactionid">transactionID</xref></t>
                      </li>
                      <li pn="section-toc.1-1.3.2.2.2.1.2.2">
                        <t indent="0" pn="section-toc.1-1.3.2.2.2.1.2.2.1"><xref derivedContent="3.2.1.2" format="counter" sectionFormat="of" target="section-3.2.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-messagetype">messageType</xref></t>
                      </li>
                      <li pn="section-toc.1-1.3.2.2.2.1.2.3">
                        <t indent="0" pn="section-toc.1-1.3.2.2.2.1.2.3.1"><xref derivedContent="3.2.1.3" format="counter" sectionFormat="of" target="section-3.2.1.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-pkistatus">pkiStatus</xref></t>
                      </li>
                      <li pn="section-toc.1-1.3.2.2.2.1.2.4">
                        <t indent="0" pn="section-toc.1-1.3.2.2.2.1.2.4.1"><xref derivedContent="3.2.1.4" format="counter" sectionFormat="of" target="section-3.2.1.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-failinfo-and-failinfotext">failInfo and failInfoText</xref></t>
                      </li>
                      <li pn="section-toc.1-1.3.2.2.2.1.2.5">
                        <t indent="0" pn="section-toc.1-1.3.2.2.2.1.2.5.1"><xref derivedContent="3.2.1.5" format="counter" sectionFormat="of" target="section-3.2.1.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sendernonce-and-recipientno">senderNonce and recipientNonce</xref></t>
                      </li>
                    </ul>
                  </li>
                  <li pn="section-toc.1-1.3.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.3.2.2.2.2.1"><xref derivedContent="3.2.2" format="counter" sectionFormat="of" target="section-3.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scep-pkcspkienvelope">SCEP pkcsPKIEnvelope</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.3.2.3">
                <t indent="0" pn="section-toc.1-1.3.2.3.1"><xref derivedContent="3.3" format="counter" sectionFormat="of" target="section-3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scep-pkimessage-types">SCEP pkiMessage types</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.3.2">
                  <li pn="section-toc.1-1.3.2.3.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.3.2.1.1"><xref derivedContent="3.3.1" format="counter" sectionFormat="of" target="section-3.3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-pkcsreq-renewalreq">PKCSReq/RenewalReq</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.3.2.2">
                    <t indent="0" pn="section-toc.1-1.3.2.3.2.2.1"><xref derivedContent="3.3.2" format="counter" sectionFormat="of" target="section-3.3.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certrep">CertRep</xref></t>
                    <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.3.2.2.2">
                      <li pn="section-toc.1-1.3.2.3.2.2.2.1">
                        <t indent="0" pn="section-toc.1-1.3.2.3.2.2.2.1.1"><xref derivedContent="3.3.2.1" format="counter" sectionFormat="of" target="section-3.3.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certrep-success">CertRep SUCCESS</xref></t>
                      </li>
                      <li pn="section-toc.1-1.3.2.3.2.2.2.2">
                        <t indent="0" pn="section-toc.1-1.3.2.3.2.2.2.2.1"><xref derivedContent="3.3.2.2" format="counter" sectionFormat="of" target="section-3.3.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certrep-failure">CertRep FAILURE</xref></t>
                      </li>
                      <li pn="section-toc.1-1.3.2.3.2.2.2.3">
                        <t indent="0" pn="section-toc.1-1.3.2.3.2.2.2.3.1"><xref derivedContent="3.3.2.3" format="counter" sectionFormat="of" target="section-3.3.2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certrep-pending">CertRep PENDING</xref></t>
                      </li>
                    </ul>
                  </li>
                  <li pn="section-toc.1-1.3.2.3.2.3">
                    <t indent="0" pn="section-toc.1-1.3.2.3.2.3.1"><xref derivedContent="3.3.3" format="counter" sectionFormat="of" target="section-3.3.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certpoll-getcertinitial">CertPoll (GetCertInitial)</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.3.2.4">
                    <t indent="0" pn="section-toc.1-1.3.2.3.2.4.1"><xref derivedContent="3.3.4" format="counter" sectionFormat="of" target="section-3.3.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-getcert-and-getcrl">GetCert and GetCRL</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.3.2.4">
                <t indent="0" pn="section-toc.1-1.3.2.4.1"><xref derivedContent="3.4" format="counter" sectionFormat="of" target="section-3.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-degenerate-certificates-onl">Degenerate certificates-only CMS SignedData</xref></t>
              </li>
              <li pn="section-toc.1-1.3.2.5">
                <t indent="0" pn="section-toc.1-1.3.2.5.1"><xref derivedContent="3.5" format="counter" sectionFormat="of" target="section-3.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ca-capabilities">CA Capabilities</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.3.2.5.2">
                  <li pn="section-toc.1-1.3.2.5.2.1">
                    <t indent="0" pn="section-toc.1-1.3.2.5.2.1.1"><xref derivedContent="3.5.1" format="counter" sectionFormat="of" target="section-3.5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-getcacaps-http-message-form">GetCACaps HTTP Message Format</xref></t>
                  </li>
                  <li pn="section-toc.1-1.3.2.5.2.2">
                    <t indent="0" pn="section-toc.1-1.3.2.5.2.2.1"><xref derivedContent="3.5.2" format="counter" sectionFormat="of" target="section-3.5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ca-capabilities-response-fo">CA Capabilities Response Format</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scep-transactions">SCEP Transactions</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-http-post-and-get-message-f">HTTP POST and GET Message Formats</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-get-ca-certificate">Get CA Certificate</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.2.2">
                  <li pn="section-toc.1-1.4.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.2.2.1.1"><xref derivedContent="4.2.1" format="counter" sectionFormat="of" target="section-4.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-get-ca-certificate-response">Get CA Certificate Response Message Format</xref></t>
                    <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.2.2.1.2">
                      <li pn="section-toc.1-1.4.2.2.2.1.2.1">
                        <t indent="0" pn="section-toc.1-1.4.2.2.2.1.2.1.1"><xref derivedContent="4.2.1.1" format="counter" sectionFormat="of" target="section-4.2.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ca-certificate-response-mes">CA Certificate Response Message Format</xref></t>
                      </li>
                      <li pn="section-toc.1-1.4.2.2.2.1.2.2">
                        <t indent="0" pn="section-toc.1-1.4.2.2.2.1.2.2.1"><xref derivedContent="4.2.1.2" format="counter" sectionFormat="of" target="section-4.2.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-ca-certificate-chain-respon">CA Certificate Chain Response Message Format</xref></t>
                      </li>
                    </ul>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certificate-enrolment-renewa">Certificate Enrolment/Renewal</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.3.2">
                  <li pn="section-toc.1-1.4.2.3.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.3.2.1.1"><xref derivedContent="4.3.1" format="counter" sectionFormat="of" target="section-4.3.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certificate-enrolment-renewal">Certificate Enrolment/Renewal Response Message</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.4">
                <t indent="0" pn="section-toc.1-1.4.2.4.1"><xref derivedContent="4.4" format="counter" sectionFormat="of" target="section-4.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-poll-for-client-initial-cer">Poll for Client Initial Certificate</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.4.2">
                  <li pn="section-toc.1-1.4.2.4.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.4.2.1.1"><xref derivedContent="4.4.1" format="counter" sectionFormat="of" target="section-4.4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-polling-response-message-fo">Polling Response Message Format</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.5">
                <t indent="0" pn="section-toc.1-1.4.2.5.1"><xref derivedContent="4.5" format="counter" sectionFormat="of" target="section-4.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certificate-access-2">Certificate Access</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.5.2">
                  <li pn="section-toc.1-1.4.2.5.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.5.2.1.1"><xref derivedContent="4.5.1" format="counter" sectionFormat="of" target="section-4.5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-certificate-access-response">Certificate Access Response Message Format</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.6">
                <t indent="0" pn="section-toc.1-1.4.2.6.1"><xref derivedContent="4.6" format="counter" sectionFormat="of" target="section-4.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-crl-access-2">CRL Access</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.6.2">
                  <li pn="section-toc.1-1.4.2.6.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.6.2.1.1"><xref derivedContent="4.6.1" format="counter" sectionFormat="of" target="section-4.6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-crl-access-response-message">CRL Access Response Message Format</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.4.2.7">
                <t indent="0" pn="section-toc.1-1.4.2.7.1"><xref derivedContent="4.7" format="counter" sectionFormat="of" target="section-4.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-get-next-certificate-author">Get Next Certificate Authority Certificate</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2.7.2">
                  <li pn="section-toc.1-1.4.2.7.2.1">
                    <t indent="0" pn="section-toc.1-1.4.2.7.2.1.1"><xref derivedContent="4.7.1" format="counter" sectionFormat="of" target="section-4.7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-get-next-ca-response-messag">Get Next CA Response Message Format</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-scep-transaction-examples">SCEP Transaction Examples</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-successful-transactions">Successful Transactions</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-transactions-with-errors">Transactions with Errors</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.6.2">
              <li pn="section-toc.1-1.6.2.1">
                <t indent="0" pn="section-toc.1-1.6.2.1.1"><xref derivedContent="6.1" format="counter" sectionFormat="of" target="section-6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registration-of-the-applica">Registration of the application/x-x509-ca-cert Media Type</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.2">
                <t indent="0" pn="section-toc.1-1.6.2.2.1"><xref derivedContent="6.2" format="counter" sectionFormat="of" target="section-6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registration-of-the-applicat">Registration of the application/x-x509-ca-ra-cert Media Type</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.3">
                <t indent="0" pn="section-toc.1-1.6.2.3.1"><xref derivedContent="6.3" format="counter" sectionFormat="of" target="section-6.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registration-of-the-applicati">Registration of the application/x-x509-next-ca-cert Media Type</xref></t>
              </li>
              <li pn="section-toc.1-1.6.2.4">
                <t indent="0" pn="section-toc.1-1.6.2.4.1"><xref derivedContent="6.4" format="counter" sectionFormat="of" target="section-6.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-registration-of-the-applicatio">Registration of the application/x-pki-message Media Type</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.7.2">
              <li pn="section-toc.1-1.7.2.1">
                <t indent="0" pn="section-toc.1-1.7.2.1.1"><xref derivedContent="7.1" format="counter" sectionFormat="of" target="section-7.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-general-security">General Security</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.2">
                <t indent="0" pn="section-toc.1-1.7.2.2.1"><xref derivedContent="7.2" format="counter" sectionFormat="of" target="section-7.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-of-the-ca-private-key">Use of the CA Private Key</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.3">
                <t indent="0" pn="section-toc.1-1.7.2.3.1"><xref derivedContent="7.3" format="counter" sectionFormat="of" target="section-7.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-challengepassword-shared-se">ChallengePassword Shared Secret Value</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.4">
                <t indent="0" pn="section-toc.1-1.7.2.4.1"><xref derivedContent="7.4" format="counter" sectionFormat="of" target="section-7.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-lack-of-certificate-issue-c">Lack of Certificate Issue Confirmation</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.5">
                <t indent="0" pn="section-toc.1-1.7.2.5.1"><xref derivedContent="7.5" format="counter" sectionFormat="of" target="section-7.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-getcacaps-issues">GetCACaps Issues</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.6">
                <t indent="0" pn="section-toc.1-1.7.2.6.1"><xref derivedContent="7.6" format="counter" sectionFormat="of" target="section-7.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-lack-of-pop-in-renewal-requ">Lack of PoP in Renewal Requests</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.7">
                <t indent="0" pn="section-toc.1-1.7.2.7.1"><xref derivedContent="7.7" format="counter" sectionFormat="of" target="section-7.7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-traffic-monitoring">Traffic Monitoring</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.8">
                <t indent="0" pn="section-toc.1-1.7.2.8.1"><xref derivedContent="7.8" format="counter" sectionFormat="of" target="section-7.8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-unnecessary-cryptography">Unnecessary Cryptography</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.9">
                <t indent="0" pn="section-toc.1-1.7.2.9.1"><xref derivedContent="7.9" format="counter" sectionFormat="of" target="section-7.9"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-use-of-sha-1">Use of SHA-1</xref></t>
              </li>
              <li pn="section-toc.1-1.7.2.10">
                <t indent="0" pn="section-toc.1-1.7.2.10.1"><xref derivedContent="7.10" format="counter" sectionFormat="of" target="section-7.10"/>. <xref derivedContent="" format="title" sectionFormat="of" target="name-use-of-http">Use of HTTP</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-background-notes">Background Notes</xref></t>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-address">Author's Address</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1">

X.509 certificates serve as the basis for several standardised security
protocols such as <xref target="RFC8446" format="default" sectionFormat="of" derivedContent="RFC8446">TLS</xref>, <xref target="RFC8551" format="default" sectionFormat="of" derivedContent="RFC8551">S/MIME</xref>, and <xref target="RFC7296" format="default" sectionFormat="of" derivedContent="RFC7296">IKE/IPsec</xref>.  When an X.509
certificate is issued, there typically is a need for a certificate management
protocol to enable a PKI client to request or renew a certificate from a
Certificate Authority (CA).  This specification defines a protocol, the Simple
Certificate Enrolment Protocol (SCEP), for certificate management and
certificate and CRL queries.

      </t>
      <t indent="0" pn="section-1-2">

The SCEP protocol supports the following general operations:

      </t>
      <ul spacing="compact" bare="false" empty="false" indent="3" pn="section-1-3">
        <li pn="section-1-3.1">CA public key distribution</li>
        <li pn="section-1-3.2">Certificate enrolment and issue</li>
        <li pn="section-1-3.3">Certificate renewal</li>
        <li pn="section-1-3.4">Certificate query</li>
        <li pn="section-1-3.5">CRL query</li>
      </ul>
      <t indent="0" pn="section-1-4">

SCEP makes extensive use of <xref target="RFC5652" format="default" sectionFormat="of" derivedContent="RFC5652">CMS</xref>
and <xref target="RFC2986" format="default" sectionFormat="of" derivedContent="RFC2986">PKCS #10</xref>.
      </t>
      <section anchor="mustshouldmay" numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-conventions-used-in-this-do">Conventions Used in This Document</name>
        <t indent="0" pn="section-1.1-1">
	  The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
	  "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
	  "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
	  "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document
	  are to be interpreted as
	  described in BCP 14 <xref target="RFC2119" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
	  when, and only when, they appear in all capitals, as shown here.
        </t>
        <t indent="0" pn="section-1.1-2">This document uses the Augmented Backus-Naur Form (ABNF) notation
        as specified in <xref target="RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234"/> for defining formal syntax of
	commands.  Non-terminals not defined in <xref target="RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234"/> are
	defined in <xref target="HTTP-GET-POST" format="default" sectionFormat="of" derivedContent="Section 4.1"/>.</t>
      </section>
    </section>
    <section anchor="overview" numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-scep-overview">SCEP Overview</name>
      <t indent="0" pn="section-2-1">

This section provides an overview of the functionality of SCEP.

      </t>
      <section anchor="overview-entities" numbered="true" toc="include" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-scep-entities">SCEP Entities</name>
        <t indent="0" pn="section-2.1-1">

The entity types defined in SCEP are a client requesting a certificate and a
Certificate Authority (CA) that issues the certificate.  These are described
in the following sections.

        </t>
        <section anchor="overview-client" numbered="true" toc="include" removeInRFC="false" pn="section-2.1.1">
          <name slugifiedName="name-client">Client</name>
          <t indent="0" pn="section-2.1.1-1">

A client <bcp14>MUST</bcp14> have the following information locally configured:

          </t>
          <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-2.1.1-2">
            <li pn="section-2.1.1-2.1" derivedCounter="1.">The CA's fully qualified domain name or IP address.</li>
            <li pn="section-2.1.1-2.2" derivedCounter="2.">Any identification and/or authorisation information required by
			the CA before a certificate will be issued, as described in
			<xref target="PKCSReq" format="default" sectionFormat="of" derivedContent="Section 3.3.1"/>.</li>
            <li pn="section-2.1.1-2.3" derivedCounter="3.">The identifying information that is used for authentication of
			the CA in <xref target="GetCACert-resp" format="default" sectionFormat="of" derivedContent="Section 4.2.1"/>, typically a certificate
			fingerprint.</li>
          </ol>
        </section>
        <section anchor="overview-ca" numbered="true" toc="include" removeInRFC="false" pn="section-2.1.2">
          <name slugifiedName="name-certificate-authority">Certificate Authority</name>
          <t indent="0" pn="section-2.1.2-1">
A SCEP CA is the entity that signs client certificates.  A CA may enforce
policies and apply them to certificate requests, and it may reject a request for
any reason.
          </t>
          <t indent="0" pn="section-2.1.2-2">
Since the client is expected to perform signature verification and optionally
encryption using the CA certificate, the keyUsage extension in the CA
certificate <bcp14>MUST</bcp14> indicate that it is valid for digitalSignature and
keyEncipherment (if the key is to be used for en/decryption) alongside the
usual CA usages of keyCertSign and/or cRLSign.
          </t>
        </section>
      </section>
      <section anchor="overview-cert-dist" numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-ca-certificate-distribution">CA Certificate Distribution</name>
        <t indent="0" pn="section-2.2-1">
If the CA certificate(s) have not previously been acquired by the client
through some other means, the client <bcp14>MUST</bcp14> retrieve them before any PKI
operation (<xref target="message-obj" format="default" sectionFormat="of" derivedContent="Section 3"/>) can be started.  Since no public key
has yet been exchanged between the client and the CA, the messages cannot be
secured using CMS, and the CA certificate request and response data is instead
transferred in the clear.
        </t>
        <t indent="0" pn="section-2.2-2">
If an intermediate CA is in use, a certificates-only CMS SignedData message
with a certificate chain consisting of all CA certificates is returned.
Otherwise, the CA certificate itself is returned.
        </t>
        <t indent="0" pn="section-2.2-3">
The CA certificate <bcp14>MAY</bcp14> be provided out of band to the client.  Alternatively,
the CA certificate fingerprint <bcp14>MAY</bcp14> be used to authenticate a CA certificate
distributed by the GetCACert response (<xref target="GetCACert" format="default" sectionFormat="of" derivedContent="Section 4.2"/>) or via
<xref target="RFC4387" format="default" sectionFormat="of" derivedContent="RFC4387">HTTP certificate-store access</xref>.  The
fingerprint is created by calculating a SHA-256 hash over the whole CA
certificate. (For legacy reasons, a SHA-1 hash may be used by some
implementations.)

        </t>
        <t indent="0" pn="section-2.2-4">

After the client gets the CA certificate, it <bcp14>SHOULD</bcp14> authenticate it in some
manner unless this is deemed unnecessary, for example, because the device is
being provisioned inside a trusted environment.  For example, the client could compare
the certificate's fingerprint with locally configured, out-of-band distributed, identifying
information, or by some equivalent means such as a direct comparison with a
locally stored copy of the certificate.

        </t>
        <t indent="0" pn="section-2.2-5">

Intermediate CA certificates, if any, are signed by a higher-level CA, so there
is no need to authenticate them against the out-of-band data.  Since
intermediate CA certificates are rolled over more frequently than long-lived
top-level CA certificates, clients <bcp14>MUST</bcp14> verify intermediate-level CA
certificates before use during protocol exchanges in case the intermediate CA
certificate has expired or otherwise been invalidated.

        </t>
        <t indent="0" pn="section-2.2-6">

When a CA certificate expires, certificates that have been signed by it may no
longer be regarded as valid.  CA key rollover provides a mechanism by which
the CA can distribute a new CA certificate that will be valid in the future once
the current certificate has expired.  This is done via the GetNextCACert
message (<xref target="get-next-CA" format="default" sectionFormat="of" derivedContent="Section 4.7"/>).

        </t>
      </section>
      <section anchor="overview-req-auth" numbered="true" toc="include" removeInRFC="false" pn="section-2.3">
        <name slugifiedName="name-client-authentication">Client Authentication</name>
        <t indent="0" pn="section-2.3-1">

As with every protocol that uses public-key cryptography, the association
between the public keys used in the protocol and the identities with which
they are associated must be authenticated in a cryptographically secure
manner.  Communications between the client and the CA are secured using SCEP
Secure Message Objects as explained in <xref target="message-obj" format="default" sectionFormat="of" derivedContent="Section 3"/>, which
specifies how CMS is used to encrypt and sign the data.  In order to perform
the signing operation, the client uses an appropriate local certificate:

        </t>
        <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-2.3-2">
          <li pn="section-2.3-2.1" derivedCounter="1.">If the client does not have an appropriate existing certificate,
		  then a locally generated self-signed certificate <bcp14>MUST</bcp14> be used.  The
		  keyUsage extension in the certificate <bcp14>MUST</bcp14> indicate that it is valid
		  for digitalSignature and keyEncipherment (if available).  The
		  self-signed certificate <bcp14>SHOULD</bcp14> use the same subject name and key as
		  in the PKCS #10 request.  In this case, the messageType is PKCSReq
		  (see <xref target="messageType" format="default" sectionFormat="of" derivedContent="Section 3.2.1.2"/>).</li>
          <li pn="section-2.3-2.2" derivedCounter="2.">If the client already has a certificate issued by the SCEP CA, and
		  the CA supports renewal (see <xref target="overview-cert-enrol" format="default" sectionFormat="of" derivedContent="Section 2.5"/>),
		  that certificate <bcp14>SHOULD</bcp14> be used. In this case, the messageType is
		  RenewalReq (see <xref target="messageType" format="default" sectionFormat="of" derivedContent="Section 3.2.1.2"/>).</li>
          <li pn="section-2.3-2.3" derivedCounter="3.">Alternatively, if the client has no certificate issued by the
		  SCEP CA but has credentials from an alternate CA, then the
		  certificate issued by the alternate CA <bcp14>MAY</bcp14> be used in a renewal
		  request as described above.  The SCEP CA's policy will determine
		  whether the request can be accepted or not.</li>
        </ol>
        <t indent="0" pn="section-2.3-3">
Note that although the above text describes several different types of
operations, for historical reasons, most implementations always apply the first
one, even if an existing certificate already exists.  For this reason, support
for the first case is mandatory while support for the latter ones are optional
(see <xref target="MTI" format="default" sectionFormat="of" derivedContent="Section 2.9"/>).
        </t>
        <t indent="0" pn="section-2.3-4">
During the certificate-enrolment process, the client <bcp14>MUST</bcp14> use
the selected certificate's key when signing the CMS envelope (see <xref target="message-obj" format="default" sectionFormat="of" derivedContent="Section 3"/>).  This certificate will be either the
self-signed one matching the PKCS #10 request or the CA-issued one used to
authorise a renewal, and it <bcp14>MUST</bcp14> be included in the signedData
certificates field (possibly as part of a full certificate chain).  If the key
being certified allows encryption, then the CA's CertResp will use the same
certificate's public key when encrypting the response.
        </t>
        <t indent="0" pn="section-2.3-5">
Note that, in the case of renewal operations, this means that the request will
be signed and authenticated with the key in the previously issued certificate
rather than the key in the PKCS #10 request, and the response may similarly be
returned encrypted with the key in the previously issued certificate.  This
has security implications; see <xref target="security-no-pop" format="default" sectionFormat="of" derivedContent="Section 7.6"/>.
        </t>
      </section>
      <section anchor="overview-enrol-auth" numbered="true" toc="include" removeInRFC="false" pn="section-2.4">
        <name slugifiedName="name-enrolment-authorisation">Enrolment Authorisation</name>
        <t indent="0" pn="section-2.4-1">

<xref target="RFC2986" format="default" sectionFormat="of" derivedContent="RFC2986">PKCS #10</xref> specifies a <xref target="RFC2985" format="default" sectionFormat="of" derivedContent="RFC2985">PKCS
#9</xref> challengePassword attribute to be sent as part of the enrolment
request.  When utilising the challengePassword, the CA distributes a shared
secret to the client, which will be used to authenticate the request from the
client.  It is <bcp14>RECOMMENDED</bcp14> that the challengePassword be a
one-time
authenticator value to limit the ability of an attacker who can capture the
authenticator from the client or CA and reuse it to request further
certificates.

        </t>
        <t indent="0" pn="section-2.4-2">

Inclusion of the challengePassword by the SCEP client is
<bcp14>RECOMMENDED</bcp14>; however,
its omission allows for unauthenticated authorisation of enrolment requests
(which may, however, require manual approval of each certificate issue if
other security measures to control issue aren't in place; see below).
Inclusion is <bcp14>OPTIONAL</bcp14> for renewal requests that are authenticated by being
signed with an existing certificate.  The CMS envelope protects the privacy of
the challengePassword.

        </t>
        <t indent="0" pn="section-2.4-3">

A client that is performing certificate renewal as per <xref target="overview-cert-enrol" format="default" sectionFormat="of" derivedContent="Section 2.5"/> <bcp14>SHOULD</bcp14> omit the challengePassword but <bcp14>MAY</bcp14> send
the originally distributed shared secret in the challengePassword attribute.
The SCEP CA <bcp14>MAY</bcp14> authenticate the request using the
challengePassword in addition to the previously issued certificate that signs
the request. The SCEP CA <bcp14>MUST NOT</bcp14> attempt to authenticate a
client based on a self-signed certificate unless it has been verified through
out-of-band means such as a certificate fingerprint.
        </t>
        <t indent="0" pn="section-2.4-4">

To perform the authorisation in manual mode, the client's request is placed in
the PENDING state until the CA operator authorises or rejects it.  Manual
authorisation is used when the client has only a self-signed certificate that
hasn't been previously authenticated by the CA and/or a challengePassword is
not available.  The SCEP CA <bcp14>MAY</bcp14> either reject unauthorised requests or mark
them for manual authorisation according to CA policy.

        </t>
      </section>
      <section anchor="overview-cert-enrol" numbered="true" toc="include" removeInRFC="false" pn="section-2.5">
        <name slugifiedName="name-certificate-enrolment-renew">Certificate Enrolment/Renewal</name>
        <t indent="0" pn="section-2.5-1">
A client starts an enrolment transaction (<xref target="PKCSReq" format="default" sectionFormat="of" derivedContent="Section 3.3.1"/>) by creating a
certificate request using PKCS #10 and sends the request to the CA enveloped
using CMS (<xref target="message-obj" format="default" sectionFormat="of" derivedContent="Section 3"/>).
        </t>
        <t indent="0" pn="section-2.5-2">

If the CA supports certificate renewal and the CA policy permits, then a new
certificate with new validity dates can be issued, even though the old one is
still valid.  To renew an existing certificate, the client uses the RenewalReq
message (see <xref target="pkiMessage-types" format="default" sectionFormat="of" derivedContent="Section 3.3"/>) and signs it with the existing
client certificate.  The client <bcp14>SHOULD</bcp14> use a new keypair when requesting a new
certificate but <bcp14>MAY</bcp14> request a new certificate using the old keypair.

        </t>
        <t indent="0" pn="section-2.5-3">

If the CA returns a CertRep message (<xref target="CertRep" format="default" sectionFormat="of" derivedContent="Section 3.3.2"/>) with status set
to PENDING, the client enters into polling mode by periodically sending a
CertPoll message (<xref target="CertPoll" format="default" sectionFormat="of" derivedContent="Section 3.3.3"/>) to the CA until the CA operator
completes the manual authentication (approving or denying the request). The
frequency of the polling operation is a CA/client configuration issue and may
range from seconds or minutes when the issue process is automatic but not
instantaneous, through to hours or days if the certificate-issue operation
requires manual approval.

        </t>
        <t indent="0" pn="section-2.5-4">

If polling mode is being used, then the client will send a single
PKCSReq/RenewalReq message (<xref target="PKCSReq" format="default" sectionFormat="of" derivedContent="Section 3.3.1"/>), followed by 0 or more
CertPoll messages (<xref target="CertPoll" format="default" sectionFormat="of" derivedContent="Section 3.3.3"/>).  The CA will, in return, send 0
or more CertRep messages (<xref target="CertRep" format="default" sectionFormat="of" derivedContent="Section 3.3.2"/>) with status set to PENDING
in response to CertPolls, followed by a single CertRep message (<xref target="CertRep" format="default" sectionFormat="of" derivedContent="Section 3.3.2"/>) with status set to either SUCCESS or
FAILURE.

        </t>
        <section anchor="overview-client-state" numbered="true" toc="include" removeInRFC="false" pn="section-2.5.1">
          <name slugifiedName="name-client-state-transitions">Client State Transitions</name>
          <t indent="0" pn="section-2.5.1-1">

The client state transitions during the SCEP process are indicated in <xref target="state-diagram" format="default" sectionFormat="of" derivedContent="Figure 1"/>.

          </t>
          <figure anchor="state-diagram" align="left" suppress-title="false" pn="figure-1">
            <name slugifiedName="name-state-transition-diagram">State Transition Diagram</name>
            <artwork name="" type="" align="left" alt="" pn="section-2.5.1-2.1">
                                CertPoll
                              +-----&lt;----+
                              |          |
                              |          | CertRep(PENDING)
                              |          |
[CERT-NONEXISTENT] ------&gt; [CERT-REQ-PENDING] --------&gt; [CERT-ISSUED]
      ^            PKCSReq    |           CertRep(SUCCESS)
      |          RenewalReq   |
      |                       |
      +-----------------------+
      CertRep(FAILURE) or
      Max-time/max-polls exceeded
			</artwork>
          </figure>
          <t indent="0" pn="section-2.5.1-3">

The certificate-issue process starts at state CERT-NONEXISTENT.  Sending a
PKCSReq/RenewalReq message changes the state to CERT-REQ-PENDING.

          </t>
          <t indent="0" pn="section-2.5.1-4">

If the CA returns a CertRep message with pkiStatus set to SUCCESS, then the
state changes to CERT-ISSUED.

          </t>
          <t indent="0" pn="section-2.5.1-5">

If the CA returns a CertRep message with pkiStatus set to FAILURE or there is
no response, then the state reverts back to CERT-NONEXISTENT.

          </t>
          <t indent="0" pn="section-2.5.1-6">

If the CA returns a CertRep message with pkiStatus set to PENDING, then the
client will keep polling by sending a CertPoll message until either a CertRep
message with status set to SUCCESS or FAILURE is received, a timeout occurs,
or the maximum number of polls has been exceeded.

          </t>
          <t indent="0" pn="section-2.5.1-7"><xref target="automatic" format="default" sectionFormat="of" derivedContent="Figure 2"/> shows a successful transaction in
	  automatic mode</t>
          <figure anchor="automatic" align="left" suppress-title="false" pn="figure-2">
            <name slugifiedName="name-automatic-mode">Automatic Mode</name>
            <artwork type="" align="left" alt="" pn="section-2.5.1-8.1">
    CLIENT                              CA SERVER

PKCSReq: PKI cert. enrolment message
--------------------------------&gt; CertRep: pkiStatus = SUCCESS
                                  Certificate attached
                                  &lt;------------------------------
Receive issued certificate.
			</artwork>
          </figure>
          <t indent="0" pn="section-2.5.1-9"><xref target="manual" format="default" sectionFormat="of" derivedContent="Figure 3"/> shows a successful transaction in manual
	  mode:</t>
          <figure anchor="manual" align="left" suppress-title="false" pn="figure-3">
            <name slugifiedName="name-manual-mode">Manual Mode</name>
            <artwork name="" type="" align="left" alt="" pn="section-2.5.1-10.1">
    CLIENT                              CA SERVER

PKCSReq: PKI cert. enrolment message
--------------------------------&gt; CertRep: pkiStatus = PENDING
                                  &lt;------------------------------
CertPoll: Polling message
--------------------------------&gt; CertRep: pkiStatus = PENDING
                                  &lt;------------------------------
................ &lt;Manual identity authentication&gt; ...............

CertPoll: Polling message
--------------------------------&gt; CertRep: pkiStatus = SUCCESS
                                  Certificate attached
                                  &lt;------------------------------
Receive issued certificate.
			</artwork>
          </figure>
        </section>
      </section>
      <section anchor="overview-cert-access" numbered="true" toc="include" removeInRFC="false" pn="section-2.6">
        <name slugifiedName="name-certificate-access">Certificate Access</name>
        <t indent="0" pn="section-2.6-1">

A certificate query message is defined for clients to retrieve a copy of their
own certificate from the CA.  It allows clients that do not store their
certificates locally to obtain a copy when needed.  This functionality is not
intended to provide a general-purpose certificate-access service, which may be
achieved instead via <xref target="RFC4387" format="default" sectionFormat="of" derivedContent="RFC4387">HTTP certificate-store
access</xref> or Lightweight Directory Access Protocol (LDAP).

        </t>
        <t indent="0" pn="section-2.6-2">

To retrieve a certificate from the CA, a client sends a request consisting of
the certificate's issuer name and serial number.  This assumes that the client
has saved the issuer name and the serial number of the issued certificate from
the previous enrolment transaction.  The transaction to retrieve a certificate
consists of one GetCert (<xref target="GetCertCRL" format="default" sectionFormat="of" derivedContent="Section 3.3.4"/>) message and one CertRep
(<xref target="CertRep" format="default" sectionFormat="of" derivedContent="Section 3.3.2"/>) message, as shown in <xref target="retrieve" format="default" sectionFormat="of" derivedContent="Figure 4"/>.

        </t>
        <figure anchor="retrieve" align="left" suppress-title="false" pn="figure-4">
          <name slugifiedName="name-retrieving-a-certificate">Retrieving a Certificate</name>
          <artwork name="" type="" align="left" alt="" pn="section-2.6-3.1">
   CLIENT                               CA SERVER

GetCert: PKI certificate query message
-------------------------------&gt; CertRep: pkiStatus = SUCCESS
                                 Certificate attached
                                 &lt;-----------------------------
Receive the certificate.
		  </artwork>
        </figure>
      </section>
      <section anchor="overview-CRL-access" numbered="true" toc="include" removeInRFC="false" pn="section-2.7">
        <name slugifiedName="name-crl-access">CRL Access</name>
        <t indent="0" pn="section-2.7-1">

SCEP clients <bcp14>MAY</bcp14> request a CRL via one of three methods:

        </t>
        <ol type="1" indent="adaptive" spacing="normal" start="1" pn="section-2.7-2">
          <li pn="section-2.7-2.1" derivedCounter="1.">If the CA supports the <xref target="RFC5280" format="default" sectionFormat="of" derivedContent="RFC5280">CRL Distribution
		  Points (CRLDPs) extension</xref> in issued certificates, then the
		  CRL <bcp14>MAY</bcp14> be retrieved via the mechanism specified in the CRLDP.</li>
          <li pn="section-2.7-2.2" derivedCounter="2.">If the CA supports <xref target="RFC4387" format="default" sectionFormat="of" derivedContent="RFC4387">HTTP
		  certificate-store access</xref>, then the CRL <bcp14>MAY</bcp14> be retrieved via
		  the <xref target="RFC5280" format="default" sectionFormat="of" derivedContent="RFC5280">AuthorityInfoAcces</xref> location specified
		  in the certificate.</li>
          <li pn="section-2.7-2.3" derivedCounter="3.">Only if the CA does not support CRLDPs or HTTP access should a
		  CRL query be composed by creating a GetCRL message consisting of the
		  issuer name and serial number from the certificate whose revocation
		  status is being queried.</li>
        </ol>
        <t indent="0" pn="section-2.7-3">

The message is sent to the SCEP CA in the same way as the other SCEP requests.
The transaction to retrieve a CRL consists of one GetCRL PKI message and one
CertRep PKI message, which contains only the CRL (no certificates) in a
degenerate certificates-only CMS SignedData message
(<xref target="certs-only" format="default" sectionFormat="of" derivedContent="Section 3.4"/>), as shown in <xref target="retrieve-CRL" format="default" sectionFormat="of" derivedContent="Figure 5"/>. 

        </t>
        <figure anchor="retrieve-CRL" align="left" suppress-title="false" pn="figure-5">
          <name slugifiedName="name-retrieving-a-crl">Retrieving a CRL</name>
          <artwork name="" type="" align="left" alt="" pn="section-2.7-4.1">
       CLIENT                           CA SERVER

   GetCRL: PKI CRL query message
----------------------------------&gt;
                                  CertRep: CRL attached
                                  &lt;-----------------------------
Receive the CRL
		  </artwork>
        </figure>
      </section>
      <section anchor="overview-cert-rev" numbered="true" toc="include" removeInRFC="false" pn="section-2.8">
        <name slugifiedName="name-certificate-revocation">Certificate Revocation</name>
        <t indent="0" pn="section-2.8-1">

SCEP does not specify a method to request certificate revocation.  In order to
revoke a certificate, the client must contact the CA using a non-SCEP-defined mechanism.
        </t>
      </section>
      <section anchor="MTI" numbered="true" toc="include" removeInRFC="false" pn="section-2.9">
        <name slugifiedName="name-mandatory-to-implement-func">Mandatory-to-Implement Functionality</name>
        <t indent="0" pn="section-2.9-1">

At a minimum, all SCEP implementations compliant with this specification <bcp14>MUST</bcp14>
support <xref target="CA-caps-HTTP" format="default" sectionFormat="of" derivedContent="Section 3.5.1">GetCACaps</xref>,
<xref target="GetCACert" format="default" sectionFormat="of" derivedContent="Section 4.2">GetCACert</xref>,
<xref target="PKCSReq" format="default" sectionFormat="of" derivedContent="Section 3.3.1">PKCSReq</xref> (and its associated response messages),
communication of binary data via <xref target="HTTP-GET-POST" format="default" sectionFormat="of" derivedContent="Section 4.1">HTTP
POST</xref>, and the <xref target="AES" format="default" sectionFormat="of" derivedContent="AES">AES128-CBC</xref> and
<xref target="SHA2" format="default" sectionFormat="of" derivedContent="SHA2">SHA-256</xref> algorithms to secure
<xref target="pkiMessage" format="default" sectionFormat="of" derivedContent="Section 3.2">pkiMessages</xref>.

        </t>
        <t indent="0" pn="section-2.9-2">

For historical reasons, implementations <bcp14>MAY</bcp14> support communications of binary
data via <xref target="HTTP-GET-POST" format="default" sectionFormat="of" derivedContent="Section 4.1">HTTP GET</xref>, and the triple DES-CBC
and SHA-1 algorithms to secure <xref target="pkiMessage" format="default" sectionFormat="of" derivedContent="Section 3.2">pkiMessages</xref>.
Implementations <bcp14>MUST NOT</bcp14> support the obsolete and/or insecure single DES and
MD5 algorithms used in earlier versions of this specification, since the
unsecured nature of GetCACaps means that an in-path attacker can trivially
roll back the encryption used to these insecure algorithms; see <xref target="security-getcacaps" format="default" sectionFormat="of" derivedContent="Section 7.5"/>.

        </t>
      </section>
    </section>
    <section anchor="message-obj" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-scep-secure-message-objects">SCEP Secure Message Objects</name>
      <t indent="0" pn="section-3-1">

CMS is a general enveloping mechanism that enables both signed and encrypted
transmission of arbitrary data.  SCEP messages that require confidentiality
use two layers of CMS, as shown using ASN.1-like pseudocode in
<xref target="cms-layering" format="default" sectionFormat="of" derivedContent="Figure 6"/>.  By applying both enveloping and signing
transformations, the SCEP message is protected both for the integrity of its
end-to-end transaction information and the confidentiality of its information
portion.

      </t>
      <figure anchor="cms-layering" align="left" suppress-title="false" pn="figure-6">
        <name slugifiedName="name-cms-layering">CMS Layering</name>
        <sourcecode type="pseudocode" markers="false" pn="section-3-2.1">
pkiMessage {
  contentType = signedData { pkcs-7 2 },
  content {
    digestAlgorithms,
    encapsulatedContentInfo {
      eContentType = data { pkcs-7 1 },
      eContent {           -- pkcsPKIEnvelope, optional
        contentType = envelopedData { pkcs-7 3 },
        content {
          recipientInfo,
          encryptedContentInfo {
            contentType = data { pkcs-7 1 },
            contentEncrAlgorithm,
            encryptedContent {
              messageData  -- Typically PKCS #10 request
              }
            }
          }
        }
      },
    certificates,          -- Optional
    crls,                  -- Optional
    signerInfo {
      signedAttrs {
        transactionID,
        messageType,
        pkiStatus,
        failInfo,          -- Optional
        senderNonce / recipientNonce,
        },
      signature
      }
    }
  }
</sourcecode>
      </figure>
      <t indent="0" pn="section-3-3">

When a particular SCEP message carries data, this data is carried in the
messageData.  CertRep messages will lack any signed content and consist only
of a pkcsPKIEnvelope (<xref target="pkcsPKIEnvelope" format="default" sectionFormat="of" derivedContent="Section 3.2.2"/>).

      </t>
      <t indent="0" pn="section-3-4">

The remainder of this document will refer only to "messageData", but it is
understood to always be encapsulated in the pkcsPKIEnvelope (<xref target="pkcsPKIEnvelope" format="default" sectionFormat="of" derivedContent="Section 3.2.2"/>).  The format of the data in the messageData is
defined by the messageType attribute (see <xref target="pkiMessage" format="default" sectionFormat="of" derivedContent="Section 3.2"/>) of the
SignedData.  If there is no messageData to be transmitted, the entire
pkcsPKIEnvelope <bcp14>MUST</bcp14> be omitted.

      </t>
      <t indent="0" pn="section-3-5">

Samples of SCEP messages are available through the
<xref target="JSCEP" format="default" sectionFormat="of" derivedContent="JSCEP">JSCEP project</xref> in the src/samples directory.

      </t>
      <section anchor="message-processing" numbered="true" toc="include" removeInRFC="false" pn="section-3.1">
        <name slugifiedName="name-scep-message-object-process">SCEP Message Object Processing</name>
        <t indent="0" pn="section-3.1-1">

Creating a SCEP message consists of several stages.  The content to be
conveyed (in other words, the messageData) is first encrypted, and the
encrypted content is then signed.

        </t>
        <t indent="0" pn="section-3.1-2">

The form of encryption to be applied depends on the capabilities of the
recipient's public key.  If the key is encryption capable (for example, RSA),
then the messageData is encrypted using the recipient's public key with the
CMS KeyTransRecipientInfo mechanism.  If the key is not encryption capable
(for example, DSA or ECDSA), then
the messageData is encrypted using the
challengePassword with the CMS PasswordRecipientInfo mechanism.

        </t>
        <t indent="0" pn="section-3.1-3">

Once the messageData has been encrypted, it is signed with the sender's public
key.  This completes the SCEP message, which is then sent to the recipient.

        </t>
        <t indent="0" pn="section-3.1-4">

Note that some early implementations of this specification dealt with keys
that were not encryption capable by omitting the encryption stage, based on the
text in <xref target="message-obj" format="default" sectionFormat="of" derivedContent="Section 3"/> that indicated that "the EnvelopedData is
omitted".  This alternative processing mechanism <bcp14>SHOULD NOT</bcp14> be used since it
exposes in cleartext the challengePassword used to authorise the certificate
issue.

        </t>
        <t indent="0" pn="section-3.1-5">

        </t>
      </section>
      <section anchor="pkiMessage" numbered="true" toc="include" removeInRFC="false" pn="section-3.2">
        <name slugifiedName="name-scep-pkimessage">SCEP pkiMessage</name>
        <t indent="0" pn="section-3.2-1">

The basic building block of all secured SCEP messages is the SCEP pkiMessage.
It consists of a CMS SignedData content type.  The following restrictions
apply:

        </t>
        <ul spacing="compact" bare="false" empty="false" indent="3" pn="section-3.2-2">
          <li pn="section-3.2-2.1">The eContentType in encapsulatedContentInfo <bcp14>MUST</bcp14> be data ({pkcs-7
		     1}).</li>
          <li pn="section-3.2-2.2">The signed content, if present (FAILURE and PENDING CertRep
			 messages will lack any signed content),
			 <bcp14>MUST</bcp14> be a pkcsPKIEnvelope
			 (<xref target="pkcsPKIEnvelope" format="default" sectionFormat="of" derivedContent="Section 3.2.2"/>)
			 and <bcp14>MUST</bcp14> match the
			 messageType attribute.</li>
          <li pn="section-3.2-2.3">The SignerInfo <bcp14>MUST</bcp14> contain a set of authenticatedAttributes
			 (<xref target="signed-attrs" format="default" sectionFormat="of" derivedContent="Section 3.2.1"/>).</li>
        </ul>
        <section anchor="signed-attrs" numbered="true" toc="include" removeInRFC="false" pn="section-3.2.1">
          <name slugifiedName="name-signed-transaction-attribut">Signed Transaction Attributes</name>
          <t indent="0" pn="section-3.2.1-1">

At a minimum, all messages <bcp14>MUST</bcp14> contain the following authenticatedAttributes:

          </t>
          <ul spacing="compact" bare="false" empty="false" indent="3" pn="section-3.2.1-2">
            <li pn="section-3.2.1-2.1">A transactionID attribute (see <xref target="transactionID" format="default" sectionFormat="of" derivedContent="Section 3.2.1.1"/>).</li>
            <li pn="section-3.2.1-2.2">A messageType attribute (see <xref target="messageType" format="default" sectionFormat="of" derivedContent="Section 3.2.1.2"/>).</li>
            <li pn="section-3.2.1-2.3">A fresh senderNonce attribute (see <xref target="nonces" format="default" sectionFormat="of" derivedContent="Section 3.2.1.5"/>).  However, note the comment about
	    senderNonces and polling in <xref target="CertRep" format="default" sectionFormat="of" derivedContent="Section 3.3.2"/> </li>
            <li pn="section-3.2.1-2.4">Any attributes required by CMS.</li>
          </ul>
          <t indent="0" pn="section-3.2.1-3">

If the message is a CertRep, it <bcp14>MUST</bcp14> also include the following
authenticatedAttributes:

          </t>
          <ul spacing="compact" bare="false" empty="false" indent="3" pn="section-3.2.1-4">
            <li pn="section-3.2.1-4.1">A pkiStatus attribute (see <xref target="pkiStatus" format="default" sectionFormat="of" derivedContent="Section 3.2.1.3"/>).</li>
            <li pn="section-3.2.1-4.2">failInfo and optional failInfoText attributes (see <xref target="failInfo" format="default" sectionFormat="of" derivedContent="Section 3.2.1.4"/>) if pkiStatus = FAILURE.</li>
            <li pn="section-3.2.1-4.3">A recipientNonce attribute (see <xref target="nonces" format="default" sectionFormat="of" derivedContent="Section 3.2.1.5"/>) copied
	    from the senderNonce in the request that this is a response
	    to.</li>
          </ul>
          <t indent="0" pn="section-3.2.1-5">

The following transaction attributes are encoded as authenticated attributes
and carried in the SignerInfo for this SignedData.

          </t>
          <table align="left" pn="table-1">
            <name slugifiedName="name-scep-attributes">SCEP Attributes</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Attribute</th>
                <th align="left" colspan="1" rowspan="1">Encoding</th>
                <th align="left" colspan="1" rowspan="1">Comment</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">transactionID</td>
                <td align="left" colspan="1" rowspan="1">PrintableString</td>
                <td align="left" colspan="1" rowspan="1">Unique ID for this
			transaction as a text string</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">messageType</td>
                <td align="left" colspan="1" rowspan="1">PrintableString</td>
                <td align="left" colspan="1" rowspan="1">Decimal value as a
			numeric text string</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">pkiStatus</td>
                <td align="left" colspan="1" rowspan="1">PrintableString</td>
                <td align="left" colspan="1" rowspan="1">Decimal value as a
			numeric text string</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">failInfo</td>
                <td align="left" colspan="1" rowspan="1">PrintableString</td>
                <td align="left" colspan="1" rowspan="1">Decimal value as a
			numeric text string</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">failInfoText</td>
                <td align="left" colspan="1" rowspan="1">UTF8String</td>
                <td align="left" colspan="1" rowspan="1">Descriptive text for the
			failInfo value</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">senderNonce</td>
                <td align="left" colspan="1" rowspan="1">OCTET STRING</td>
                <td align="left" colspan="1" rowspan="1">Random nonce as a 16-byte
			binary data string</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">recipientNonce</td>
                <td align="left" colspan="1" rowspan="1">OCTET STRING</td>
                <td align="left" colspan="1" rowspan="1">Random nonce as a
			16-byte binary data string</td>
              </tr>
            </tbody>
          </table>
          <t indent="0" pn="section-3.2.1-7">The OIDs used for these attributes are as
			          follows:</t>
          <table align="left" pn="table-2">
            <name slugifiedName="name-scep-attribute-oids">SCEP Attribute OIDs</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Name</th>
                <th align="left" colspan="1" rowspan="1">ASN.1 Definition</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-VeriSign</td>
                <td align="left" colspan="1" rowspan="1">OBJECT_IDENTIFIER ::= {2 16 US(840) 1
			   VeriSign(113733)}</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-pki</td>
                <td align="left" colspan="1" rowspan="1">OBJECT_IDENTIFIER ::= {id-VeriSign pki(1)}</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-attributes</td>
                <td align="left" colspan="1" rowspan="1">OBJECT_IDENTIFIER ::= {id-pki
			   attributes(9)}</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-transactionID</td>
                <td align="left" colspan="1" rowspan="1">OBJECT_IDENTIFIER ::= {id-attributes
			   transactionID(7)}</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-messageType</td>
                <td align="left" colspan="1" rowspan="1">OBJECT_IDENTIFIER ::= {id-attributes
			   messageType(2)}</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-pkiStatus</td>
                <td align="left" colspan="1" rowspan="1">OBJECT_IDENTIFIER ::= {id-attributes
			   pkiStatus(3)}</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-failInfo</td>
                <td align="left" colspan="1" rowspan="1">OBJECT_IDENTIFIER ::= {id-attributes
			   failInfo(4)}</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-senderNonce</td>
                <td align="left" colspan="1" rowspan="1">OBJECT_IDENTIFIER ::= {id-attributes
			   senderNonce(5)}</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-recipientNonce</td>
                <td align="left" colspan="1" rowspan="1">OBJECT_IDENTIFIER ::= {id-attributes
				recipientNonce(6)}</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-scep</td>
                <td align="left" colspan="1" rowspan="1">OBJECT IDENTIFIER ::= {id-pkix 24}</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">id-scep-failInfoText</td>
                <td align="left" colspan="1" rowspan="1">OBJECT IDENTIFIER ::= {id-scep 1}</td>
              </tr>
            </tbody>
          </table>
          <t indent="0" pn="section-3.2.1-9">

The attributes are detailed in the following sections.

          </t>
          <section anchor="transactionID" numbered="true" toc="include" removeInRFC="false" pn="section-3.2.1.1">
            <name slugifiedName="name-transactionid">transactionID</name>
            <t indent="0" pn="section-3.2.1.1-1">

A PKI operation is a transaction consisting of the messages exchanged between
a client and the CA.  The transactionID is a text string provided by the
client when starting a transaction.  The client <bcp14>MUST</bcp14> use a unique string as
the transaction identifier, encoded as a PrintableString, which <bcp14>MUST</bcp14> be used
for all PKI messages exchanged for a given operation, such as a certificate
issue.

            </t>
            <t indent="0" pn="section-3.2.1.1-2">

Note that the transactionID must be unique, but not necessarily randomly
generated.  For example, it may be a value assigned by the CA to allow the
client to be identified by their transactionID, using a value such as the
client device's Extended Unique Identifier (EUI), Remote Terminal Unit (RTU) ID, or a similar unique
identifier.  This can be
useful when the client doesn't have a preassigned Distinguished Name through
which the CA can identify their request -- for example, when enrolling
Supervisory Control and Data Acquisition (SCADA) devices.

            </t>
          </section>
          <section anchor="messageType" numbered="true" toc="include" removeInRFC="false" pn="section-3.2.1.2">
            <name slugifiedName="name-messagetype">messageType</name>
            <t indent="0" pn="section-3.2.1.2-1">
The messageType attribute specifies the type of operation performed by the
transaction.  This attribute <bcp14>MUST</bcp14> be included in all PKI messages.  The
following message types are defined:
            </t>
            <table anchor="scep-message-types" align="center" pn="table-3">
              <name slugifiedName="name-scep-message-types">SCEP Message Types</name>
              <thead>
                <tr>
                  <th align="left" colspan="1" rowspan="1">Value</th>
                  <th align="left" colspan="1" rowspan="1">Name</th>
                  <th align="left" colspan="1" rowspan="1">Description</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left" colspan="1" rowspan="1">0</td>
                  <td align="left" colspan="1" rowspan="1">Reserved</td>
                  <td align="left" colspan="1" rowspan="1"/>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">3</td>
                  <td align="left" colspan="1" rowspan="1">CertRep</td>
                  <td align="left" colspan="1" rowspan="1">Response to certificate or CRL request.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">17</td>
                  <td align="left" colspan="1" rowspan="1">RenewalReq</td>
                  <td align="left" colspan="1" rowspan="1">PKCS #10 certificate request authenticated with an existing certificate.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">19</td>
                  <td align="left" colspan="1" rowspan="1">PKCSReq</td>
                  <td align="left" colspan="1" rowspan="1">PKCS #10 certificate request authenticated with a shared secret.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">20</td>
                  <td align="left" colspan="1" rowspan="1">CertPoll</td>
                  <td align="left" colspan="1" rowspan="1">Certificate polling in manual enrolment.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">21</td>
                  <td align="left" colspan="1" rowspan="1">GetCert</td>
                  <td align="left" colspan="1" rowspan="1">Retrieve a certificate.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">22</td>
                  <td align="left" colspan="1" rowspan="1">GetCRL</td>
                  <td align="left" colspan="1" rowspan="1">Retrieve a CRL.</td>
                </tr>
              </tbody>
            </table>
            <t indent="0" pn="section-3.2.1.2-3">
Message types not defined above <bcp14>MUST</bcp14> be treated as errors unless their use
has been negotiated through <xref target="CA-caps-HTTP" format="default" sectionFormat="of" derivedContent="Section 3.5.1">GetCACaps</xref>.

            </t>
          </section>
          <section anchor="pkiStatus" numbered="true" toc="include" removeInRFC="false" pn="section-3.2.1.3">
            <name slugifiedName="name-pkistatus">pkiStatus</name>
            <t indent="0" pn="section-3.2.1.3-1">

All response messages <bcp14>MUST</bcp14> include transaction status information, which is
defined as a pkiStatus attribute:
            </t>
            <table anchor="tab-pkiStatus" align="center" pn="table-4">
              <name slugifiedName="name-pkistatus-attributes">pkiStatus Attributes</name>
              <thead>
                <tr>
                  <th align="left" colspan="1" rowspan="1">Value</th>
                  <th align="left" colspan="1" rowspan="1">Name</th>
                  <th align="left" colspan="1" rowspan="1">Description</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left" colspan="1" rowspan="1">0</td>
                  <td align="left" colspan="1" rowspan="1">SUCCESS</td>
                  <td align="left" colspan="1" rowspan="1">Request granted.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">2</td>
                  <td align="left" colspan="1" rowspan="1">FAILURE</td>
                  <td align="left" colspan="1" rowspan="1">Request rejected.  In this case, the failInfo attribute, as defined
      in <xref target="failInfo" format="default" sectionFormat="of" derivedContent="Section 3.2.1.4"/>, <bcp14>MUST</bcp14> also
      be present.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">3</td>
                  <td align="left" colspan="1" rowspan="1">PENDING</td>
                  <td align="left" colspan="1" rowspan="1">Request pending for manual approval.</td>
                </tr>
              </tbody>
            </table>
            <t indent="0" pn="section-3.2.1.3-3">
PKI status values not defined above <bcp14>MUST</bcp14> be treated as errors unless their
use has been negotiated through <xref target="CA-caps-HTTP" format="default" sectionFormat="of" derivedContent="Section 3.5.1">GetCACaps</xref>.
            </t>
          </section>
          <section anchor="failInfo" numbered="true" toc="include" removeInRFC="false" pn="section-3.2.1.4">
            <name slugifiedName="name-failinfo-and-failinfotext">failInfo and failInfoText</name>
            <t indent="0" pn="section-3.2.1.4-1">
The failInfo attribute <bcp14>MUST</bcp14> contain one of the following failure reasons:
            </t>
            <table anchor="tab-failInfo" align="center" pn="table-5">
              <name slugifiedName="name-failinfo-attributes">failInfo Attributes</name>
              <thead>
                <tr>
                  <th align="left" colspan="1" rowspan="1">Value</th>
                  <th align="left" colspan="1" rowspan="1">Name</th>
                  <th align="left" colspan="1" rowspan="1">Description</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left" colspan="1" rowspan="1">0</td>
                  <td align="left" colspan="1" rowspan="1">badAlg</td>
                  <td align="left" colspan="1" rowspan="1">Unrecognised or unsupported algorithm.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">1</td>
                  <td align="left" colspan="1" rowspan="1">badMessageCheck</td>
                  <td align="left" colspan="1" rowspan="1">Integrity check (meaning signature verification of the CMS message) failed.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">2</td>
                  <td align="left" colspan="1" rowspan="1">badRequest</td>
                  <td align="left" colspan="1" rowspan="1">Transaction not permitted or supported.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">3</td>
                  <td align="left" colspan="1" rowspan="1">badTime</td>
                  <td align="left" colspan="1" rowspan="1">The signingTime attribute from the CMS authenticatedAttributes was
      not sufficiently close to the system time.  This condition may occur if
      the CA is concerned about replays of old messages.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">4</td>
                  <td align="left" colspan="1" rowspan="1">badCertId</td>
                  <td align="left" colspan="1" rowspan="1">No certificate could be identified matching the provided criteria.</td>
                </tr>
              </tbody>
            </table>
            <t indent="0" pn="section-3.2.1.4-3">
Failure reasons not defined above <bcp14>MUST</bcp14> be treated as errors unless their use
has been negotiated through <xref target="CA-caps-HTTP" format="default" sectionFormat="of" derivedContent="Section 3.5.1">GetCACaps</xref>.
            </t>
            <t indent="0" pn="section-3.2.1.4-4">
The failInfoText is a free-form UTF-8 text string that provides further
information in the case of pkiStatus = FAILURE.  In particular, it may be used
to provide details on why a certificate request was not granted that go beyond
what's provided by the near-universal failInfo = badRequest status.  Since
this is a free-form text string intended for interpretation by humans,
implementations <bcp14>SHOULD NOT</bcp14> assume that it has any type of machine-processable
content.
            </t>
          </section>
          <section anchor="nonces" numbered="true" toc="include" removeInRFC="false" pn="section-3.2.1.5">
            <name slugifiedName="name-sendernonce-and-recipientno">senderNonce and recipientNonce</name>
            <t indent="0" pn="section-3.2.1.5-1">
The senderNonce and recipientNonce attributes are each a 16-byte random number
generated for each transaction.  These are intended to prevent replay attacks.
            </t>
            <t indent="0" pn="section-3.2.1.5-2">
When a sender sends a PKI message to a recipient, a fresh senderNonce <bcp14>MUST</bcp14> be
included in the message.  The recipient <bcp14>MUST</bcp14> copy the senderNonce into the
recipientNonce of the reply as a proof of liveliness.  The original sender
<bcp14>MUST</bcp14> verify that the recipientNonce of the reply matches the senderNonce it
sent in the request.  If the nonce does not match, then the message <bcp14>MUST</bcp14> be
rejected.
            </t>
            <t indent="0" pn="section-3.2.1.5-3">
Note that since SCEP exchanges consist of a single request followed by a
single response, the use of distinct sender and recipient nonces is redundant,
since the client sends a nonce in its request and the CA responds with the
same nonce in its reply.  In effect, there's just a single nonce, identified as
senderNonce in the client's request and recipientNonce in the CA's reply.
            </t>
          </section>
        </section>
        <section anchor="pkcsPKIEnvelope" numbered="true" toc="include" removeInRFC="false" pn="section-3.2.2">
          <name slugifiedName="name-scep-pkcspkienvelope">SCEP pkcsPKIEnvelope</name>
          <t indent="0" pn="section-3.2.2-1">

The information portion of a SCEP message is carried inside an EnvelopedData
content type, as defined in CMS, with the following restrictions:

          </t>
          <ul spacing="compact" bare="false" empty="false" indent="3" pn="section-3.2.2-2">
            <li pn="section-3.2.2-2.1">contentType in encryptedContentInfo <bcp14>MUST</bcp14> be data ({pkcs-7
			   1}).</li>
            <li pn="section-3.2.2-2.2">encryptedContent <bcp14>MUST</bcp14> be the SCEP message being transported
			   (see <xref target="SCEP-trans" format="default" sectionFormat="of" derivedContent="Section 4"/>)
			   and <bcp14>MUST</bcp14> match the
			   messageType authenticated Attribute in the pkiMessage.</li>
          </ul>
        </section>
      </section>
      <section anchor="pkiMessage-types" numbered="true" toc="include" removeInRFC="false" pn="section-3.3">
        <name slugifiedName="name-scep-pkimessage-types">SCEP pkiMessage types</name>
        <t indent="0" pn="section-3.3-1">

All of the messages in this section are pkiMessages (<xref target="pkiMessage" format="default" sectionFormat="of" derivedContent="Section 3.2"/>), where the type of the message <bcp14>MUST</bcp14> be specified in the
"messageType" authenticated Attribute.  Each section defines a valid message
type, the corresponding messageData formats, and mandatory authenticated
attributes for that type.

        </t>
        <section anchor="PKCSReq" numbered="true" toc="include" removeInRFC="false" pn="section-3.3.1">
          <name slugifiedName="name-pkcsreq-renewalreq">PKCSReq/RenewalReq</name>
          <t indent="0" pn="section-3.3.1-1">

The messageData for this type consists of a PKCS #10 Certificate Request.  The
certificate request <bcp14>MUST</bcp14> contain at least the following items:

          </t>
          <ul spacing="compact" bare="false" empty="false" indent="3" pn="section-3.3.1-2">
            <li pn="section-3.3.1-2.1">The subject Distinguished Name.</li>
            <li pn="section-3.3.1-2.2">The subject public key.</li>
            <li pn="section-3.3.1-2.3">For a PKCSReq, if authorisation based on a shared secret is
	    being used, a challengePassword attribute.</li>
          </ul>
          <t indent="0" pn="section-3.3.1-3">

In addition, the message must contain the authenticatedAttributes specified in
<xref target="signed-attrs" format="default" sectionFormat="of" derivedContent="Section 3.2.1"/>.

          </t>
        </section>
        <section anchor="CertRep" numbered="true" toc="include" removeInRFC="false" pn="section-3.3.2">
          <name slugifiedName="name-certrep">CertRep</name>
          <t indent="0" pn="section-3.3.2-1">

The messageData for this type consists of a degenerate certificates-only CMS
SignedData message (<xref target="certs-only" format="default" sectionFormat="of" derivedContent="Section 3.4"/>).  The exact content required
for the reply depends on the type of request that this message is a response
to.  The request types are detailed in Sections <xref target="CertRep-success" format="counter" sectionFormat="of" derivedContent="3.3.2.1"/> and <xref target="SCEP-trans" format="counter" sectionFormat="of" derivedContent="4"/>.  In
addition, the message must contain the
authenticatedAttributes specified in <xref target="signed-attrs" format="default" sectionFormat="of" derivedContent="Section 3.2.1"/>.

          </t>
          <t indent="0" pn="section-3.3.2-2">
Earlier draft versions of this specification required that this message include a
senderNonce alongside the recipientNonce, which was to be used to chain to
subsequent polling operations.  However, if a single message was lost during
the potentially extended interval over which polling could take place (see
<xref target="state-trans" format="default" sectionFormat="of" derivedContent="Section 5"/> for an example of this), then if the
implementation were to enforce this requirement, the overall transaction would
fail, even though nothing had actually gone wrong.  Because of this issue,
implementations mostly ignored the requirement to either carry this nonce over to
subsequent polling messages or verify its presence.  More recent versions
of the specification no longer require the chaining of nonces across polling
operations.

          </t>
          <section anchor="CertRep-success" numbered="true" toc="include" removeInRFC="false" pn="section-3.3.2.1">
            <name slugifiedName="name-certrep-success">CertRep SUCCESS</name>
            <t indent="0" pn="section-3.3.2.1-1">

When the pkiStatus attribute is set to SUCCESS, the messageData for this
message consists of a degenerate certificates-only CMS SignedData message
(<xref target="certs-only" format="default" sectionFormat="of" derivedContent="Section 3.4"/>).  The content of this degenerate
certificates-only SignedData message depends on what the original request was, as
outlined in <xref target="success" format="default" sectionFormat="of" derivedContent="Table 6"/>.

            </t>
            <table align="left" anchor="success" pn="table-6">
              <name slugifiedName="name-certrep-response-types">CertRep Response Types</name>
              <thead>
                <tr>
                  <th align="left" colspan="1" rowspan="1">Request-type</th>
                  <th align="left" colspan="1" rowspan="1">Reply-contents</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left" colspan="1" rowspan="1">PKCSReq</td>
                  <td align="left" colspan="1" rowspan="1">The reply <bcp14>MUST</bcp14> contain at least the issued
		  certificate in the certificates field of the SignedData.
		  The reply <bcp14>MAY</bcp14> contain additional certificates, but the issued
		  certificate <bcp14>MUST</bcp14> be the leaf certificate.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">RenewalReq</td>
                  <td align="left" colspan="1" rowspan="1">Same as PKCSReq</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">CertPoll</td>
                  <td align="left" colspan="1" rowspan="1">Same as PKCSReq</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">GetCert</td>
                  <td align="left" colspan="1" rowspan="1">The reply <bcp14>MUST</bcp14> contain at least the requested
				 certificate in the certificates field of the SignedData.
				 The reply <bcp14>MAY</bcp14> contain additional certificates, but the
				 requested certificate <bcp14>MUST</bcp14> be the leaf certificate.</td>
                </tr>
                <tr>
                  <td align="left" colspan="1" rowspan="1">GetCRL</td>
                  <td align="left" colspan="1" rowspan="1">The reply <bcp14>MUST</bcp14> contain the
		  CRL in the crls field of the SignedData.</td>
                </tr>
              </tbody>
            </table>
          </section>
          <section anchor="CertRep-failure" numbered="true" toc="include" removeInRFC="false" pn="section-3.3.2.2">
            <name slugifiedName="name-certrep-failure">CertRep FAILURE</name>
            <t indent="0" pn="section-3.3.2.2-1">

When the pkiStatus attribute is set to FAILURE, the reply <bcp14>MUST</bcp14> also contain a
failInfo (<xref target="failInfo" format="default" sectionFormat="of" derivedContent="Section 3.2.1.4"/>) attribute set to the appropriate error
condition describing the failure.  The reply <bcp14>MAY</bcp14> also contain a failInfoText
attribute providing extended details on why the operation failed, typically to
expand on the catchall failInfo = badRequest status.  The pkcsPKIEnvelope
(<xref target="pkcsPKIEnvelope" format="default" sectionFormat="of" derivedContent="Section 3.2.2"/>) <bcp14>MUST</bcp14> be omitted.

            </t>
          </section>
          <section anchor="CertRep-pending" numbered="true" toc="include" removeInRFC="false" pn="section-3.3.2.3">
            <name slugifiedName="name-certrep-pending">CertRep PENDING</name>
            <t indent="0" pn="section-3.3.2.3-1">

When the pkiStatus attribute is set to PENDING, the pkcsPKIEnvelope (<xref target="pkcsPKIEnvelope" format="default" sectionFormat="of" derivedContent="Section 3.2.2"/>) <bcp14>MUST</bcp14> be omitted.

            </t>
          </section>
        </section>
        <section anchor="CertPoll" numbered="true" toc="include" removeInRFC="false" pn="section-3.3.3">
          <name slugifiedName="name-certpoll-getcertinitial">CertPoll (GetCertInitial)</name>
          <t indent="0" pn="section-3.3.3-1">
This message is used for certificate polling.  For unknown reasons, it was
referred to as "GetCertInitial" in earlier draft versions of this specification.
The messageData for this type consists of an IssuerAndSubject:
          </t>
          <sourcecode markers="false" pn="section-3.3.3-2">
issuerAndSubject ::= SEQUENCE {
    issuer     Name,
    subject    Name
    }
</sourcecode>
          <t indent="0" pn="section-3.3.3-3">
The issuer is set to the subjectName of the CA (in other words, the intended
issuerName of the certificate that's being requested).  The subject is set to
the subjectName used when requesting the certificate.
          </t>
          <t indent="0" pn="section-3.3.3-4">
Note that both of these fields are redundant; the CA is identified by the
recipientInfo in the pkcsPKIEnvelope (or in most cases, simply by the server
that the message is being sent to), and the client/transaction being polled is
identified by the transactionID.  Both of these fields can be processed by the
CA without going through the cryptographically expensive process of unwrapping
and processing the issuerAndSubject.  For this reason, implementations <bcp14>SHOULD</bcp14>
assume that the polling operation will be controlled by the recipientInfo and
transactionID rather than the contents of the messageData.  In addition, the
message must contain the authenticatedAttributes specified in <xref target="signed-attrs" format="default" sectionFormat="of" derivedContent="Section 3.2.1"/>.

          </t>
        </section>
        <section anchor="GetCertCRL" numbered="true" toc="include" removeInRFC="false" pn="section-3.3.4">
          <name slugifiedName="name-getcert-and-getcrl">GetCert and GetCRL</name>
          <t indent="0" pn="section-3.3.4-1">

The messageData for these types consist of an IssuerAndSerialNumber, as defined
in CMS, that uniquely identifies the certificate being requested, either the
certificate itself for GetCert or its revocation status via a CRL for GetCRL.
In addition, the message must contain the authenticatedAttributes specified
in <xref target="signed-attrs" format="default" sectionFormat="of" derivedContent="Section 3.2.1"/>.

          </t>
          <t indent="0" pn="section-3.3.4-2">

These message types, while included here for completeness, apply unnecessary
cryptography and messaging overhead to the simple task of transferring a
certificate or CRL (see <xref target="security-unnecessary" format="default" sectionFormat="of" derivedContent="Section 7.8"/>).
Implementations <bcp14>SHOULD</bcp14> prefer
<xref target="RFC4387" format="default" sectionFormat="of" derivedContent="RFC4387">HTTP certificate-store access</xref> or LDAP
over the use of these messages.

          </t>
        </section>
      </section>
      <section anchor="certs-only" numbered="true" toc="include" removeInRFC="false" pn="section-3.4">
        <name slugifiedName="name-degenerate-certificates-onl">Degenerate certificates-only CMS SignedData</name>
        <t indent="0" pn="section-3.4-1">
CMS includes a degenerate case of the SignedData content type in which there
are no signers.  The use of such a degenerate case is to disseminate
certificates and CRLs.  For SCEP, the content field of the ContentInfo value of
a degenerate certificates-only SignedData <bcp14>MUST</bcp14> be omitted.  When carrying
certificates, the certificates are included in the certificates field of the
SignedData.  When carrying a CRL, the CRL is included in the crls field of
the SignedData.
        </t>
      </section>
      <section anchor="CA-caps" numbered="true" toc="include" removeInRFC="false" pn="section-3.5">
        <name slugifiedName="name-ca-capabilities">CA Capabilities</name>
        <t indent="0" pn="section-3.5-1">

In order to provide support for future enhancements to the protocol, CAs <bcp14>MUST</bcp14>
implement the GetCACaps message to allow clients to query which functionality
is available from the CA.

        </t>
        <section anchor="CA-caps-HTTP" numbered="true" toc="include" removeInRFC="false" pn="section-3.5.1">
          <name slugifiedName="name-getcacaps-http-message-form">GetCACaps HTTP Message Format</name>
          <t indent="0" pn="section-3.5.1-1">This message requests capabilities from a CA, with the
	  format as described in <xref target="HTTP-GET-POST" format="default" sectionFormat="of" derivedContent="Section 4.1"/>:</t>
          <sourcecode type="" markers="false" pn="section-3.5.1-2">
"GET" SP SCEPPATH "?operation=GetCACaps" SP HTTP-version CRLF
</sourcecode>
        </section>
        <section anchor="CA-caps-resp" numbered="true" toc="include" removeInRFC="false" pn="section-3.5.2">
          <name slugifiedName="name-ca-capabilities-response-fo">CA Capabilities Response Format</name>
          <t indent="0" pn="section-3.5.2-1">The response for a GetCACaps message is a list of CA
					  capabilities, in plain text and in any order, separated
					  by &lt;CR&gt;&lt;LF&gt; or &lt;LF&gt; characters.  This
					  specification defines the following keywords (quotation
					  marks are not sent):</t>
          <table align="left" anchor="keywords" pn="table-7">
            <name slugifiedName="name-getcacaps-response-keywords">GetCACaps Response Keywords</name>
            <thead>
              <tr>
                <th align="left" colspan="1" rowspan="1">Keyword</th>
                <th align="left" colspan="1" rowspan="1">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left" colspan="1" rowspan="1">AES</td>
                <td align="left" colspan="1" rowspan="1">CA supports the AES128-CBC encryption
			   algorithm.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">DES3</td>
                <td align="left" colspan="1" rowspan="1">CA supports the triple DES-CBC encryption
			   algorithm.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">GetNextCACert</td>
                <td align="left" colspan="1" rowspan="1">CA supports the GetNextCACert
				message.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">POSTPKIOperation</td>
                <td align="left" colspan="1" rowspan="1">CA supports PKIOPeration messages sent
			   via HTTP POST.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">Renewal</td>
                <td align="left" colspan="1" rowspan="1">CA supports the Renewal CA operation.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">SHA-1</td>
                <td align="left" colspan="1" rowspan="1">CA supports the SHA-1 hashing algorithm.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">SHA-256</td>
                <td align="left" colspan="1" rowspan="1">CA supports the SHA-256 hashing algorithm.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">SHA-512</td>
                <td align="left" colspan="1" rowspan="1">CA supports the SHA-512 hashing algorithm.</td>
              </tr>
              <tr>
                <td align="left" colspan="1" rowspan="1">SCEPStandard</td>
                <td align="left" colspan="1" rowspan="1">CA supports all mandatory-to-implement
			sections of the SCEP standard.  This keyword implies "AES",
			"POSTPKIOperation", and "SHA-256", as well as the provisions of
			<xref target="MTI" format="default" sectionFormat="of" derivedContent="Section 2.9"/>.</td>
              </tr>
            </tbody>
          </table>
          <t indent="0" pn="section-3.5.2-3">

<xref target="keywords" format="default" sectionFormat="of" derivedContent="Table 7"/> lists all of the keywords that are defined in this
specification.  A CA <bcp14>MAY</bcp14> provide additional keywords advertising further
capabilities and functionality.  A client <bcp14>MUST</bcp14> be able to accept and ignore
any unknown keywords that might be sent by a CA.
          </t>
          <t indent="0" pn="section-3.5.2-4">
The CA <bcp14>MUST</bcp14> use the text case specified here, but clients
<bcp14>SHOULD</bcp14> ignore the text case when processing this message. 
Clients <bcp14>MUST</bcp14> accept the standard
HTTP-style text delimited by &lt;CR&gt;&lt;LF&gt; as well as the
text delimited by &lt;LF&gt; specified in an earlier draft version of this
specification.
          </t>
          <t indent="0" pn="section-3.5.2-5">
The client <bcp14>SHOULD</bcp14> use SHA-256 in preference to SHA-1 hashing and AES128-CBC in
preference to triple DES-CBC if they are supported by the CA.  Although the
CMS format allows any form of  AES and SHA-2 to be specified, in the interests
of interoperability the de facto universal standards of AES128-CBC and SHA-256
<bcp14>SHOULD</bcp14> be used.
          </t>
          <t indent="0" pn="section-3.5.2-6">
Announcing some of these capabilities individually is redundant, since they're
required as mandatory-to-implement functionality (see <xref target="MTI" format="default" sectionFormat="of" derivedContent="Section 2.9"/>)
whose presence as a whole is signalled by the "SCEPStandard" capability. However,
it may be useful to announce them in order to deal with older implementations
that would otherwise default to obsolete, insecure algorithms and mechanisms.

          </t>
          <t indent="0" pn="section-3.5.2-7">

If the CA supports none of the above capabilities, it <bcp14>SHOULD</bcp14> return an empty
message.  A CA <bcp14>MAY</bcp14> simply return an HTTP error.  A client that receives an
empty message or an HTTP error <bcp14>SHOULD</bcp14> interpret the response as if none of the
capabilities listed are supported by the CA.

          </t>
          <t indent="0" pn="section-3.5.2-8">

Note that at least one widely deployed server implementation supports several
of the above operations but doesn't support the GetCACaps message to indicate
that it supports them, and it will close the connection if sent a GetCACaps
message.  This means that the equivalent of GetCACaps must be performed
through server fingerprinting, which can be done using the ID string
"Microsoft-IIS".  Newer versions of the same server, if sent a SCEP request
using AES and SHA-2, will respond with an invalid response that can't be
decrypted, requiring the use of 3DES and SHA-1 in order to obtain a response
that can be processed, even if AES and/or SHA-2 are allegedly supported.  In
addition, the server will generate CA certificates that only have one, but not
both, of the keyEncipherment and digitalSignature keyUsage flags set,
requiring that the client ignore the keyUsage flags in order to use the
certificates for SCEP.

          </t>
          <t indent="0" pn="section-3.5.2-9">

The Content-type of the reply <bcp14>SHOULD</bcp14> be "text/plain".  Clients
<bcp14>SHOULD</bcp14> ignore
the Content-type, as older implementations of SCEP may send various
Content-types.
          </t>
          <t indent="0" pn="section-3.5.2-10">Example:</t>
          <sourcecode markers="false" pn="section-3.5.2-11">
GET /cgi-bin/pkiclient.exe?operation=GetCACaps HTTP/1.1
</sourcecode>
          <t indent="0" pn="section-3.5.2-12">might return:</t>
          <sourcecode markers="false" pn="section-3.5.2-13">
AES
GetNextCACert
POSTPKIOperation
SCEPStandard
SHA-256
</sourcecode>
          <t indent="0" pn="section-3.5.2-14">

This means that the CA supports modern crypto algorithms, and the GetNextCACert
message allows PKIOperation messages (PKCSReq/RenewalReq, GetCert, CertPoll,
...) to be sent using HTTP POST and is compliant with the final version of
the SCEP standard.

          </t>
        </section>
      </section>
    </section>
    <section anchor="SCEP-trans" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-scep-transactions">SCEP Transactions</name>
      <t indent="0" pn="section-4-1">

This section describes the SCEP Transactions and their
<xref target="RFC7230" format="default" sectionFormat="of" derivedContent="RFC7230">HTTP</xref> transport mechanism.

      </t>
      <t indent="0" pn="section-4-2">

Note that SCEP doesn't follow best current practices on usage of HTTP.  In
particular, it recommends ignoring some media types and hard-codes specific URI
paths.  Guidance on the appropriate application of HTTP in these circumstances
may be found in <xref target="I-D.ietf-httpbis-bcp56bis" format="default" sectionFormat="of" derivedContent="HTTP"/>.

      </t>
      <section anchor="HTTP-GET-POST" numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-http-post-and-get-message-f">HTTP POST and GET Message Formats</name>
        <t indent="0" pn="section-4.1-1">

SCEP uses the HTTP POST and GET methods <xref target="RFC7230" format="default" sectionFormat="of" derivedContent="RFC7230"/> to
exchange information with the CA.  The following defines the ABNF syntax of
HTTP POST and GET methods sent from a client to a CA:

        </t>
        <sourcecode type="abnf" markers="false" pn="section-4.1-2">
POSTREQUEST = "POST" SP SCEPPATH "?operation=" OPERATION
              SP HTTP-version CRLF

GETREQUEST = "GET" SP SCEPPATH "?operation=" OPERATION
             "&amp;message=" MESSAGE SP HTTP-version CRLF
</sourcecode>
        <t indent="0" pn="section-4.1-3">
where:

        </t>
        <ul spacing="compact" bare="false" empty="false" indent="3" pn="section-4.1-4">
          <li pn="section-4.1-4.1">SCEPPATH is the HTTP URL path for accessing the CA. Clients
		  <bcp14>SHOULD</bcp14> set SCEPPATH to the fixed string "/cgi-bin/pkiclient.exe"
		  unless directed to do otherwise by the CA.</li>
          <li pn="section-4.1-4.2">OPERATION depends on the SCEP transaction and is defined in the
		  following sections.</li>
          <li pn="section-4.1-4.3">HTTP-version is the HTTP version string, which is "HTTP/1.1" for
		  <xref target="RFC7230" format="default" sectionFormat="of" derivedContent="RFC7230"/>.</li>
          <li pn="section-4.1-4.4">SP and CRLF are space and carriage return/linefeed, as defined in
		  <xref target="RFC5234" format="default" sectionFormat="of" derivedContent="RFC5234"/>.</li>
        </ul>
        <t indent="0" pn="section-4.1-5">

The CA will typically ignore SCEPPATH, since it's unlikely to be issuing
certificates via a web server.  Clients <bcp14>SHOULD</bcp14> set SCEPPATH to the fixed
string "/cgi-bin/pkiclient.exe" unless directed to do otherwise by the CA.
The CA <bcp14>SHOULD</bcp14> ignore the SCEPPATH unless its precise format is critical to the
CA's operation.

        </t>
        <t indent="0" pn="section-4.1-6">
Early SCEP drafts performed all communications via GET messages, including
non-idempotent ones that should have been sent via POST messages; see
<xref target="I-D.ietf-httpbis-bcp56bis" format="default" sectionFormat="of" derivedContent="HTTP"/> for details.  This has caused problems because of
the way that the (supposedly) idempotent GET interacts with caches and
proxies, and because the extremely large GET requests created by encoding CMS
messages may be truncated in transit.  These issues are typically not visible
when testing on a LAN, but crop up during deployment over WANs.  If the remote
CA supports POST, the CMS-encoded SCEP messages <bcp14>MUST</bcp14> be sent via HTTP POST
instead of HTTP GET.  This applies to any SCEP message except GetCACert,
GetNextCACert, and GetCACaps and avoids the need for base64 and URL encoding
that's required for GET messaging.  The client can verify that the CA supports
SCEP messages via POST by looking for the "SCEPStandard" or "POSTPKIOperation"
capability (see <xref target="CA-caps-resp" format="default" sectionFormat="of" derivedContent="Section 3.5.2"/>).

        </t>
        <t indent="0" pn="section-4.1-7">
If a client or CA uses HTTP GET and encounters HTTP-related problems such as
messages being truncated, seeing errors such as HTTP 414 ("Request-URI too
long"), or simply having the message not sent/received at all when standard
requests to the server (for example, via a web browser) work, then this is a
symptom of the problematic use of HTTP GET.  The solution to this problem is
to update the implementation to use HTTP POST instead.  In addition, when using
GET, it's recommended to test the implementation from as many different network
locations as possible to determine whether the use of GET will cause problems
with communications.

        </t>
        <t indent="0" pn="section-4.1-8">

When using GET messages to communicate binary data, base64 encoding as
specified in <xref target="RFC4648" sectionFormat="of" section="4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc4648#section-4" derivedContent="RFC4648"/>
          <bcp14>MUST</bcp14> be used.  The base64-encoded data is distinct from
"base64url" and may contain URI reserved
characters; thus, it <bcp14>MUST</bcp14> be escaped as specified in <xref target="RFC3986" format="default" sectionFormat="of" derivedContent="RFC3986"/> in addition to being base64 encoded.
Finally, the encoded data is inserted into
the MESSAGE portion of the HTTP GET request.

        </t>
      </section>
      <section anchor="GetCACert" numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-get-ca-certificate">Get CA Certificate</name>
        <t indent="0" pn="section-4.2-1">

To get the CA certificate(s), the client sends a GetCACert message to the CA.
The OPERATION <bcp14>MUST</bcp14> be set to "GetCACert".  There is no request data associated
with this message.

        </t>
        <section anchor="GetCACert-resp" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.1">
          <name slugifiedName="name-get-ca-certificate-response">Get CA Certificate Response Message Format</name>
          <t indent="0" pn="section-4.2.1-1">

The response for GetCACert is different between the case where the CA directly
communicates with the client during the enrolment and the case where an
intermediate CA exists and the client communicates with this CA during the
enrolment.

          </t>
          <section anchor="GetCACert-resp-format" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.1.1">
            <name slugifiedName="name-ca-certificate-response-mes">CA Certificate Response Message Format</name>
            <t indent="0" pn="section-4.2.1.1-1">

If the CA does not have any intermediate CA certificates, the response
consists of a single X.509 CA certificate.  The response will have a
Content-Type of "application/x-x509-ca-cert".

            </t>
            <sourcecode markers="false" pn="section-4.2.1.1-2">
"Content-Type: application/x-x509-ca-cert"

&lt;binary X.509&gt;
</sourcecode>
          </section>
          <section anchor="GetCACertChain-resp-format" numbered="true" toc="include" removeInRFC="false" pn="section-4.2.1.2">
            <name slugifiedName="name-ca-certificate-chain-respon">CA Certificate Chain Response Message Format</name>
            <t indent="0" pn="section-4.2.1.2-1">
If the CA has intermediate CA certificates, the response consists of a
degenerate certificates-only CMS SignedData message (<xref target="certs-only" format="default" sectionFormat="of" derivedContent="Section 3.4"/>) containing the certificates, with the intermediate CA
certificate(s) as the leaf certificate(s).  The response will have a
Content-Type of "application/x-x509-ca-ra-cert".  Note that this designation
is used for historical reasons due to its use in older versions of this
specification -- no special meaning should be attached to the label.
            </t>
            <sourcecode markers="false" pn="section-4.2.1.2-2">
"Content-Type: application/x-x509-ca-ra-cert"

&lt;binary CMS&gt;
</sourcecode>
          </section>
        </section>
      </section>
      <section anchor="cert-enrolment" numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-certificate-enrolment-renewa">Certificate Enrolment/Renewal</name>
        <t indent="0" pn="section-4.3-1">
A PKCSReq/RenewalReq (<xref target="PKCSReq" format="default" sectionFormat="of" derivedContent="Section 3.3.1"/>) message is used to perform a
certificate enrolment or renewal transaction.  The OPERATION <bcp14>MUST</bcp14> be set to
"PKIOperation".  Note that when used with HTTP POST, the only OPERATION
possible is "PKIOperation", so many CAs don't check this value or even notice
its absence.  When implemented using HTTP POST, the message is sent with a
Content-Type of "application/x-pki-message" and might look as follows:
        </t>
        <sourcecode markers="false" pn="section-4.3-2">
POST /cgi-bin/pkiclient.exe?operation=PKIOperation HTTP/1.1
Content-Length: &lt;length of data&gt;
Content-Type: application/x-pki-message

&lt;binary CMS data&gt;
</sourcecode>
        <t indent="0" pn="section-4.3-3">
	  When implemented using HTTP GET, this might look as follows:
        </t>
        <sourcecode markers="false" pn="section-4.3-4">
GET /cgi-bin/pkiclient.exe?operation=PKIOperation&amp; \
message=MIAGCSqGSIb3DQEHA6CAMIACAQAxgDCBzAIBADB2MG \
IxETAPBgNVBAcTCE......AAAAAA== HTTP/1.1
</sourcecode>
        <section anchor="cert-enrolment-resp" numbered="true" toc="include" removeInRFC="false" pn="section-4.3.1">
          <name slugifiedName="name-certificate-enrolment-renewal">Certificate Enrolment/Renewal Response Message</name>
          <t indent="0" pn="section-4.3.1-1">

If the request is granted, a CertRep SUCCESS message
(<xref target="CertRep-success" format="default" sectionFormat="of" derivedContent="Section 3.3.2.1"/>) is returned.  If the request is rejected, a
CertRep FAILURE message (<xref target="CertRep-failure" format="default" sectionFormat="of" derivedContent="Section 3.3.2.2"/>) is returned.  If
the CA is configured to manually authenticate the client, a CertRep PENDING
message (<xref target="CertRep-pending" format="default" sectionFormat="of" derivedContent="Section 3.3.2.3"/>) <bcp14>MAY</bcp14> be returned.  The CA <bcp14>MAY</bcp14> return
a PENDING for other reasons.

          </t>
          <t indent="0" pn="section-4.3.1-2">
The response will have a Content-Type of "application/x-pki-message".
          </t>
          <sourcecode markers="false" pn="section-4.3.1-3">
"Content-Type: application/x-pki-message"

&lt;binary CertRep message&gt;
</sourcecode>
        </section>
      </section>
      <section anchor="poll-resp" numbered="true" toc="include" removeInRFC="false" pn="section-4.4">
        <name slugifiedName="name-poll-for-client-initial-cer">Poll for Client Initial Certificate</name>
        <t indent="0" pn="section-4.4-1">

When the client receives a CertRep message with pkiStatus set to PENDING, it
will enter the polling state by periodically sending CertPoll messages to the
CA until either the request is granted and the certificate is sent back or the
request is rejected or some preconfigured time limit for polling or maximum
number of polls is exceeded.  The OPERATION <bcp14>MUST</bcp14> be set to "PKIOperation".

        </t>
        <t indent="0" pn="section-4.4-2">

CertPoll messages exchanged during the polling period <bcp14>MUST</bcp14> carry the same
transactionID attribute as the previous PKCSReq/RenewalReq.  A CA receiving a
CertPoll for which it does not have a matching PKCSReq/RenewalReq <bcp14>MUST</bcp14> reject
this request.

        </t>
        <t indent="0" pn="section-4.4-3">

Since at this time the certificate has not been issued, the client can only
use its own subject name (which was contained in the original PKCS# 10 sent
via PKCSReq/RenewalReq) to identify the polled certificate request (but see
the note on identification during polling in <xref target="CertPoll" format="default" sectionFormat="of" derivedContent="Section 3.3.3"/>).  In
theory, there can be multiple outstanding requests from one client (for
example, if different keys and different key usages were used to request
multiple certificates), so the transactionID must also be included to
disambiguate between multiple requests.  In practice, however, the client <bcp14>SHOULD NOT</bcp14> have multiple requests outstanding at any one time, since this tends to
confuse some CAs.

        </t>
        <section anchor="poll-resp-format" numbered="true" toc="include" removeInRFC="false" pn="section-4.4.1">
          <name slugifiedName="name-polling-response-message-fo">Polling Response Message Format</name>
          <t indent="0" pn="section-4.4.1-1">

The response messages for CertPoll are the same as in <xref target="cert-enrolment-resp" format="default" sectionFormat="of" derivedContent="Section 4.3.1"/>.

          </t>
        </section>
      </section>
      <section anchor="cert-access" numbered="true" toc="include" removeInRFC="false" pn="section-4.5">
        <name slugifiedName="name-certificate-access-2">Certificate Access</name>
        <t indent="0" pn="section-4.5-1">

A client can query an issued certificate from the SCEP CA, as long as the
client knows the issuer name and the issuer-assigned certificate serial
number.

        </t>
        <t indent="0" pn="section-4.5-2">

This transaction consists of one GetCert (<xref target="GetCertCRL" format="default" sectionFormat="of" derivedContent="Section 3.3.4"/>) message
sent to the CA by a client and one CertRep (<xref target="CertRep" format="default" sectionFormat="of" derivedContent="Section 3.3.2"/>) message
sent back from the CA.  The OPERATION <bcp14>MUST</bcp14> be set to "PKIOperation".

        </t>
        <section anchor="cert-access-resp" numbered="true" toc="include" removeInRFC="false" pn="section-4.5.1">
          <name slugifiedName="name-certificate-access-response">Certificate Access Response Message Format</name>
          <t indent="0" pn="section-4.5.1-1">

In this case, the CertRep from the CA is same as in <xref target="cert-enrolment-resp" format="default" sectionFormat="of" derivedContent="Section 4.3.1"/>, except that the CA will either grant the
request (SUCCESS) or reject it (FAILURE).

          </t>
        </section>
      </section>
      <section anchor="CRL-access" numbered="true" toc="include" removeInRFC="false" pn="section-4.6">
        <name slugifiedName="name-crl-access-2">CRL Access</name>
        <t indent="0" pn="section-4.6-1">

Clients can request a CRL from the SCEP CA, as described in <xref target="overview-CRL-access" format="default" sectionFormat="of" derivedContent="Section 2.7"/>.  The OPERATION
<bcp14>MUST</bcp14> be set to "PKIOperation".

        </t>
        <section anchor="CRL-access-resp" numbered="true" toc="include" removeInRFC="false" pn="section-4.6.1">
          <name slugifiedName="name-crl-access-response-message">CRL Access Response Message Format</name>
          <t indent="0" pn="section-4.6.1-1">

The CRL is sent back to the client in a CertRep (<xref target="CertRep" format="default" sectionFormat="of" derivedContent="Section 3.3.2"/>)
message.  The information portion of this message is a degenerate
certificates-only SignedData (<xref target="certs-only" format="default" sectionFormat="of" derivedContent="Section 3.4"/>) that contains only
the most recent CRL in the crls field of the SignedData.

          </t>
        </section>
      </section>
      <section anchor="get-next-CA" numbered="true" toc="include" removeInRFC="false" pn="section-4.7">
        <name slugifiedName="name-get-next-certificate-author">Get Next Certificate Authority Certificate</name>
        <t indent="0" pn="section-4.7-1">

When a CA certificate is about to expire, clients need to retrieve the CA's
next CA certificate (i.e., the rollover certificate). This is done via the
GetNextCACert message.  The OPERATION <bcp14>MUST</bcp14> be set to "GetNextCACert".  There
is no request data associated with this message.

        </t>
        <section anchor="get-next-CA-format" numbered="true" toc="include" removeInRFC="false" pn="section-4.7.1">
          <name slugifiedName="name-get-next-ca-response-messag">Get Next CA Response Message Format</name>
          <t indent="0" pn="section-4.7.1-1">

The response consists of a SignedData CMS message, signed by the current CA
signing key.  Clients <bcp14>MUST</bcp14> validate the signature on the message before
trusting any of its contents.  The response will have a Content-Type of
"application/x-x509-next-ca-cert".
          </t>
          <sourcecode markers="false" pn="section-4.7.1-2">
"Content-Type: application/x-x509-next-ca-cert"

&lt;binary CMS&gt;
</sourcecode>
          <t indent="0" pn="section-4.7.1-3">

The content of the SignedData message is a degenerate certificates-only
SignedData message (<xref target="certs-only" format="default" sectionFormat="of" derivedContent="Section 3.4"/>) containing the new CA
certificate(s) to be used when the current CA certificate expires.

          </t>
        </section>
      </section>
    </section>
    <section anchor="state-trans" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-scep-transaction-examples">SCEP Transaction Examples</name>
      <t indent="0" pn="section-5-1">

The following section gives several examples of client-to-CA transactions.
Client actions are indicated in the left column, CA actions are indicated in
the right column, and the transactionID is given in parentheses. For ease of
reading, small integer values have been used; in practice, full transaction IDs
would be used.  The first transaction, for example, would read like this:

      </t>
      <blockquote pn="section-5-2">
Client Sends PKCSReq message with transactionID 1 to the CA.  The CA signs
the certificate and constructs a CertRep Message containing the signed
certificate with a transaction ID 1.  The client receives the message and
installs the certificate locally.
      </blockquote>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-successful-transactions">Successful Transactions</name>
        <figure align="left" suppress-title="false" pn="figure-7">
          <name slugifiedName="name-successful-enrolment-case-a">Successful Enrolment Case: Automatic Processing</name>
          <artwork name="" type="" align="left" alt="" pn="section-5.1-1.1">
PKCSReq (1)             ----------&gt; CA issues certificate
                        &lt;---------- CertRep (1) SUCCESS
Client installs certificate
		  </artwork>
        </figure>
        <figure align="left" suppress-title="false" pn="figure-8">
          <name slugifiedName="name-successful-enrolment-case-m">Successful Enrolment Case: Manual Authentication Required</name>
          <artwork name="" type="" align="left" alt="" pn="section-5.1-2.1">
PKCSReq (2)             ----------&gt; Cert request goes into queue
                        &lt;---------- CertRep (2) PENDING
CertPoll (2)            ----------&gt; Still pending
                        &lt;---------- CertRep (2) PENDING
CertPoll (2)            ----------&gt; CA issues certificate
                        &lt;---------- CertRep (2) SUCCESS
Client installs certificate
		  </artwork>
        </figure>
        <figure align="left" suppress-title="false" pn="figure-9">
          <name slugifiedName="name-ca-certificate-rollover-cas">CA Certificate Rollover Case</name>
          <artwork name="" type="" align="left" alt="" pn="section-5.1-3.1">
GetNextCACert         ----------&gt;
                      &lt;---------- New CA certificate

PKCSReq*              ----------&gt; CA issues certificate with
                                  new key
                      &lt;---------- CertRep SUCCESS
Client stores certificate
for installation when
existing certificate expires.
		  </artwork>
        </figure>
        <t indent="0" pn="section-5.1-4">* Enveloped for the new CA certificate.  The CA will use
					   the envelope to determine which key to use to issue the
					   client certificate.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-transactions-with-errors">Transactions with Errors</name>
        <t indent="0" pn="section-5.2-1">

In the case of polled transactions that aren't completed automatically, there
are two potential options for dealing with a transaction that's interrupted
due to network or software/hardware issues.  The first is for the client to
preserve its transaction state and resume the CertPoll polling when normal
service is restored. The second is for the client to begin a new transaction
by sending a new PKCSReq/RenewalReq, rather than continuing the previous
CertPoll.  Both options have their own advantages and disadvantages.

        </t>
        <t indent="0" pn="section-5.2-2">

The CertPoll continuation requires that the client maintain its transaction
state for the time when it resumes polling.  This is relatively simple if the
problem is a brief network outage, but less simple when the problem is a
client crash and restart.  In addition, the CA may treat a lost network
connection as the end of a transaction, so that a new connection followed by a
CertPoll will be treated as an error.

        </t>
        <t indent="0" pn="section-5.2-3">

The PKCSReq/RenewalReq continuation doesn't require any state to be maintained,
since it's a new transaction. However, it may cause problems on the CA side if
the certificate was successfully issued but the client never received it,
since the resumed transaction attempt will appear to be a request for a
duplicate certificate (see <xref target="security-no-conf" format="default" sectionFormat="of" derivedContent="Section 7.4"/> for more on why
this is a problem).  In this case, the CA may refuse the transaction or
require manual intervention to remove/revoke the previous certificate before
the client can request another one.

        </t>
        <t indent="0" pn="section-5.2-4">

Since the new-transaction resume is more robust in the presence of errors and
doesn't require special-case handling by either the client or CA, clients
<bcp14>SHOULD</bcp14> use the new-transaction option in preference to the resumed-CertPoll
option to recover from errors.

        </t>
        <t indent="0" pn="section-5.2-5">Resync Case 1: Client resyncs via new PKCSReq
					(recommended):</t>
        <figure align="left" suppress-title="false" pn="figure-10">
          <name slugifiedName="name-resync-case-1">Resync Case 1</name>
          <artwork name="" type="" align="left" alt="" pn="section-5.2-6.1">
PKCSReq (3)           ----------&gt; Cert request goes into queue
                      &lt;---------- CertRep (3) PENDING
CertPoll (3)          ----------&gt; Still pending
                        X-------- CertRep(3) PENDING
(Network outage)
(Client reconnects)
PKCSReq (4)           ----------&gt;
                      &lt;---------- CertRep (4) PENDING
etc...
		  </artwork>
        </figure>
        <t indent="0" pn="section-5.2-7">Resync Case 2: Client resyncs via resumed CertPoll after a
					network outage (not recommended; use PKCSReq to
					resync):</t>
        <figure align="left" suppress-title="false" pn="figure-11">
          <name slugifiedName="name-resync-case-2">Resync Case 2</name>
          <artwork name="" type="" align="left" alt="" pn="section-5.2-8.1">
PKCSReq (5)           ----------&gt; Cert request goes into queue
                      &lt;---------- CertRep (5) PENDING
CertPoll (5)          ----------&gt; Still pending
                        X-------- CertRep(5) PENDING
(Network outage)
(Client reconnects)
CertPoll (5)          ----------&gt; CA issues certificate
                      &lt;---------- CertRep (5) SUCCESS
Client installs certificate
		  </artwork>
        </figure>
        <t indent="0" pn="section-5.2-9">Resync Case 3: Special-case variation of Case 2 where the
					CertRep SUCCESS rather than the CertRep PENDING is
					lost (recommended):</t>
        <figure align="left" suppress-title="false" pn="figure-12">
          <name slugifiedName="name-resync-case-3">Resync Case 3</name>
          <artwork name="" type="" align="left" alt="" pn="section-5.2-10.1">
PKCSReq (6)           ----------&gt; Cert request goes into queue
                      &lt;---------- CertRep (6) PENDING
CertPoll (6)          ----------&gt; Still pending
                      &lt;---------- CertRep (6) PENDING
CertPoll (6)          ----------&gt; CA issues certificate
                        X-------- CertRep(6) SUCCESS
(Network outage)
(Client reconnects)
PKCSReq (7)           ----------&gt; There is already a valid
                                  certificate with this
				  Distinguished Name (DN).
                      &lt;---------- CertRep (7) FAILURE
                                  Admin revokes certificate
PKCSReq (8)           ----------&gt; CA issues new certificate
                      &lt;---------- CertRep (8) SUCCESS
Client installs certificate
		  </artwork>
        </figure>
        <t indent="0" pn="section-5.2-11">Resync Case 4: Special-case variation of Case 1 where the
					CertRep SUCCESS rather than the CertRep PENDING is lost
					(not recommended; use PKCSReq to resync):</t>
        <figure align="left" suppress-title="false" pn="figure-13">
          <name slugifiedName="name-resync-case-4">Resync Case 4</name>
          <artwork name="" type="" align="left" alt="" pn="section-5.2-12.1">
PKCSReq (9)           ----------&gt; Cert request goes into queue
                      &lt;---------- CertRep (9) PENDING
CertPoll (9)          ----------&gt; Still pending
                      &lt;---------- CertRep (9) PENDING
CertPoll (9)          ----------&gt; CA issues certificate
                        X-------- CertRep(9) SIGNED CERT
(Network outage)
(Client reconnects)
CertPoll (9)          ----------&gt; Certificate already issued
                      &lt;---------- CertRep (9) SUCCESS
Client installs certificate
		  </artwork>
        </figure>
        <t indent="0" pn="section-5.2-13">

As these examples indicate, resumption from an error via a resumed CertPoll is
tricky due to the state that needs to be held by both the client and/or the
CA.  A PKCSReq/RenewalReq resume is the easiest to implement, since it's
stateless and is identical for both polled and nonpolled transactions, whereas
a CertPoll resume treats the two differently. (A nonpolled transaction is
resumed with a PKCSReq/RenewalReq; a polled transaction is resumed with a
CertPoll.)  For this reason, error recovery <bcp14>SHOULD</bcp14> be handled via a new PKCSReq
rather than a resumed CertPoll.


        </t>
      </section>
    </section>
    <section anchor="iana" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-6-1">
An object identifier for an arc to assign SCEP Attribute Identifiers has been
assigned in the "SMI Security for PKIX" registry (1.3.6.1.5.5.7).  This object
identifer, Simple Certificate Enrollment Protocol Attributes, is denoted as
id-scep:
      </t>
      <sourcecode markers="false" pn="section-6-2">
id-scep OBJECT IDENTIFIER ::= { id-pkix 24 }
</sourcecode>
      <t indent="0" pn="section-6-3">
IANA created the "SMI Security for SCEP Attribute Identifiers" registry
(1.3.6.1.5.5.7.24) with the following entries with references to
this document:
      </t>
      <sourcecode markers="false" pn="section-6-4">
id-scep-failInfoText OBJECT IDENTIFIER ::= { id-scep 1 }
</sourcecode>
      <t indent="0" pn="section-6-5">
Entries in the registry are assigned according to the "Specification Required"
policy defined in <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.
      </t>
      <t indent="0" pn="section-6-6">
<xref target="messageType" format="default" sectionFormat="of" derivedContent="Section 3.2.1.2"/> describes an "SCEP Message Type" registry, and
<xref target="CA-caps" format="default" sectionFormat="of" derivedContent="Section 3.5"/> describes an "SCEP CA Capabilities"
registry; these registries are maintained by IANA and define a number of such
code-point identifiers. Entries in the registry are assigned according
to the "Specification Required" policy defined in <xref target="RFC8126" format="default" sectionFormat="of" derivedContent="RFC8126"/>.

      </t>
      <t indent="0" pn="section-6-7">
The "SCEP Message Types" registry has "Value", "Name", "Description", and
"Reference" columns.  The "Value" entry is a small positive integer; value
"0" is reserved.
      </t>
      <t indent="0" pn="section-6-8">
The "SCEP CA Capabilities" registry has "Keyword", "Description", and
"Reference" columns.  Although implementations <bcp14>SHOULD</bcp14> use the "SCEP CA Capabilities"
registry, SCEP is often employed in situations where this isn't possible.  In
this case, private-use CA capabilities may be specified using a unique prefix
such as an organisation identifier or domain name under the control of the
entity that defines the capability.  For example, the prefix would be
"Example.com-", and the complete capability would be
"Example.com-CapabilityName".
      </t>
      <t indent="0" pn="section-6-9">
IANA has registered four media types as defined in this document: 
      </t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-6-10">
        <li pn="section-6-10.1">application/x-x509-ca-cert</li>
        <li pn="section-6-10.2">application/x-x509-ca-ra-cert</li>
        <li pn="section-6-10.3">application/x-x509-next-ca-cert</li>
        <li pn="section-6-10.4">application/x-pki-message</li>
      </ul>
      <t indent="0" pn="section-6-11">
Note that these are grandfathered media types registered as per <xref target="RFC6838" sectionFormat="of" section="A" format="default" derivedLink="https://rfc-editor.org/rfc/rfc6838#appendix-A" derivedContent="RFC6838"/>.  Templates
for registrations are specified below.
      </t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-6.1">
        <name slugifiedName="name-registration-of-the-applica">Registration of the application/x-x509-ca-cert Media Type</name>
        <dl indent="3" newline="false" spacing="normal" pn="section-6.1-1">
          <dt pn="section-6.1-1.1">Type name:</dt>
          <dd pn="section-6.1-1.2">application</dd>
          <dt pn="section-6.1-1.3">Subtype name:</dt>
          <dd pn="section-6.1-1.4">x-x509-ca-cert</dd>
          <dt pn="section-6.1-1.5">Required parameters:</dt>
          <dd pn="section-6.1-1.6">none</dd>
          <dt pn="section-6.1-1.7">Optional parameters:</dt>
          <dd pn="section-6.1-1.8">none</dd>
          <dt pn="section-6.1-1.9">Encoding considerations:</dt>
          <dd pn="section-6.1-1.10">binary</dd>
          <dt pn="section-6.1-1.11">Security considerations:</dt>
          <dd pn="section-6.1-1.12">This media type contains a certificate; see the
Security Considerations section of <xref target="RFC5280" format="default" sectionFormat="of" derivedContent="RFC5280"/>. There is no executable content.</dd>
          <dt pn="section-6.1-1.13">Interoperability considerations:</dt>
          <dd pn="section-6.1-1.14">This is a grandfathered registration of an alias to application/pkix-cert
(basically a single DER-encoded Certification Authority certificate), which is
only used in SCEP.</dd>
          <dt pn="section-6.1-1.15">Published specification:</dt>
          <dd pn="section-6.1-1.16">RFC 8894</dd>
          <dt pn="section-6.1-1.17">Applications that use this media type:</dt>
          <dd pn="section-6.1-1.18">SCEP uses this media type when returning a CA certificate.</dd>
          <dt pn="section-6.1-1.19">Fragment identifier considerations:</dt>
          <dd pn="section-6.1-1.20">N/A</dd>
          <dt pn="section-6.1-1.21">Additional information:</dt>
          <dd pn="section-6.1-1.22">
            <t indent="0" pn="section-6.1-1.22.1"><br/></t>
            <dl indent="3" newline="false" spacing="normal" pn="section-6.1-1.22.2">
              <dt pn="section-6.1-1.22.2.1">Deprecated alias names for this type:</dt>
              <dd pn="section-6.1-1.22.2.2">N/A</dd>
              <dt pn="section-6.1-1.22.2.3">Magic number(s):</dt>
              <dd pn="section-6.1-1.22.2.4">none</dd>
              <dt pn="section-6.1-1.22.2.5">File extension(s):</dt>
              <dd pn="section-6.1-1.22.2.6">N/A</dd>
              <dt pn="section-6.1-1.22.2.7">Macintosh file type code(s):</dt>
              <dd pn="section-6.1-1.22.2.8">N/A</dd>
            </dl>
          </dd>
          <dt pn="section-6.1-1.23">Person and email address to contact for further information:</dt>
          <dd pn="section-6.1-1.24">See the Authors' Addresses section of RFC 8894.</dd>
          <dt pn="section-6.1-1.25">Intended usage:</dt>
          <dd pn="section-6.1-1.26">LIMITED USE</dd>
          <dt pn="section-6.1-1.27">Restrictions on usage:</dt>
          <dd pn="section-6.1-1.28">SCEP protocol</dd>
          <dt pn="section-6.1-1.29">Author:</dt>
          <dd pn="section-6.1-1.30">See the Authors' Addresses section of RFC 8894</dd>
          <dt pn="section-6.1-1.31">Change controller:</dt>
          <dd pn="section-6.1-1.32">IETF</dd>
          <dt pn="section-6.1-1.33">Provisional registration?</dt>
          <dd pn="section-6.1-1.34">No</dd>
        </dl>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-6.2">
        <name slugifiedName="name-registration-of-the-applicat">Registration of the application/x-x509-ca-ra-cert Media Type</name>
        <dl indent="3" newline="false" spacing="normal" pn="section-6.2-1">
          <dt pn="section-6.2-1.1">Type name:</dt>
          <dd pn="section-6.2-1.2">application</dd>
          <dt pn="section-6.2-1.3">Subtype name:</dt>
          <dd pn="section-6.2-1.4">x-x509-ca-ra-cert</dd>
          <dt pn="section-6.2-1.5">Required parameters:</dt>
          <dd pn="section-6.2-1.6">none</dd>
          <dt pn="section-6.2-1.7">Optional parameters:</dt>
          <dd pn="section-6.2-1.8">none</dd>
          <dt pn="section-6.2-1.9">Encoding considerations:</dt>
          <dd pn="section-6.2-1.10">binary</dd>
          <dt pn="section-6.2-1.11">Security considerations:</dt>
          <dd pn="section-6.2-1.12">This media type consists of a degenerate
certificates-only CMS SignedData message (<xref target="certs-only" format="default" sectionFormat="of" derivedContent="Section 3.4"/>) containing the certificates, with the intermediate CA
certificate(s) as the leaf certificate(s). There is no executable
content.</dd>
          <dt pn="section-6.2-1.13">Interoperability considerations:</dt>
          <dd pn="section-6.2-1.14">This is a grandfathered registration that is only used in SCEP.</dd>
          <dt pn="section-6.2-1.15">Published specification:</dt>
          <dd pn="section-6.2-1.16">RFC 8894</dd>
          <dt pn="section-6.2-1.17">Applications that use this media type:</dt>
          <dd pn="section-6.2-1.18">SCEP uses this media type when returning CA Certificate Chain
Response.</dd>
          <dt pn="section-6.2-1.19">Fragment identifier considerations:</dt>
          <dd pn="section-6.2-1.20">N/A</dd>
          <dt pn="section-6.2-1.21">Additional information:</dt>
          <dd pn="section-6.2-1.22">
            <t indent="0" pn="section-6.2-1.22.1"><br/></t>
            <dl indent="3" newline="false" spacing="normal" pn="section-6.2-1.22.2">
              <dt pn="section-6.2-1.22.2.1">Deprecated alias names for this type:</dt>
              <dd pn="section-6.2-1.22.2.2">N/A</dd>
              <dt pn="section-6.2-1.22.2.3">Magic number(s):</dt>
              <dd pn="section-6.2-1.22.2.4">none</dd>
              <dt pn="section-6.2-1.22.2.5">File extension(s):</dt>
              <dd pn="section-6.2-1.22.2.6">N/A</dd>
              <dt pn="section-6.2-1.22.2.7">Macintosh file type code(s):</dt>
              <dd pn="section-6.2-1.22.2.8">N/A</dd>
            </dl>
          </dd>
          <dt pn="section-6.2-1.23">Person and email address to contact for further information:</dt>
          <dd pn="section-6.2-1.24">See the Authors' Addresses section of RFC 8894.</dd>
          <dt pn="section-6.2-1.25">Intended usage:</dt>
          <dd pn="section-6.2-1.26">LIMITED USE</dd>
          <dt pn="section-6.2-1.27">Restrictions on usage:</dt>
          <dd pn="section-6.2-1.28">SCEP protocol</dd>
          <dt pn="section-6.2-1.29">Author:</dt>
          <dd pn="section-6.2-1.30">See the Authors' Addresses section of RFC 8894.</dd>
          <dt pn="section-6.2-1.31">Change controller:</dt>
          <dd pn="section-6.2-1.32">IETF</dd>
          <dt pn="section-6.2-1.33">Provisional registration?</dt>
          <dd pn="section-6.2-1.34">no</dd>
        </dl>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-6.3">
        <name slugifiedName="name-registration-of-the-applicati">Registration of the application/x-x509-next-ca-cert Media Type</name>
        <dl indent="3" newline="false" spacing="normal" pn="section-6.3-1">
          <dt pn="section-6.3-1.1">Type name:</dt>
          <dd pn="section-6.3-1.2">application</dd>
          <dt pn="section-6.3-1.3">Subtype name:</dt>
          <dd pn="section-6.3-1.4">x-x509-next-ca-cert</dd>
          <dt pn="section-6.3-1.5">Required parameters:</dt>
          <dd pn="section-6.3-1.6">none</dd>
          <dt pn="section-6.3-1.7">Optional parameters:</dt>
          <dd pn="section-6.3-1.8">none</dd>
          <dt pn="section-6.3-1.9">Encoding considerations:</dt>
          <dd pn="section-6.3-1.10">binary</dd>
          <dt pn="section-6.3-1.11">Security considerations:</dt>
          <dd pn="section-6.3-1.12">This media type consists of a SignedData CMS message, signed by the
current CA signing key. There is no executable content.</dd>
          <dt pn="section-6.3-1.13">Interoperability considerations:</dt>
          <dd pn="section-6.3-1.14">This is a grandfathered registration that is only used in SCEP.</dd>
          <dt pn="section-6.3-1.15">Published specification:</dt>
          <dd pn="section-6.3-1.16">RFC 8894</dd>
          <dt pn="section-6.3-1.17">Applications that use this media type:</dt>
          <dd pn="section-6.3-1.18">SCEP uses this media type when returning a Get Next CA response.</dd>
          <dt pn="section-6.3-1.19">Fragment identifier considerations:</dt>
          <dd pn="section-6.3-1.20">N/A</dd>
          <dt pn="section-6.3-1.21">Additional information:</dt>
          <dd pn="section-6.3-1.22">
            <t indent="0" pn="section-6.3-1.22.1"><br/></t>
            <dl indent="3" newline="false" spacing="normal" pn="section-6.3-1.22.2">
              <dt pn="section-6.3-1.22.2.1">Deprecated alias names for this type:</dt>
              <dd pn="section-6.3-1.22.2.2">N/A</dd>
              <dt pn="section-6.3-1.22.2.3">Magic number(s):</dt>
              <dd pn="section-6.3-1.22.2.4">none</dd>
              <dt pn="section-6.3-1.22.2.5">File extension(s):</dt>
              <dd pn="section-6.3-1.22.2.6">N/A</dd>
              <dt pn="section-6.3-1.22.2.7">Macintosh file type code(s):</dt>
              <dd pn="section-6.3-1.22.2.8">N/A</dd>
            </dl>
          </dd>
          <dt pn="section-6.3-1.23">Person and email address to contact for further information:</dt>
          <dd pn="section-6.3-1.24">See the Authors' Addresses section of RFC 8894.</dd>
          <dt pn="section-6.3-1.25">Intended usage:</dt>
          <dd pn="section-6.3-1.26">LIMITED USE </dd>
          <dt pn="section-6.3-1.27">Restrictions on usage:</dt>
          <dd pn="section-6.3-1.28">SCEP protocol</dd>
          <dt pn="section-6.3-1.29">Author:</dt>
          <dd pn="section-6.3-1.30">See the Authors' Addresses section of RFC 8894.</dd>
          <dt pn="section-6.3-1.31">Change controller:</dt>
          <dd pn="section-6.3-1.32">IETF</dd>
          <dt pn="section-6.3-1.33">Provisional registration?</dt>
          <dd pn="section-6.3-1.34">no</dd>
        </dl>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-6.4">
        <name slugifiedName="name-registration-of-the-applicatio">Registration of the application/x-pki-message Media Type</name>
        <dl indent="3" newline="false" spacing="normal" pn="section-6.4-1">
          <dt pn="section-6.4-1.1">Type name:</dt>
          <dd pn="section-6.4-1.2">application</dd>
          <dt pn="section-6.4-1.3">Subtype name:</dt>
          <dd pn="section-6.4-1.4">x-pki-message</dd>
          <dt pn="section-6.4-1.5">Required parameters:</dt>
          <dd pn="section-6.4-1.6">none</dd>
          <dt pn="section-6.4-1.7">Optional parameters:</dt>
          <dd pn="section-6.4-1.8">none</dd>
          <dt pn="section-6.4-1.9">Encoding considerations:</dt>
          <dd pn="section-6.4-1.10">binary</dd>
          <dt pn="section-6.4-1.11">Security considerations:</dt>
          <dd pn="section-6.4-1.12">This media type consists of a degenerate certificates-only CMS SignedData
message. There is no executable content.</dd>
          <dt pn="section-6.4-1.13">Interoperability considerations:</dt>
          <dd pn="section-6.4-1.14">This is a grandfathered registration that is only used in SCEP.</dd>
          <dt pn="section-6.4-1.15">Published specification:</dt>
          <dd pn="section-6.4-1.16">RFC 8894</dd>
          <dt pn="section-6.4-1.17">Applications that use this media type:</dt>
          <dd pn="section-6.4-1.18">SCEP uses this media type when returning a Certificate Enrolment/Renewal
Response.</dd>
          <dt pn="section-6.4-1.19">Fragment identifier considerations:</dt>
          <dd pn="section-6.4-1.20">N/A</dd>
          <dt pn="section-6.4-1.21">Additional information:</dt>
          <dd pn="section-6.4-1.22">
            <t indent="0" pn="section-6.4-1.22.1"><br/></t>
            <dl indent="3" newline="false" spacing="normal" pn="section-6.4-1.22.2">
              <dt pn="section-6.4-1.22.2.1">Deprecated alias names for this type:</dt>
              <dd pn="section-6.4-1.22.2.2">N/A</dd>
              <dt pn="section-6.4-1.22.2.3">Magic number(s):</dt>
              <dd pn="section-6.4-1.22.2.4">none</dd>
              <dt pn="section-6.4-1.22.2.5">File extension(s):</dt>
              <dd pn="section-6.4-1.22.2.6">N/A</dd>
              <dt pn="section-6.4-1.22.2.7">Macintosh file type code(s):</dt>
              <dd pn="section-6.4-1.22.2.8">N/A</dd>
            </dl>
          </dd>
          <dt pn="section-6.4-1.23">Person and email address to contact for further information:</dt>
          <dd pn="section-6.4-1.24">See the Authors' Addresses section of RFC 8894.</dd>
          <dt pn="section-6.4-1.25">Intended usage:</dt>
          <dd pn="section-6.4-1.26">LIMITED USE</dd>
          <dt pn="section-6.4-1.27">Restrictions on usage:</dt>
          <dd pn="section-6.4-1.28">SCEP protocol</dd>
          <dt pn="section-6.4-1.29">Author:</dt>
          <dd pn="section-6.4-1.30">See the Authors' Addresses section of RFC 8894.</dd>
          <dt pn="section-6.4-1.31">Change controller:</dt>
          <dd pn="section-6.4-1.32">IETF</dd>
          <dt pn="section-6.4-1.33">Provisional registration?</dt>
          <dd pn="section-6.4-1.34">no</dd>
        </dl>
      </section>
    </section>
    <section anchor="security" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-7-1">
The security goal of SCEP is that no adversary can subvert the public
key/identity binding from that intended.  An adversary is any entity other
than the client and the CA participating in the protocol.
      </t>
      <t indent="0" pn="section-7-2">
This goal is met through the use of CMS and PKCS #10 encryption and digital
signatures using authenticated public keys.  The CA's public key is
authenticated via out-of-band means such as the checking of the CA fingerprint,
and the SCEP client's public key is authenticated through manual or preshared
secret authentication.
      </t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-7.1">
        <name slugifiedName="name-general-security">General Security</name>
        <t indent="0" pn="section-7.1-1">
Common key-management considerations such as keeping private keys truly
private and using adequate lengths for symmetric and asymmetric keys must be
followed in order to maintain the security of this protocol.  This is
especially true for CA keys which, when compromised, compromise the security
of all relying parties.
        </t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-7.2">
        <name slugifiedName="name-use-of-the-ca-private-key">Use of the CA Private Key</name>
        <t indent="0" pn="section-7.2-1">
A CA private key is generally meant for, and usually flagged as, being
usable for certificate (and CRL) signing exclusively rather than data signing
or encryption.  The SCEP protocol, however, uses the CA private key to both sign
and optionally encrypt CMS transport messages.  This is generally considered
undesirable, as it widens the possibility of an implementation weakness and
provides an additional location where the private key must be used (and hence
is slightly more vulnerable to exposure) and where a side-channel attack might
be applied.
        </t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-7.3">
        <name slugifiedName="name-challengepassword-shared-se">ChallengePassword Shared Secret Value</name>
        <t indent="0" pn="section-7.3-1">
The security measures that should be applied to the challengePassword shared
secret depend on the manner in which SCEP is employed.  In the simplest case,
with SCEP used to provision devices with certificates in the manufacturing
facility, the physical security of the facility may be enough to protect the
certificate issue process with no additional measures explicitly required.  In
general, though, the security of the issue process depends on the security
employed around the use of the challengePassword shared secret.  While it's
not possible to enumerate every situation in which SCEP may be utilised, the
following security measures should be considered.
        </t>
        <ul spacing="compact" bare="false" empty="false" indent="3" pn="section-7.3-2">
          <li pn="section-7.3-2.1">
The challengePassword, despite its name, shouldn't be a conventional password
but a high-entropy shared-secret authentication string.  Using the base64
encoding of a keying value generated or exchanged as part of standard device
authentication protocols like the Extensible Authentication Protocol (EAP) or
DNP3 Secure Authentication (DNP3-SA) makes for a good
challengePassword.  The use of high-entropy shared secrets is particularly
important when the PasswordRecipientInfo option is used to encrypt SCEP
messages; see <xref target="message-processing" format="default" sectionFormat="of" derivedContent="Section 3.1"/>.
          </li>
          <li pn="section-7.3-2.2">
If feasible, the challengePassword should be a one-time value used to
authenticate the issue of a single certificate (subsequent certificate
requests will be authenticated by being signed with the initial certificate).
If the challengePassword is single use, then the arrival of subsequent requests
using the same challengePassword can then be used to indicate a security
breach.
          </li>
          <li pn="section-7.3-2.3">
The lifetime of a challengePassword can be limited, so that it can be used
during initial device provisioning but will have expired at a later date if an
attacker manages to compromise the challengePassword value -- for example, by
compromising the device that it's stored in.
          </li>
          <li pn="section-7.3-2.4">
The CA should take appropriate measures to protect the
challengePassword. Examples of possible measures include: physical security
measures; storing it as a salted iterated hash or equivalent memory-hard
function; storing it as a keyed MAC value if it's not being used for
encryption; and storing it in encrypted form if it is being used for encryption.
          </li>
        </ul>
      </section>
      <section anchor="security-no-conf" numbered="true" toc="include" removeInRFC="false" pn="section-7.4">
        <name slugifiedName="name-lack-of-certificate-issue-c">Lack of Certificate Issue Confirmation</name>
        <t indent="0" pn="section-7.4-1">
SCEP provides no confirmation that the issued certificate was successfully
received and processed by the client.  This means that if the CertRep message
is lost or can't be processed by the client, then the CA will consider the
certificate successfully issued while the client won't.  If this situation is
of concern, then the correct issuance of the certificate will need to be
verified by out-of-band means, for example, through the client sending a
message signed by the newly issued certificate to the CA.  This also provides
the proof of possession that's not present in the case of a renewal operation;
see <xref target="security-no-pop" format="default" sectionFormat="of" derivedContent="Section 7.6"/>.
        </t>
      </section>
      <section anchor="security-getcacaps" numbered="true" toc="include" removeInRFC="false" pn="section-7.5">
        <name slugifiedName="name-getcacaps-issues">GetCACaps Issues</name>
        <t indent="0" pn="section-7.5-1">
The GetCACaps response is not authenticated by the CA.  This allows an
attacker to perform downgrade attacks on the cryptographic capabilities of the
client/CA exchange.  In particular, if the server were to support MD5 and
single DES, then an in-path attacker could trivially roll back the encryption
to use these insecure algorithms.  By taking advantage of the presence of
large amounts of static known plaintext in the SCEP messages, as of 2017, a DES
rainbow table attack can recover most encryption keys in under a minute, and
MD5 chosen-prefix collisions can be calculated for a few tens of cents of
computing time using tools like HashClash.  It is for this reason that this
specification makes single DES and MD5 a <bcp14>MUST NOT</bcp14> feature.  Note that all
known servers support at least triple DES and SHA-1 (regardless of whether
"DES3" and "SHA-1" are indicated in GetCACaps), so there should never be a
reason to fall all the way back to single DES and MD5.</t>
        <t indent="0" pn="section-7.5-2">
One simple countermeasure to a GetCACaps downgrade attack is for clients that
are operating in an environment where on-path attacks are possible and that
expect the "SCEPStandard" capability to be indicated by the CA but don't see
it in the GetCACaps response to treat its absence as a security issue, and
either discontinue the exchange or continue as if "SCEPStandard" had been
returned.  This requires a certain trade-off between compatibility with old
servers and security against active attacks.
        </t>
      </section>
      <section anchor="security-no-pop" numbered="true" toc="include" removeInRFC="false" pn="section-7.6">
        <name slugifiedName="name-lack-of-pop-in-renewal-requ">Lack of PoP in Renewal Requests</name>
        <t indent="0" pn="section-7.6-1">
Renewal operations (but not standard certificate-issue operations) are
processed via a previously issued certificate and its associated private key,
not the key in the PKCS #10 request.  This means that a client no longer
demonstrates proof of possession (PoP) of the private key corresponding to the
public key in the PKCS #10 request.  It is therefore possible for a client to
recertify an existing key used by a third party, so that two or more
certificates exist for the same key.  By switching out the certificate in a
signature, an attacker can appear to have a piece of data signed by their
certificate rather than the original signer's certificate.  This, and other,
attacks are described in <xref target="RFC2634" format="default" sectionFormat="of" derivedContent="RFC2634">S/MIME ESS</xref>.
        </t>
        <t indent="0" pn="section-7.6-2">
Avoiding these types of attacks requires situation-specific measures.  For
example, CMS/SMIME implementations may use the ESSCertID attribute from <xref target="RFC2634" format="default" sectionFormat="of" derivedContent="RFC2634">S/MIME ESS</xref> or its successor, <xref target="RFC5035" format="default" sectionFormat="of" derivedContent="RFC5035">S/MIME
ESSv2</xref>, to unambiguously identify the signing certificate.  However, since
other mechanisms and protocols that the certificates will be used with
typically don't defend against this problem, it's unclear whether this is an
actual issue with SCEP.
        </t>
      </section>
      <section anchor="traffic-monitoring" numbered="true" toc="include" removeInRFC="false" pn="section-7.7">
        <name slugifiedName="name-traffic-monitoring">Traffic Monitoring</name>
        <t indent="0" pn="section-7.7-1">
SCEP messages are signed with certificates that may contain identifying
information.  If these are sent over the public Internet and real identity
information (rather than placeholder values or arbitrary device IDs) is
included in the signing certificate data, an attacker may be able to monitor
the identities of the entities submitting the certificate requests.  If this
is an issue, then <xref target="RFC7258" format="default" sectionFormat="of" derivedContent="RFC7258"/> should be consulted for guidance.
        </t>
      </section>
      <section anchor="security-unnecessary" numbered="true" toc="include" removeInRFC="false" pn="section-7.8">
        <name slugifiedName="name-unnecessary-cryptography">Unnecessary Cryptography</name>
        <t indent="0" pn="section-7.8-1">
Some of the SCEP exchanges use unnecessary signing and encryption operations.
In particular, the GetCert and GetCRL exchanges are encrypted and signed in
both directions.  The information requested is public, and thus encrypting the
requests is of questionable value.  In addition, CRLs and certificates sent in
responses are already signed by the CA and can be verified by the recipient
without requiring additional signing and encryption.  More lightweight means
of retrieving certificates and CRLs such as <xref target="RFC4387" format="default" sectionFormat="of" derivedContent="RFC4387">HTTP
certificate-store access</xref> and LDAP are recommended for this reason.
        </t>
      </section>
      <section anchor="security-sha1" numbered="true" toc="include" removeInRFC="false" pn="section-7.9">
        <name slugifiedName="name-use-of-sha-1">Use of SHA-1</name>
        <t indent="0" pn="section-7.9-1">
The majority of the large number of devices that use SCEP today default to
SHA-1, with many supporting only that hash algorithm with no ability to
upgrade to a newer one.  SHA-1 is no longer regarded as secure in all
situations, but as used in SCEP, it's still safe.  There are three reasons for
this.  The first is that attacking SCEP would require creating a fully general
SHA-1 collision in close to real time alongside breaking AES (more
specifically, it would require creating a fully general SHA-1 collision for
the PKCS #10 request, breaking the AES encryption around the PKCS #10 request,
and then creating a second SHA-1 collision for the signature on the encrypted
data), which won't be feasible for a long time.
        </t>
        <t indent="0" pn="section-7.9-2">
The second reason is that the signature over the message -- in other words, the
SHA-1 hash that isn't protected by encryption -- doesn't serve any critical
cryptographic purpose: The PKCS #10 data itself is authenticated through its
own signature, protected by encryption, and the overall request is authorised
by the (encrypted) shared secret.  The sole exception to this will be the
small number of implementations that support the Renewal operation, which may
be authorised purely through a signature, but presumably any implementation
recent enough to support Renewal also supports SHA-2.  Any legacy
implementation that supports the historic core SCEP protocol would not be
affected.
        </t>
        <t indent="0" pn="section-7.9-3">
The third reason is that SCEP uses the same key for encryption and signing, so
that even if an attacker were able to capture an outgoing renewal request that
didn't include a shared secret (in other words, one that was only authorised
through a signature), break the AES encryption, forge the SHA-1 hash in real
time, and forward the forged request to the CA, they couldn't decrypt the
returned certificate, which is protected with the same key that was used to
generate the signature.  While <xref target="security-unnecessary" format="default" sectionFormat="of" derivedContent="Section 7.8"/> points
out that SCEP uses unnecessary cryptography in places, the additional level of
security provided by the extra crypto makes it immune to any issues with
SHA-1.
        </t>
        <t indent="0" pn="section-7.9-4">
This doesn't mean that SCEP implementations should continue to use SHA-1 in
perpetuity, merely that there's no need for a panicked switch to SHA-2.
        </t>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-7.10">
        <name slugifiedName="name-use-of-http">Use of HTTP</name>
        <t indent="0" pn="section-7.10-1">
SCEP is an encrypted, authenticated certificate enrollment protocol that uses
HTTP as a simple transport mechanism. Since SCEP messages are already
cryptographically secured, it does not require transport layer security. Where
HTTPS is elected, a performance hit may result from the TLS overhead,
operational problems may result due to the more complex configuration, and
potential security vulnerability may result due to the addition of an entire
TLS protocol stack alongside the basic SCEP protocol. 
        </t>
        <t indent="0" pn="section-7.10-2"> 
In particular, experience has shown that the issue of configuring
certificates, CAs, and trust for both TLS and SCEP often leads to
interoperability problems because different certificates and trust models are
used in each.  Use of HTTPS to authenticate the server does not enable
omission of the ChallengePassword or similar authenticator in the SCEP message
on the assumption that using HTTPS instead of HTTP will somehow make this
insecure usage secure again. HTTPS is not soy sauce for security and is
unnecessary for SCEP, which uses cryptographically secured messages and does
not require transport layer security. 
        </t>
      </section>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-httpbis-bcp56bis" to="HTTP"/>
    <references pn="section-8">
      <name slugifiedName="name-references">References</name>
      <references pn="section-8.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="AES" quoteTitle="true" target="https://doi.org/10.6028/NIST.FIPS.197" derivedAnchor="AES">
          <front>
            <title>The Advanced Encryption Standard (AES)</title>
            <seriesInfo name="FIPS" value="197"/>
            <author fullname="U.S. National Institute of Standards and Technology">
              <organization showOnFrontPage="true">NIST</organization>
            </author>
            <date year="2001" month="November"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/NIST.FIPS.197"/>
        </reference>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author initials="S." surname="Bradner" fullname="S. Bradner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1997" month="March"/>
            <abstract>
              <t indent="0">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="RFC2985" target="https://www.rfc-editor.org/info/rfc2985" quoteTitle="true" derivedAnchor="RFC2985">
          <front>
            <title>PKCS #9: Selected Object Classes and Attribute Types Version 2.0</title>
            <author initials="M." surname="Nystrom" fullname="M. Nystrom">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Kaliski" fullname="B. Kaliski">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2000" month="November"/>
            <abstract>
              <t indent="0">This memo represents a republication of PKCS #9 v2.0 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 that specification.  This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2985"/>
          <seriesInfo name="DOI" value="10.17487/RFC2985"/>
        </reference>
        <reference anchor="RFC2986" target="https://www.rfc-editor.org/info/rfc2986" quoteTitle="true" derivedAnchor="RFC2986">
          <front>
            <title>PKCS #10: Certification Request Syntax Specification Version 1.7</title>
            <author initials="M." surname="Nystrom" fullname="M. Nystrom">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Kaliski" fullname="B. Kaliski">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2000" month="November"/>
            <abstract>
              <t indent="0">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="RFC3986" target="https://www.rfc-editor.org/info/rfc3986" quoteTitle="true" derivedAnchor="RFC3986">
          <front>
            <title>Uniform Resource Identifier (URI): Generic Syntax</title>
            <author initials="T." surname="Berners-Lee" fullname="T. Berners-Lee">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Fielding" fullname="R. Fielding">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="L." surname="Masinter" fullname="L. Masinter">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2005" month="January"/>
            <abstract>
              <t indent="0">A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource.  This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet.  The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier.  This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="66"/>
          <seriesInfo name="RFC" value="3986"/>
          <seriesInfo name="DOI" value="10.17487/RFC3986"/>
        </reference>
        <reference anchor="RFC4648" target="https://www.rfc-editor.org/info/rfc4648" quoteTitle="true" derivedAnchor="RFC4648">
          <front>
            <title>The Base16, Base32, and Base64 Data Encodings</title>
            <author initials="S." surname="Josefsson" fullname="S. Josefsson">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="October"/>
            <abstract>
              <t indent="0">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="RFC5234" target="https://www.rfc-editor.org/info/rfc5234" quoteTitle="true" derivedAnchor="RFC5234">
          <front>
            <title>Augmented BNF for Syntax Specifications: ABNF</title>
            <author initials="D." surname="Crocker" fullname="D. Crocker" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Overell" fullname="P. Overell">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="January"/>
            <abstract>
              <t indent="0">Internet technical specifications often need to define a formal syntax.  Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications.  The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power.  The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges.  This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="68"/>
          <seriesInfo name="RFC" value="5234"/>
          <seriesInfo name="DOI" value="10.17487/RFC5234"/>
        </reference>
        <reference anchor="RFC5280" target="https://www.rfc-editor.org/info/rfc5280" quoteTitle="true" derivedAnchor="RFC5280">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author initials="D." surname="Cooper" fullname="D. Cooper">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Santesson" fullname="S. Santesson">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Farrell" fullname="S. Farrell">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Boeyen" fullname="S. Boeyen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="R." surname="Housley" fullname="R. Housley">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="W." surname="Polk" fullname="W. Polk">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2008" month="May"/>
            <abstract>
              <t indent="0">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" target="https://www.rfc-editor.org/info/rfc5652" quoteTitle="true" derivedAnchor="RFC5652">
          <front>
            <title>Cryptographic Message Syntax (CMS)</title>
            <author initials="R." surname="Housley" fullname="R. Housley">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2009" month="September"/>
            <abstract>
              <t indent="0">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="RFC6838" target="https://www.rfc-editor.org/info/rfc6838" quoteTitle="true" derivedAnchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author initials="N." surname="Freed" fullname="N. Freed">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Klensin" fullname="J. Klensin">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Hansen" fullname="T. Hansen">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2013" month="January"/>
            <abstract>
              <t indent="0">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="RFC7230" target="https://www.rfc-editor.org/info/rfc7230" quoteTitle="true" derivedAnchor="RFC7230">
          <front>
            <title>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</title>
            <author initials="R." surname="Fielding" fullname="R. Fielding" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="J." surname="Reschke" fullname="J. Reschke" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="June"/>
            <abstract>
              <t indent="0">The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.  This document provides an overview of HTTP architecture and its associated terminology, defines the "http" and "https" Uniform Resource Identifier (URI) schemes, defines the HTTP/1.1 message syntax and parsing requirements, and describes related security concerns for implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7230"/>
          <seriesInfo name="DOI" value="10.17487/RFC7230"/>
        </reference>
        <reference anchor="RFC7258" target="https://www.rfc-editor.org/info/rfc7258" quoteTitle="true" derivedAnchor="RFC7258">
          <front>
            <title>Pervasive Monitoring Is an Attack</title>
            <author initials="S." surname="Farrell" fullname="S. Farrell">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="H." surname="Tschofenig" fullname="H. Tschofenig">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="May"/>
            <abstract>
              <t indent="0">Pervasive monitoring is a technical attack that should be mitigated in the design of IETF protocols, where possible.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="188"/>
          <seriesInfo name="RFC" value="7258"/>
          <seriesInfo name="DOI" value="10.17487/RFC7258"/>
        </reference>
        <reference anchor="RFC8126" target="https://www.rfc-editor.org/info/rfc8126" quoteTitle="true" derivedAnchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author initials="M." surname="Cotton" fullname="M. Cotton">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Narten" fullname="T. Narten">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="June"/>
            <abstract>
              <t indent="0">Many protocols make use of points of extensibility that use constants to identify various protocol parameters.  To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper.  For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t indent="0">To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed.  This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t indent="0">This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author initials="B." surname="Leiba" fullname="B. Leiba">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2017" month="May"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="SHA2" quoteTitle="true" derivedAnchor="SHA2">
          <front>
            <title>Secure Hash Standard (SHS)</title>
            <seriesInfo name="FIPS" value="180-3"/>
            <author fullname="U.S. National Institute of Standards and Technology">
              <organization showOnFrontPage="true">NIST</organization>
            </author>
            <date year="2008" month="October"/>
          </front>
        </reference>
      </references>
      <references pn="section-8.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <reference anchor="I-D.ietf-httpbis-bcp56bis" quoteTitle="true" target="https://tools.ietf.org/html/draft-ietf-httpbis-bcp56bis-09" derivedAnchor="HTTP">
          <front>
            <title>Building Protocols with HTTP</title>
            <author initials="M" surname="Nottingham" fullname="Mark Nottingham">
              <organization showOnFrontPage="true"/>
            </author>
            <date month="November" day="1" year="2019"/>
            <abstract>
              <t indent="0">HTTP is often used as a substrate for other application protocols (a.k.a.  HTTP-based APIs).  This document specifies best practices for writing specifications that use HTTP to define new application protocols, especially when they are defined for diverse implementation and broad deployment (e.g., in standards efforts).</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-httpbis-bcp56bis-09"/>
          <format type="TXT" target="http://www.ietf.org/internet-drafts/draft-ietf-httpbis-bcp56bis-09.txt"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="JSCEP" target="https://github.com/jscep/jscep" quoteTitle="true" derivedAnchor="JSCEP">
          <front>
            <title>A Java implementation of the Simple Certificate Enrolment Protocol</title>
            <author/>
            <date month="January" year="2020"/>
          </front>
          <seriesInfo name="commit" value="7410332"/>
        </reference>
        <reference anchor="RFC2634" target="https://www.rfc-editor.org/info/rfc2634" quoteTitle="true" derivedAnchor="RFC2634">
          <front>
            <title>Enhanced Security Services for S/MIME</title>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="1999" month="June"/>
            <abstract>
              <t indent="0">This document describes four optional security service extensions for S/MIME.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2634"/>
          <seriesInfo name="DOI" value="10.17487/RFC2634"/>
        </reference>
        <reference anchor="RFC4387" target="https://www.rfc-editor.org/info/rfc4387" quoteTitle="true" derivedAnchor="RFC4387">
          <front>
            <title>Internet X.509 Public Key Infrastructure Operational Protocols: Certificate Store Access via HTTP</title>
            <author initials="P." surname="Gutmann" fullname="P. Gutmann" role="editor">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2006" month="February"/>
            <abstract>
              <t indent="0">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 Hypertext Transfer Protocol (HTTP/HTTPS) as an interface mechanism to obtain certificates and certificate revocation lists (CRLs) from PKI repositories.  Additional mechanisms addressing PKIX operational requirements are specified in separate documents.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4387"/>
          <seriesInfo name="DOI" value="10.17487/RFC4387"/>
        </reference>
        <reference anchor="RFC5035" target="https://www.rfc-editor.org/info/rfc5035" quoteTitle="true" derivedAnchor="RFC5035">
          <front>
            <title>Enhanced Security Services (ESS) Update: Adding CertID Algorithm Agility</title>
            <author initials="J." surname="Schaad" fullname="J. Schaad">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2007" month="August"/>
            <abstract>
              <t indent="0">In the original Enhanced Security Services for S/MIME document (RFC 2634), a structure for cryptographically linking the certificate to be used in validation with the signature was introduced; this structure was hardwired to use SHA-1.  This document allows for the structure to have algorithm agility and defines a new attribute for this purpose.  [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5035"/>
          <seriesInfo name="DOI" value="10.17487/RFC5035"/>
        </reference>
        <reference anchor="RFC7296" target="https://www.rfc-editor.org/info/rfc7296" quoteTitle="true" derivedAnchor="RFC7296">
          <front>
            <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author initials="C." surname="Kaufman" fullname="C. Kaufman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Hoffman" fullname="P. Hoffman">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="Y." surname="Nir" fullname="Y. Nir">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="P." surname="Eronen" fullname="P. Eronen">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="T." surname="Kivinen" fullname="T. Kivinen">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2014" month="October"/>
            <abstract>
              <t indent="0">This document describes version 2 of the Internet Key Exchange (IKE) protocol.  IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs).  This document obsoletes RFC 5996, and includes all of the errata for it.  It advances IKEv2 to be an Internet Standard.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="79"/>
          <seriesInfo name="RFC" value="7296"/>
          <seriesInfo name="DOI" value="10.17487/RFC7296"/>
        </reference>
        <reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author initials="E." surname="Rescorla" fullname="E. Rescorla">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2018" month="August"/>
            <abstract>
              <t indent="0">This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t indent="0">This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8551" target="https://www.rfc-editor.org/info/rfc8551" quoteTitle="true" derivedAnchor="RFC8551">
          <front>
            <title>Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 Message Specification</title>
            <author initials="J." surname="Schaad" fullname="J. Schaad">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="B." surname="Ramsdell" fullname="B. Ramsdell">
              <organization showOnFrontPage="true"/>
            </author>
            <author initials="S." surname="Turner" fullname="S. Turner">
              <organization showOnFrontPage="true"/>
            </author>
            <date year="2019" month="April"/>
            <abstract>
              <t indent="0">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>
      </references>
    </references>
    <section anchor="background" numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-background-notes">Background Notes</name>
      <t indent="0" pn="section-appendix.a-1">

This specification has spent over twenty years in the draft stage.  Its
original goal, provisioning IPsec routers with certificates, has long since
changed to general device/embedded system/IoT use.  To fit this role, extra
features were bolted on in a haphazard manner through the addition of a
growing list of appendices and by inserting additional, often conflicting,
paragraphs in various locations in the body text.  Since existing features
were never updated as newer ones were added, the specification accumulated
large amounts of historical baggage over time.  If OpenPGP was described as "a
museum of 1990s crypto", then the SCEP document was its graveyard.

      </t>
      <t indent="0" pn="section-appendix.a-2">

About five years ago, the specification, which even at that point had seen only
sporadic reposts of the existing document, was more or less abandoned by its
original sponsors.  Due to its widespread use in large segments of the
industry, the specification was rebooted in 2015, cleaning up fifteen years'
worth of accumulated cruft, fixing errors, clarifying ambiguities, and
bringing the algorithms and standards used into the current century (prior to
the update, the de facto lowest-common-denominator algorithms used for
interoperability were the insecure forty-year-old single DES and broken MD5
hash algorithms).

      </t>
      <t indent="0" pn="section-appendix.a-3">

Note that although the text of the current specification has changed
significantly due to the consolidation of features and appendices into the
main document, the protocol that it describes is identical on the wire to the
original (with the unavoidable exception of the switch from single DES and MD5
to AES and SHA-2).  The only two changes introduced, the "SCEPStandard"
indicator in GetCACaps and the failInfoText attribute, are both optional
values and would be ignored by older implementations that don't support them,
or can be omitted from messages if they are found to cause problems.

      </t>
      <t indent="0" pn="section-appendix.a-4">

Other changes include:

      </t>
      <ul bare="false" empty="false" indent="3" spacing="normal" pn="section-appendix.a-5">
        <li pn="section-appendix.a-5.1">Resolved contradictions in the text -- for example, a requirement
	given as a <bcp14>MUST</bcp14> in one paragraph and a
	<bcp14>SHOULD</bcp14> in the next, a <bcp14>MUST NOT</bcp14>
	in one paragraph and a <bcp14>MAY</bcp14> a few paragraphs later, a
	<bcp14>SHOULD NOT</bcp14> contradicted later by a <bcp14>MAY</bcp14>, and so on.</li>
        <li pn="section-appendix.a-5.2">Merged several later fragmentary addenda placed in appendices (for
	example, the handling of certificate renewal) with the body of the
	text.</li>
        <li pn="section-appendix.a-5.3">Merged the "SCEP Transactions" and "SCEP Transport" sections, since the
		latter mostly duplicated (with occasional inconsistencies) the
		former.</li>
        <li pn="section-appendix.a-5.4">Updated the algorithms to ones dating from at least this
		century.</li>
        <li pn="section-appendix.a-5.5">Did the same for normative references to other standards.</li>
        <li pn="section-appendix.a-5.6">Updated the text to use consistent terminology for the client and
		CA rather than a mixture of client, requester, requesting system, end
		entity, server, certificate authority, certification authority, and
		CA.</li>
        <li pn="section-appendix.a-5.7">Corrected incorrect references to other standards, e.g.,
		IssuerAndSerial -&gt; IssuerAndSerialNumber.</li>
        <li pn="section-appendix.a-5.8">Corrected errors such as a statement that when both signature and
		encryption certificates existed, the signature certificate was used
		for encryption.</li>
        <li pn="section-appendix.a-5.9">Condensed redundant discussions of the same topic spread across
		multiple sections into a single location.  For example, the description
		of intermediate CA handling previously existed in three different
		locations, with slightly different requirements in each one.</li>
        <li pn="section-appendix.a-5.10">Added a description of how pkiMessages were processed, which was
		never made explicit in the original specification.  This led to
		creative interpretations that had security problems but were employed
		anyway due to the lack of specific guidance on what to do.</li>
        <li pn="section-appendix.a-5.11">Relaxed some requirements that didn't serve any obvious purpose and
		that major implementations didn't seem to be enforcing.  For example,
		the requirement that the self-signed certificate used with a request
		<bcp14>MUST</bcp14> contain a subject name that matched the one in the PKCS #10
		request was relaxed to a <bcp14>SHOULD</bcp14>, because a number of implementations
		either ignored the issue entirely or at worst performed some minor
		action like creating a log entry, after which they continued
		anyway.</li>
        <li pn="section-appendix.a-5.12">Removed discussion of the transactionID from the security
		considerations, since the instructions there were directly
		contradicted by the discussion of the use of the transactionID in
		<xref target="state-trans" format="default" sectionFormat="of" derivedContent="Section 5"/>.</li>
        <li pn="section-appendix.a-5.13">Added a requirement that the signed message include the signing
		certificate(s) in the signedData certificates field.  This was
		implicit in the original specification (without it, the message
		couldn't be verified by the CA) and was handled by the fact that most
		PKCS #7/CMS libraries do this by default, but was never explicitly
		mentioned.</li>
        <li pn="section-appendix.a-5.14">Clarified sections that were unclear or even made no sense -- for
		example, the requirement for a "hash on the public key" [sic] encoded
		as a PrintableString.</li>
        <li pn="section-appendix.a-5.15">Renamed "RA certificates" to "intermediate CA certificates".  The
		original document at some point added mention of RA certificates
		without specifying how the client was to determine that an RA was in
		use, how the RA operations were identified in the protocol, or how it
		was used.  It's unclear whether what was meant was a true RA or merely
		an intermediate CA, as opposed to the default practice of having
		certificates issued directly from a single root CA certificate.  This
		update uses the term "intermediate CA certificates", since this seems
		to have been the original intent of the text.</li>
        <li pn="section-appendix.a-5.16">Redid the PKIMessage diagram to match what was specified in CMS;
		the original diagram omitted a number of fields and nested data
		structures, which meant that the diagram didn't match either the text
		or the CMS specification.</li>
        <li pn="section-appendix.a-5.17">Removed the requirement for a CertPoll to contain a recipientNonce,
		since CertPoll is a client message and will never be sent in response
		to a message containing a senderNonce.  See also the note in
		<xref target="CertRep" format="default" sectionFormat="of" derivedContent="Section 3.3.2"/>.</li>
        <li pn="section-appendix.a-5.18">Clarified certificate renewal.  This represents a capability that
		was bolted onto the original protocol with (at best) vaguely defined
		semantics, including a requirement by the CA to guess whether a
		particular request was a renewal or not.  In response to developer
		feedback that they either avoided renewal entirely because of this
		uncertainty or hard-coded in particular behaviour on a per-CA basis,
		this specification explicitly identifies renewal requests as such and
		provides proper semantics for them.</li>
        <li pn="section-appendix.a-5.19">Corrected the requirement that "undefined message types are treated
		as an error", since this negates the effect of GetCACaps, which is used
		to define new message types.  In particular, operations such as
		GetCACaps "Renewal" would be impossible if enforced as written,
		because the Renewal operation was an undefined message type at the
		time.</li>
        <li pn="section-appendix.a-5.20">In line with the above, added IANA registries for several entries
		that had previously been defined in an ad hoc manner in different
		locations in the text.</li>
        <li pn="section-appendix.a-5.21">Added the "SCEPStandard" keyword to GetCACaps to indicate that the
		CA complies with the final version of the SCEP standard, since the
		definition of what constitutes SCEP standards compliance has changed
		significantly over the years.</li>
        <li pn="section-appendix.a-5.22">Added the optional failInfoText attribute to deal with the fact
		that failInfo was incapable of adequately communicating to clients why
		a certificate request operation had been rejected.</li>
        <li pn="section-appendix.a-5.23">Removed the discussion in the security considerations of revocation
		issues, since SCEP doesn't support revocation as part of the
		protocol.</li>
        <li pn="section-appendix.a-5.24">Clarified the use of nonces, which if applied as originally
		specified would have made the use of polling in the presence of a lost
		message impossible.</li>
        <li pn="section-appendix.a-5.25">Removed the discussion of generating a given transactionID by
		hashing the public key, since this implied that there was some special
		significance in the value generated this way.  Since it was neither a
		<bcp14>MUST</bcp14> nor a <bcp14>MAY</bcp14>, it was unsound
		to imply that servers could rely on the
		value being generated a certain way.  In addition, it wouldn't work if
		multiple transactions as discussed in <xref target="poll-resp" format="default" sectionFormat="of" derivedContent="Section 4.4"/> were
		initiated, since the deterministic generation via hashing would lead
		to duplicate transactionIDs.</li>
        <li pn="section-appendix.a-5.26">Added examples of SCEP messages to give implementers something to
		aim for.</li>
      </ul>
    </section>
    <section anchor="ack" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.b-1">
The editor would like to thank all of the previous editors, authors, and
contributors for their work maintaining the
document over the years: <contact fullname="Cheryl Madson"/>, <contact fullname="Xiaoyi Liu"/>, <contact fullname="David McGrew"/>, <contact fullname="David Cooper"/>, <contact fullname="Andy Nourse"/>, <contact fullname="Max Pritikin"/>, <contact fullname="Jan Vilhuber"/>, and others.  The IETF reviewers provided
much useful feedback that
helped improve the document, and in particular spotted a number of things that
were present in SCEP through established practice rather than by being
explicitly described in the text.  Numerous other people have contributed
during the long life cycle of the document, and all deserve thanks.  In addition,
several PKCS #7 / CMS libraries contributed to interoperability by doing the
right thing despite what earlier SCEP documents required.
      </t>
      <t indent="0" pn="section-appendix.b-2">
The authors of earlier draft versions of this document would like to thank
<contact fullname="Peter William"/> of ValiCert, Inc. (formerly of VeriSign,
  Inc.), <contact fullname="Alex Deacon"/> of
VeriSign, Inc., and <contact fullname="Christopher Welles"/> of IRE, Inc. for their contributions to
early versions of this protocol and this document.
      </t>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.c">
      <name slugifiedName="name-authors-address">Author's Address</name>
      <author initials="P." surname="Gutmann" fullname="Peter Gutmann">
        <organization abbrev="University of Auckland" showOnFrontPage="true">University of Auckland</organization>
        <address>
          <postal>
            <street>Department of Computer Science</street>
            <city>Auckland</city>
            <country>New Zealand</country>
          </postal>
          <email>pgut001@cs.auckland.ac.nz</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
