RFC 9811 PROPOSED STANDARD PKI · HTTP · CERTIFICATES

CMP over HTTP: Internet X.509 Public Key Infrastructure -- HTTP Transfer for the Certificate Management Protocol (CMP)

How to carry Certificate Management Protocol messages in HTTP POST requests, at a well-known URL.

On rfc-editor.org ↗
PUBLISHED
July 2025
AUTHORS
H. Brockhaus, D. von Oheimb, M. Ounsworth, J. Gray
STREAM
IETF
BUILDS ON
RFC 6712 — CMP over HTTP, RFC 9480 — CMP updates
MEDIA TYPE
application/pkixcmp
REQUEST METHOD
POST
SUCCESS STATUS FOR A CMP RESPONSE
200 (OK)
WELL-KNOWN PATH PREFIX
/.well-known/cmp
ANNOUNCEMENT ACKNOWLEDGEMENT STATUSES
201 (Created) or 202 (Accepted), with empty content
ANNOUNCEMENT TYPES THAT MAY BE PUSHED
4: CA Key Update, Certificate, Revocation and CRL
DOI
10.17487/RFC9811

RFC text

Contents
Original text · RFC Editor View on rfc-editor.org ↗
Internet Engineering Task Force (IETF)                      H. Brockhaus
Request for Comments: 9811                                 D. von Oheimb
Obsoletes: 6712, 9480                                            Siemens
Category: Standards Track                                   M. Ounsworth
ISSN: 2070-1721                                                  J. Gray
                                                                 Entrust
                                                               July 2025


   Internet X.509 Public Key Infrastructure -- HTTP Transfer for the
                 Certificate Management Protocol (CMP)

Abstract

   This document describes how to layer the Certificate Management
   Protocol (CMP) over HTTP.

   It includes the updates to RFC 6712 specified in Section 3 of RFC
   9480; these updates introduce CMP URIs using a well-known prefix.  It
   obsoletes RFC 6712; and, together with RFC 9810, it also obsoletes
   RFC 9480.

Status of This Memo

   This is an Internet Standards Track document.

   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).  Further information on
   Internet Standards is available in Section 2 of RFC 7841.

   Information about the current status of this document, any errata,
   and how to provide feedback on it may be obtained at
   https://www.rfc-editor.org/info/rfc9811.

Copyright Notice

   Copyright (c) 2025 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) 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 Revised BSD License text as described in Section 4.e of the
   Trust Legal Provisions and are provided without warranty as described
   in the Revised BSD License.

Table of Contents

   1.  Introduction
     1.1.  Changes Made by RFC 9480
     1.2.  Changes Made by This Document
   2.  Conventions Used in This Document
   3.  HTTP-Based Protocol
     3.1.  General Form
     3.2.  Media Type
     3.3.  Communication Workflow
     3.4.  HTTP Request-URI
     3.5.  Pushing of Announcements
   4.  Implementation Considerations
   5.  Security Considerations
   6.  IANA Considerations
   7.  References
     7.1.  Normative References
     7.2.  Informative References
   Acknowledgements
   Authors' Addresses

1.  Introduction

   The Certificate Management Protocol (CMP) [RFC9810] requires a well-
   defined transfer mechanism to enable End Entities (EEs), Registration
   Authorities (RAs), and Certification Authorities (CAs) to pass
   PKIMessage structures between them.

   The first version of the CMP specification [RFC2510] included a brief
   description of a simple transfer protocol layer on top of TCP.  Its
   features were simple transfer-level error handling and a mechanism to
   poll for outstanding PKI messages.  Additionally, it was mentioned
   that PKI messages could also be conveyed using file-, email-, and
   HTTP-based transfer, but those were not specified in detail.

   Since the second version of the CMP specification [RFC4210]
   incorporated its own polling mechanism, the need for a transfer
   protocol providing this functionality vanished.  The remaining
   features CMP requires from its transfer protocols are connection and
   error handling.

   CMP can benefit from utilizing reliable transport, as it requires
   connection and error handling from the transfer protocol.  All these
   features are covered by HTTP.  Additionally, delayed delivery of CMP
   response messages may be handled at transfer level, regardless of the
   message contents.  Since [RFC9480] extends the polling mechanism
   specified in the second version of CMP [RFC4210] to cover all types
   of PKI management transactions, delays detected at application level
   may also be handled within CMP, using pollReq and pollRep messages.

   The usage of HTTP (e.g., HTTP/1.1 as specified in [RFC9110] and
   [RFC9112]) for transferring CMP messages exclusively uses the POST
   method for requests, effectively tunneling CMP over HTTP.  While this
   is generally considered bad practice (see RFC 9205 [BCP56] for best
   current practice on building protocols with HTTP) and should not be
   emulated, there are good reasons to do so for transferring CMP.  HTTP
   is used as it is generally easy to implement and it is able to
   traverse network borders utilizing ubiquitous proxies.  Most
   importantly, HTTP is already commonly used in existing CMP
   implementations.  Other HTTP request methods, such as GET, are not
   used because PKI management operations can only be triggered using
   CMP's PKI messages, which need to be transferred using a POST
   request.

   With its status codes, HTTP provides needed error reporting
   capabilities.  General problems on the server side, as well as those
   directly caused by the respective request, can be reported to the
   client.

   As CMP implements a transaction identification (transactionID),
   identifying transactions spanning over more than just a single
   request/response pair, the statelessness of HTTP is not blocking its
   usage as the transfer protocol for CMP messages.

1.1.  Changes Made by RFC 9480

   CMP Updates [RFC9480] updated Section 3.6 of [RFC6712], supporting
   the PKI management operations specified in the Lightweight CMP
   Profile [RFC9483], in the following areas:

   *  Introduced the HTTP URI path prefix '/.well-known/cmp'.

   *  Added options for extending the URI structure with further
      segments and defined a new protocol registry group to that aim.

1.2.  Changes Made by This Document

   This document obsoletes [RFC6712].  It includes the changes specified
   in Section 3 of [RFC9480], as described in Section 1.1 of this
   document.  Additionally, it adds the following changes:

   *  Removed the requirement to support HTTP/1.0 [RFC1945] in
      accordance with Section 4.1 of RFC 9205 [BCP56].

   *  Implementations MUST forward CMP messages when an HTTP error
      status code occurs; see Section 3.1.

   *  Removed Section 3.8 of [RFC6712] as it contains information
      redundant with current HTTP specification.

2.  Conventions Used in This Document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in BCP
   14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

3.  HTTP-Based Protocol

   For direct interaction between two entities, where a reliable
   transport protocol like TCP [RFC9293] is available, HTTP [RFC9110]
   SHOULD be utilized for conveying CMP messages.  This specification
   requires using the POST method (Section 3.1) and the "Content-Type"
   header field (Section 3.2), which are available since HTTP/1.0
   [RFC1945].

   Note: In some situations, CMP requires multiple request/response
   pairs to perform a PKI management operation.  Their affiliation with
   a PKI management operation is indicated by a transaction identifier
   in the CMP message header (see transactionID described in
   Section 5.1.1 of [RFC9810]).  For details on how to transfer multiple
   requests, see Section 4.11 of RFC 9205 [BCP56].

3.1.  General Form

   A DER-encoded [ITU.X690.2021] PKIMessage (Section 5.1 of [RFC9810])
   MUST be sent as the content of an HTTP POST request.  If this HTTP
   request is successful, the server returns the CMP response in the
   content of the HTTP response.  The HTTP response status code in this
   case MUST be 200 (OK); other Successful 2xx status codes MUST NOT be
   used for this purpose.  HTTP responses to pushed CMP announcement
   messages described in Section 3.5 utilize the status codes 201 and
   202 to identify whether the received information was processed.

   While Redirection 3xx status codes MAY be supported by
   implementations, clients should only be enabled to automatically
   follow them after careful consideration of possible security
   implications.  As described in Section 5, the 301 (Moved Permanently)
   status code could be misused for permanent denial of service.

   All applicable Client Error 4xx or Server Error 5xx status codes MAY
   be used to inform the client about errors.  Whenever a client
   receives an HTTP response with a status code in the 2xx, 4xx, or 5xx
   ranges, it MUST support handling response message content containing
   a CMP response PKIMessage.

3.2.  Media Type

   The Internet media type "application/pkixcmp" MUST be set in the HTTP
   "Content-Type" header field when conveying a PKIMessage.

3.3.  Communication Workflow

   In CMP, most communication is initiated by the EEs where every CMP
   request triggers a CMP response message from the CA or RA.

   The CMP announcement messages described in Section 3.5 are an
   exception.  Their creation may be triggered by certain events or done
   on a regular basis by a CA.  The recipient of the announcement only
   replies with an HTTP status code acknowledging the receipt or
   indicating an error, but not with a CMP response.

   If the receipt of an HTTP request is not confirmed by receiving an
   HTTP response, it MUST be assumed that the transferred CMP message
   was not successfully delivered to its destination.

3.4.  HTTP Request-URI

   Each CMP server on a PKI management entity supporting HTTP or HTTPS
   transfer MUST support the use of the path prefix '/.well-known/' as
   defined in [RFC8615] and the registered name 'cmp' to ease
   interworking in a multi-vendor environment.

   CMP clients have to be configured with sufficient information to form
   the CMP server URI.  This is at least the authority portion of the
   URI, e.g., 'www.example.com:80', or the full operation path segment
   of the PKI management entity.  Additionally, path segments MAY be
   added after the registered application name as part of the full
   operation path to provide further distinction.  The path segment 'p'
   followed by an arbitraryLabel <name> could, for example, support the
   differentiation of specific CAs or certificate profiles.  Further
   path segments, e.g., as specified in the Lightweight CMP Profile
   [RFC9483], could indicate PKI management operations using an
   operationLabel <operation>.  The following list shows examples of
   valid full CMP URIs:

   *  http://www.example.com/.well-known/cmp

   *  http://www.example.com/.well-known/cmp/<operation>

   *  http://www.example.com/.well-known/cmp/p/<name>

   *  http://www.example.com/.well-known/cmp/p/<name>/<operation>

   Note that https can also be used instead of http; see item 5 in the
   Security Considerations (Section 5).

3.5.  Pushing of Announcements

   A CMP server may create event-triggered announcements or generate
   them on a regular basis.  It MAY utilize HTTP transfer to convey them
   to a suitable recipient.  In this use case, the CMP server acts as an
   HTTP client, and the recipient needs to utilize an HTTP server.  As
   no request messages are specified for those announcements, they can
   only be pushed to the recipient.

   If an EE wants to poll for a potential CA Key Update Announcement or
   the current Certificate Revocation List (CRL), a PKI Information
   Request using a general message as described in Appendix D.5 of
   [RFC9810] can be used.

   When pushing announcement messages, PKIMessage structures MUST be
   sent as the content of an HTTP POST request.

   Suitable recipients for CMP announcements might, for example, be
   repositories storing the announced information, such as directory
   services.  Those services listen for incoming messages, utilizing the
   same HTTP Request-URI scheme as defined in Section 3.4.

   The following types of PKIMessage are announcements that may be
   pushed by a CA.  The prefixed numbers reflect ASN.1 tags of the
   PKIBody structure (Section 5.1.2 of [RFC9810]).

      [15] CA Key Update Announcement
      [16] Certificate Announcement
      [17] Revocation Announcement
      [18] CRL Announcement

   CMP announcement messages do not require any CMP response.  However,
   the recipient MUST acknowledge receipt with an HTTP response having
   an appropriate status code and empty content.  When not receiving
   such a response, it MUST be assumed that the delivery was not
   successful.  If applicable, the sending side MAY try sending the
   announcement again after waiting for an appropriate time span.

   If the announced issue was successfully stored in a database or was
   already present, the answer MUST be an HTTP response with a 201
   (Created) status code and empty content.

   In case the announced information was only accepted for further
   processing, the status code of the returned HTTP response MAY also be
   202 (Accepted).  After an appropriate delay, the sender may then try
   to send the announcement again and may repeat this until it receives
   a confirmation that it has been successfully processed.  The
   appropriate duration of the delay and the option to increase it
   between consecutive attempts should be carefully considered.

   A receiver MUST answer with a suitable 4xx or 5xx error code when a
   problem occurs.

4.  Implementation Considerations

   Implementers should be aware that other implementations might exist
   that use a different approach for transferring CMP over HTTP.
   Further, implementations based on earlier documents that led to
   [RFC6712] might use an unregistered "application/pkixcmp-poll" media
   type.  Conforming implementations MAY handle this type like
   "application/pkixcmp".

5.  Security Considerations

   All security considerations in HTTP [RFC9110] apply.  The following
   items need to be considered by implementers and users:

   1.  There is the risk for denial-of-service attacks through resource
       consumption by opening many connections to an HTTP server.
       Therefore, idle connections should be terminated after an
       appropriate timeout; this may also depend on the available free
       resources.

   2.  Without being encapsulated in effective security protocols, such
       as Transport Layer Security (TLS) [RFC5246] [RFC8446], or without
       using HTTP digest [RFC9530], there is no integrity protection at
       the HTTP level.  Therefore, information from the HTTP should not
       be used to change state of the transaction, regardless of whether
       any mechanism was used to ensure the authenticity or integrity of
       HTTP messages (e.g., TLS or HTTP digests).

   3.  Client users should be aware that storing the target location of
       an HTTP response with the 301 (Moved Permanently) status code
       could be exploited by a meddler-in-the-middle attacker trying to
       block them permanently from contacting the correct server.

   4.  If no measures to authenticate and protect the HTTP responses to
       pushed announcement messages are in place, their information
       regarding the announcement's processing state may not be trusted.
       In that case, the overall design of the PKI system must not
       depend on the announcements being reliably received and processed
       by their destination.

   5.  CMP provides inbuilt integrity protection and authentication.
       The information communicated unencrypted in CMP messages does not
       contain sensitive information endangering the security of the PKI
       when intercepted.  However, it might be possible for an
       eavesdropper to utilize the available information to gather
       confidential personal, technical, or business-critical
       information.  The protection of the confidentiality of CMP
       messages together with an initial authentication of the RA/CA
       before the first CMP message is transmitted ensures the privacy
       of the EE requesting certificates.  Therefore, users of the HTTP
       transfer for CMP messages should consider using HTTP over TLS
       according to [RFC9110] or using virtual private networks created,
       for example, by utilizing Internet Protocol Security according to
       [RFC7296].

6.  IANA Considerations

   IANA has made the following updates:

   *  the reference for "application/pkixcmp" in the "Media Types"
      registry <https://www.iana.org/assignments/media-types> refers to
      this document, instead of [RFC2510].

   *  the reference for "application/pkixcmp" in the "CoAP Content-
      Formats" registry <https://www.iana.org/assignments/core-
      parameters> refers to this document, instead of [RFC4210].

   *  the reference for "cmp" in the "Well-Known URIs" registry
      <https://www.iana.org/assignments/well-known-uris/> refers to this
      document instead of [RFC4210].

   *  the reference for "p" in the "CMP Well-Known URI Path Segments"
      registry <https://www.iana.org/assignments/cmp> refers to this
      document instead of [RFC9480].

   No further action by IANA is necessary for this document or any
   anticipated updates.

7.  References

7.1.  Normative References

   [ITU.X690.2021]
              ITU-T, "Information Technology - ASN.1 encoding rules:
              Specification of Basic Encoding Rules (BER), Canonical
              Encoding Rules (CER) and Distinguished Encoding Rules
              (DER)", ITU-T Recommendation X.690, 2021,
              <https://www.itu.int/rec/T-REC-X.690-202102-I/en>.

   [RFC1945]  Berners-Lee, T., Fielding, R., and H. Frystyk, "Hypertext
              Transfer Protocol -- HTTP/1.0", RFC 1945,
              DOI 10.17487/RFC1945, May 1996,
              <https://www.rfc-editor.org/info/rfc1945>.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8615]  Nottingham, M., "Well-Known Uniform Resource Identifiers
              (URIs)", RFC 8615, DOI 10.17487/RFC8615, May 2019,
              <https://www.rfc-editor.org/info/rfc8615>.

   [RFC9110]  Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
              Ed., "HTTP Semantics", STD 97, RFC 9110,
              DOI 10.17487/RFC9110, June 2022,
              <https://www.rfc-editor.org/info/rfc9110>.

   [RFC9112]  Fielding, R., Ed., Nottingham, M., Ed., and J. Reschke,
              Ed., "HTTP/1.1", STD 99, RFC 9112, DOI 10.17487/RFC9112,
              June 2022, <https://www.rfc-editor.org/info/rfc9112>.

   [RFC9810]  Brockhaus, H., von Oheimb, D., Ounsworth, M., and J. Gray,
              "Internet X.509 Public Key Infrastructure -- Certificate
              Management Protocol (CMP)", RFC 9810,
              DOI 10.17487/RFC9810, July 2025,
              <https://www.rfc-editor.org/info/rfc9810>.

7.2.  Informative References

   [BCP56]    Best Current Practice 56,
              <https://www.rfc-editor.org/info/bcp56>.
              At the time of writing, this BCP comprises the following:

              Nottingham, M., "Building Protocols with HTTP", BCP 56,
              RFC 9205, DOI 10.17487/RFC9205, June 2022,
              <https://www.rfc-editor.org/info/rfc9205>.

   [RFC2510]  Adams, C. and S. Farrell, "Internet X.509 Public Key
              Infrastructure Certificate Management Protocols",
              RFC 2510, DOI 10.17487/RFC2510, March 1999,
              <https://www.rfc-editor.org/info/rfc2510>.

   [RFC4210]  Adams, C., Farrell, S., Kause, T., and T. Mononen,
              "Internet X.509 Public Key Infrastructure Certificate
              Management Protocol (CMP)", RFC 4210,
              DOI 10.17487/RFC4210, September 2005,
              <https://www.rfc-editor.org/info/rfc4210>.

   [RFC5246]  Dierks, T. and E. Rescorla, "The Transport Layer Security
              (TLS) Protocol Version 1.2", RFC 5246,
              DOI 10.17487/RFC5246, August 2008,
              <https://www.rfc-editor.org/info/rfc5246>.

   [RFC6712]  Kause, T. and M. Peylo, "Internet X.509 Public Key
              Infrastructure -- HTTP Transfer for the Certificate
              Management Protocol (CMP)", RFC 6712,
              DOI 10.17487/RFC6712, September 2012,
              <https://www.rfc-editor.org/info/rfc6712>.

   [RFC7296]  Kaufman, C., Hoffman, P., Nir, Y., Eronen, P., and T.
              Kivinen, "Internet Key Exchange Protocol Version 2
              (IKEv2)", STD 79, RFC 7296, DOI 10.17487/RFC7296, October
              2014, <https://www.rfc-editor.org/info/rfc7296>.

   [RFC8446]  Rescorla, E., "The Transport Layer Security (TLS) Protocol
              Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
              <https://www.rfc-editor.org/info/rfc8446>.

   [RFC9293]  Eddy, W., Ed., "Transmission Control Protocol (TCP)",
              STD 7, RFC 9293, DOI 10.17487/RFC9293, August 2022,
              <https://www.rfc-editor.org/info/rfc9293>.

   [RFC9480]  Brockhaus, H., von Oheimb, D., and J. Gray, "Certificate
              Management Protocol (CMP) Updates", RFC 9480,
              DOI 10.17487/RFC9480, November 2023,
              <https://www.rfc-editor.org/info/rfc9480>.

   [RFC9483]  Brockhaus, H., von Oheimb, D., and S. Fries, "Lightweight
              Certificate Management Protocol (CMP) Profile", RFC 9483,
              DOI 10.17487/RFC9483, November 2023,
              <https://www.rfc-editor.org/info/rfc9483>.

   [RFC9530]  Polli, R. and L. Pardue, "Digest Fields", RFC 9530,
              DOI 10.17487/RFC9530, February 2024,
              <https://www.rfc-editor.org/info/rfc9530>.

Acknowledgements

   The authors wish to thank Tomi Kause and Martin Peylo, the original
   authors of [RFC6712], for their work.

   We also thank all reviewers for their valuable feedback.

Authors' Addresses

   Hendrik Brockhaus
   Siemens
   Werner-von-Siemens-Strasse 1
   80333 Munich
   Germany
   Email: hendrik.brockhaus@siemens.com
   URI:   https://www.siemens.com


   David von Oheimb
   Siemens
   Werner-von-Siemens-Strasse 1
   80333 Munich
   Germany
   Email: david.von.oheimb@siemens.com
   URI:   https://www.siemens.com


   Mike Ounsworth
   Entrust
   1187 Park Place
   Minneapolis, MN 55379
   United States of America
   Email: mike.ounsworth@entrust.com
   URI:   https://www.entrust.com


   John Gray
   Entrust
   1187 Park Place
   Minneapolis, MN 55379
   United States of America
   Email: john.gray@entrust.com
   URI:   https://www.entrust.com

ISO Plain Language

On this page
PROBLEMThe Certificate Management Protocol (CMP) needs a transfer mechanism so that end entities, registration authorities and certification authorities can pass PKIMessage structures to each other with connection and error handling.
MECHANISMEach DER-encoded PKIMessage is sent as the content of an HTTP POST request with media type application/pkixcmp, and the CMP reply comes back in the HTTP response. Servers support the path prefix /.well-known/cmp.
STATUS TODAYIt obsoletes RFC 6712 and folds in the well-known URI changes introduced by RFC 9480. The requirement to support HTTP/1.0 is dropped.

§1Why CMP Needs a Transfer Protocol

The Certificate Management Protocol (CMP) requires a well-defined transfer mechanism to enable End Entities, Registration Authorities and Certification Authorities to pass PKIMessage structures between them.

The first version of the CMP specification included a brief description of a simple transfer protocol layer on top of TCP. Its features were simple transfer-level error handling and a mechanism to poll for outstanding PKI messages. It was also mentioned that PKI messages could be conveyed using file, email and HTTP based transfer, but those were not specified in detail.

Since the second version of the CMP specification incorporated its own polling mechanism, the need for a transfer protocol providing this functionality vanished. The remaining features CMP requires from its transfer protocols are connection and error handling.

CMP can benefit from using a reliable transport, because it requires connection and error handling from the transfer protocol, and HTTP covers all of these features. Additionally, delayed delivery of CMP response messages may be handled at transfer level, regardless of the message contents. Because RFC 9480 extends the polling mechanism of the second version of CMP to cover all types of PKI management transactions, delays detected at application level may also be handled within CMP, using pollReq and pollRep messages.

The usage of HTTP for transferring CMP messages exclusively uses the POST method for requests, effectively tunnelling CMP over HTTP. While this is generally considered bad practice, as set out in RFC 9205 for best current practice on building protocols with HTTP, and should not be emulated, there are good reasons to do so for transferring CMP.

HTTP is used because it is generally easy to implement, and it is able to traverse network borders using ubiquitous proxies. Most importantly, HTTP is already commonly used in existing CMP implementations. Other HTTP request methods, such as GET, are not used, because PKI management operations can only be triggered using CMP's PKI messages, which need to be transferred using a POST request.

With its status codes, HTTP provides the needed error reporting capabilities. General problems on the server side, as well as those directly caused by the respective request, can be reported to the client.

As CMP implements a transaction identification, the transactionID, identifying transactions that span more than just a single request and response pair, the statelessness of HTTP is not blocking its usage as the transfer protocol for CMP messages.

CMP needs a way to move its messages around. The polling part was later built into CMP itself, so all the transfer protocol has to provide is a reliable connection and a way to report errors.

Wrapping a protocol inside HTTP is normally discouraged, but here it is practical: HTTP already crosses firewalls and proxies, and CMP software already speaks it. Only POST is used, because a certificate request has to be sent as a body, not asked for with a GET.

CMP MESSAGES CARRIED IN HTTP POST REQUESTS (ILLUSTRATIVE)
End entityCMP serverRepository
  1. POSTA DER-encoded PKIMessage in the body, with Content-Type application/pkixcmp.
  2. 200 OKThe CMP response PKIMessage is in the body of the HTTP response.
  3. POSTA pushed announcement, such as a CRL Announcement, with no CMP response expected.
  4. 201 CreatedEmpty body: the announcement was stored.

§3.1The Form of a CMP Request

A DER-encoded PKIMessage MUST be sent as the content of an HTTP POST request. If this HTTP request is successful, the server returns the CMP response in the content of the HTTP response. The HTTP response status code in this case MUST be 200 (OK); other Successful 2xx status codes MUST NOT be used for this purpose. HTTP responses to pushed CMP announcement messages use the status codes 201 and 202 to identify whether the received information was processed.

While Redirection 3xx status codes MAY be supported by implementations, clients should only be enabled to automatically follow them after careful consideration of possible security implications, because the 301 (Moved Permanently) status code could be misused for permanent denial of service.

All applicable Client Error 4xx or Server Error 5xx status codes MAY be used to inform the client about errors. Whenever a client receives an HTTP response with a status code in the 2xx, 4xx or 5xx ranges, it MUST support handling response message content containing a CMP response PKIMessage.

The Internet media type application/pkixcmp MUST be set in the HTTP Content-Type header field when conveying a PKIMessage.

One request carries one certificate message, and one reply carries the answer. The reply uses status 200, and the body of the message is marked with the media type application/pkixcmp. Even an error status may still carry a certificate message in the body, so the client has to look at the content as well as the status.

THE HTTP STATUS CODES THIS DOCUMENT USES
  • 200OK — The CMP response PKIMessage is in the body of the response.
  • 201Created — A pushed announcement was stored in a database, or was already present.
  • 202Accepted — A pushed announcement was only accepted for further processing.
  • 3xxRedirection — May be supported, but clients should follow it only after considering the security implications.
  • 4xx and 5xxErrors — May be used to report errors, and the body may still carry a CMP response PKIMessage.

§3.4Where the Request Goes

Each CMP server on a PKI management entity supporting HTTP or HTTPS transfer MUST support the use of the path prefix /.well-known/ and the registered name cmp, to ease interworking in a multi-vendor environment.

CMP clients have to be configured with sufficient information to form the CMP server URI. This is at least the authority portion of the URI, for example www.example.com:80, or the full operation path segment of the PKI management entity. Additionally, path segments MAY be added after the registered application name as part of the full operation path, to provide further distinction. The path segment p followed by an arbitrary label could, for example, support the differentiation of specific CAs or certificate profiles. Further path segments, as specified in the Lightweight CMP Profile, could indicate PKI management operations using an operation label. The document lists four examples of valid full CMP URIs, from the plain well-known path to the path with both a name and an operation label.

The address of the service follows a fixed pattern, so that any client can find it without being configured with a special path: the request goes to /.well-known/cmp, with optional extra segments to pick out a particular authority or operation.

EXAMPLES OF VALID CMP URIS (RFC 9811 SECTION 3.4)
CMP request URIs
http://www.example.com/.well-known/cmp
http://www.example.com/.well-known/cmp/<operation>
http://www.example.com/.well-known/cmp/p/<name>
http://www.example.com/.well-known/cmp/p/<name>/<operation>

§3.5Pushing Announcements

A CMP server may create event-triggered announcements or generate them on a regular basis. It MAY use HTTP transfer to convey them to a suitable recipient. In this use case, the CMP server acts as an HTTP client, and the recipient needs to use an HTTP server. As no request messages are specified for those announcements, they can only be pushed to the recipient.

If an end entity wants to poll for a potential CA Key Update Announcement or the current Certificate Revocation List, a PKI Information Request using a general message can be used instead.

When pushing announcement messages, PKIMessage structures MUST be sent as the content of an HTTP POST request. Suitable recipients might, for example, be repositories storing the announced information, such as directory services, which listen for incoming messages using the same HTTP Request-URI scheme.

The document lists the types of PKIMessage that are announcements which may be pushed by a CA, with the prefixed numbers reflecting the ASN.1 tags of the PKIBody structure: CA Key Update Announcement, Certificate Announcement, Revocation Announcement and CRL Announcement.

CMP announcement messages do not require any CMP response. However, the recipient MUST acknowledge receipt with an HTTP response having an appropriate status code and empty content, and when not receiving such a response it MUST be assumed that the delivery was not successful. If applicable, the sending side MAY try sending the announcement again after waiting for an appropriate time span. If the announced issue was successfully stored in a database, or was already present, the answer MUST be an HTTP response with a 201 (Created) status code and empty content. If the announced information was only accepted for further processing, the status code of the returned HTTP response MAY also be 202 (Accepted), after which the sender may try again after a delay and repeat this until it receives a confirmation that the announcement has been processed. A receiver MUST answer with a suitable 4xx or 5xx error code when a problem occurs.

A certificate authority can also push news to a repository, such as a directory service, without being asked. The repository does not answer with a certificate message; it answers with an HTTP status only, and the sender keeps trying until it gets one that says the announcement was stored.

§4Workflow and Implementation Notes

In CMP, most communication is initiated by the end entities, where every CMP request triggers a CMP response message from the CA or RA. The CMP announcement messages are an exception: their creation may be triggered by certain events or done on a regular basis by a CA, and the recipient of the announcement replies only with an HTTP status code acknowledging the receipt or indicating an error, but not with a CMP response.

If the receipt of an HTTP request is not confirmed by receiving an HTTP response, it MUST be assumed that the transferred CMP message was not successfully delivered to its destination.

Implementers should be aware that other implementations might exist that use a different approach for transferring CMP over HTTP. Further, implementations based on earlier documents that led to RFC 6712 might use an unregistered application/pkixcmp-poll media type, and conforming implementations MAY handle this type like application/pkixcmp.

Normally the requester sends a certificate request and gets a certificate back. If no reply at all arrives, the request must be treated as not delivered. Older software may label its messages differently, so a server can be asked to accept that label too.

§5Security Considerations

All security considerations in HTTP apply, and the document adds five items for implementers and users to consider.

  • There is the risk for denial-of-service attacks through resource consumption by opening many connections to an HTTP server. Idle connections should therefore be terminated after an appropriate timeout, which may also depend on the available free resources.
  • Without being encapsulated in effective security protocols such as TLS, or without using HTTP digest, there is no integrity protection at the HTTP level. Therefore, information from the HTTP should not be used to change the state of the transaction, regardless of whether any mechanism was used to ensure the authenticity or integrity of HTTP messages.
  • Client users should be aware that storing the target location of an HTTP response with the 301 (Moved Permanently) status code could be exploited by a meddler-in-the-middle attacker trying to block them permanently from contacting the correct server.
  • If no measures to authenticate and protect the HTTP responses to pushed announcement messages are in place, their information regarding the announcement's processing state may not be trusted. In that case, the overall design of the PKI system must not depend on the announcements being reliably received and processed by their destination.
  • CMP provides inbuilt integrity protection and authentication. The information communicated unencrypted in CMP messages does not contain sensitive information endangering the security of the PKI when intercepted. However, it might be possible for an eavesdropper to use the available information to gather confidential personal, technical or business-critical information. The protection of the confidentiality of CMP messages, together with an initial authentication of the RA or CA before the first CMP message is transmitted, ensures the privacy of the end entity requesting certificates. Users of the HTTP transfer for CMP messages should therefore consider using HTTP over TLS or using virtual private networks, for example by utilizing IPsec.

Five points matter. Too many open connections can exhaust the server, so idle ones should be closed. The HTTP layer itself has no integrity protection unless TLS or a digest is used, so an HTTP status alone must never change the state of a certificate transaction. A redirect can be used to block a client permanently. And a system must not depend on pushed announcements being received.

THE FIVE POINTS OF THE SECURITY SECTION
  • Idle connectionsTerminate them after a timeout, so that many open connections cannot exhaust the server.
  • No integrity at the HTTP levelWithout TLS or an HTTP digest, the HTTP layer must not be used to change the state of a transaction.
  • 301 Moved PermanentlyA stored redirect target could be used to block a client from its server for good.
  • Pushed announcementsThe design of the PKI system must not depend on announcements being received and processed.
  • ConfidentialityCMP messages are authenticated but not encrypted, so TLS or IPsec protects the requester's privacy.

§6IANA Considerations

IANA made four updates. The reference for application/pkixcmp in the Media Types registry now points to this document instead of RFC 2510. The reference for application/pkixcmp in the CoAP Content-Formats registry points to this document instead of RFC 4210. The reference for cmp in the Well-Known URIs registry points to this document instead of RFC 4210. And the reference for p in the CMP Well-Known URI Path Segments registry points to this document instead of RFC 9480. No further action by IANA is necessary for this document or any anticipated updates.

The registries that list the media type and the well-known address were pointed at this document, so that anyone looking up the name finds the current specification.

§8References