RFC 9811: Internet X.509 Public Key Infrastructure -- HTTP Transfer for the Certificate Management Protocol (CMP)
- H. Brockhaus,
- D. von Oheimb,
- M. Ounsworth,
- J. Gray
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://
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://
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
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
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:¶
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:¶
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
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
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
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
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]).¶
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
5. Security Considerations
All security considerations in HTTP [RFC9110] apply. The following items need to be considered by implementers and users:¶
6. IANA Considerations
IANA has made the following updates:¶
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, , <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 , , <https:///RFC1945 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 , , <https:///RFC2119 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 , , <https:///RFC8174 www >..rfc -editor .org /info /rfc8174 - [RFC8615]
-
Nottingham, M., "Well-Known Uniform Resource Identifiers (URIs)", RFC 8615, DOI 10
.17487 , , <https:///RFC8615 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 , , <https:///RFC9110 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 , , <https:///RFC9112 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 , , <https:///RFC9810 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 , , <https:///RFC9205 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 , , <https:///RFC2510 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 , , <https:///RFC4210 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 , , <https:///RFC5246 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 , , <https:///RFC6712 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 , , <https:///RFC7296 www >..rfc -editor .org /info /rfc7296 - [RFC8446]
-
Rescorla, E., "The Transport Layer Security (TLS) Protocol Version 1.3", RFC 8446, DOI 10
.17487 , , <https:///RFC8446 www >..rfc -editor .org /info /rfc8446 - [RFC9293]
-
Eddy, W., Ed., "Transmission Control Protocol (TCP)", STD 7, RFC 9293, DOI 10
.17487 , , <https:///RFC9293 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 , , <https:///RFC9480 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 , , <https:///RFC9483 www >..rfc -editor .org /info /rfc9483 - [RFC9530]
-
Polli, R. and L. Pardue, "Digest Fields", RFC 9530, DOI 10
.17487 , , <https:///RFC9530 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.¶