Certificate Management Protocol
The Certificate Management Protocol is an Internet protocol standardized by the IETF used for obtaining X.509 public-key certificates in a PKI.
CMP is a very feature-rich and flexible protocol.
So far it is the only protocol with support of all types of cryptography. This includes KEM keys, which have become more important for post-quantum cryptography (PQC).
CMP messages are self-contained, which makes the protocol independent of the transport mechanism and provides end-to-end security also over multiple hops. This distinguishes CMP and CMC from other certificate enrollment protocols including EST.
CMP messages are defined in ASN.1 syntax and encoded using the DER method.
CMP is described in. Enrollment request messages employ the Certificate Request Message Format, described in and updated in.
The only other protocol so far using CRMF is Certificate Management over CMS, described in.
History
The initial version of CMP is described in, the respective CRMF version in. Both were published in March 1999.CMP version 2 was described in, published in September 2005. HTTP transfer for CMP messages was first described by, published in September 2012.
In November 2023,,, and, have been published as well as the focusing on industrial use.
In July 2025, was released, which combines the RFCs 4210 and 9480 into a self-contained document and adds further features, in particular support for KEM keys. At the same time, an update of the specification for HTTP transfer of CMP messages was published in .
PKI Entities
In a Public-Key Infrastructure, so-called end entities act as CMP client, requesting one or more certificates for themselves from a certificate authority, which issues the legal certificates and acts as a CMP server. None or any number of registration authorities, can be used to mediate between the EEs and CAs, having both a downstream CMP server interface and an upstream CMP client interface. Using a "cross-certification request" a CA can get a certificate signed by another CA.Features
- Self-contained messages with protection being independent of message transfer – as opposed to related protocols EST and SCEP, this supports built-in end-to-end proof of origin also over several hops.
- Proof of possession is usually done by a self-signature of the requested certificate contents, but CMP supports also other methods. This is crucial in particular for requesting certificates for KEM-only keys.
- CMP supports the very important aspect of proof of origin in two variants: MAC-based with a shared secret and signature-based.
- Key pair generation is usually done by the client side, but can also be requested from the server side.
- In case an end entity has lost its private key and it is stored by the CA, it might be recovered by requesting a "key pair recovery".
- Full certificate life-cycle support: an end entity can utilize CMP to obtain certificates from a CA, request updates for them, and also get them revoked.
- There are various further types of requests possible, for instance to retrieve CA certificates and to obtain PKI parameters and preferences of the server side.
Transport
CMP messages are usually transferred over HTTP, but any reliable means of transportation can be used.- Encapsulated in HTTP messages, optionally using TLS for additional protection.
- Encapsulated in CoAP messages, optionally using DTLS for additional protection.
- TCP or any other reliable, connection-oriented transport protocol.
- As a file, e.g., over FTP or SCP.
- By email, using the MIME encoding standard.
Implementations
- OpenSSL since version 3.0 includes extensive CMP support in C.
- Bouncy Castle offers CMP support in Java and C#.
- RSA BSAFE Cert-J provides CMP support in C and Java.
- cryptlib provides CMP support in C.
- The CA software products EJBCA, Insta Certifier, Entrust Certificate Authority, Nexus Certificate Manager, DigiCert Device Trust Manager, and IBM z/OS PKI Services, implement subsets of CMPv2.