Skip to content

Tested implementations

The integration tests run the library against independent CMP implementations. CI runs the open ones on every push and pull request. The proprietary clients run locally only.

In CI

Peer Version Direction Scenarios
EJBCA Community Edition 9.6.3 Client against EJBCA ir with RSA, P-384 and SLH-DSA keys, cr including one protected with an SLH-DSA key, kur with a new and the same key, p10cr including an SLH-DSA request, extension override, chain verification, wrong secret and wrong subject refusals, general messages refused with badRequest
OpenSSL cmp 3.5 and 4.0 Client against the OpenSSL mock server ir, cr, kur, p10cr, rr, polling, failure info and support messages. SLH-DSA proofs, PKCS #10 requests and message protection. Root CA key updates made by OpenSSL whose old or new root has an SLH-DSA key, and a refused forged one. Central key generation in a signed cr
OpenSSL cmp 3.5 and 4.0 OpenSSL client against the server Revocation, delayed enrollment and revocation with polling, support messages and the encrypted certificate method (-popo 2) for RSA and EC keys. OpenSSL 4.0 also enrolls ML-KEM keys that way. ir, cr, kur and p10cr with SLH-DSA keys, the cr and kur protected with an SLH-DSA key. ir and kur at a CA with an SLH-DSA key that also signs the responses. Root CA key updates whose old or new root has an SLH-DSA key, which OpenSSL verifies. Central key generation (-centralkeygen) in a MAC-protected ir and in a cr signed with an EC or RSA key
OpenSSL cms 3.5 and 4.0 cms package EnvelopedData in both directions. ML-KEM cases need 4.0
Nokia NCM Hosted instance Client against NCM p10cr with PasswordBasedMac and with a signature, re-enrollment, kur with a new and the same key, rr and support messages
Siemens CMP test suite Pinned commit Suite against the server The conformance tests, with WithStrictProfileValidation, implicit confirmation and a registration authority

The NCM tests run for pushes to dev and main, once a week and on request, never for pull requests. They need the endpoint and credentials in repository secrets.

Locally

The Insta Certifier 10 cmpclient and the Insta Certifier 7 ssh-cmpclient are proprietary, so CI does not run them. The tests need a local image built from your own copies. Both clients break RFC 4211 and RFC 9483 rules in places. The tests check that the server defaults refuse those requests and that the matching option accepts them:

Client and operation Server setting needed
cmpclient ir, cr and kur with a signature proof of possession WithPoposkInputVariants
cmpclient p10cr and ir from a CSR template None
cmpclient rr WithOptionalRevocationReason
cmpclient genm (--type info), which sends no items None
cmpclient ir that waits for a decision, polled without recipNonce WithOptionalPollReqRecipNonce
ssh-cmpclient INITIALIZE, ENROLL, P10CR and UPDATE with a new key None
ssh-cmpclient UPDATE without -P, which keeps the key and sends no proof of possession WithSignatureProtectionPOP
ssh-cmpclient POLL after an INITIALIZE that waits for a decision, without recipNonce WithOptionalPollReqRecipNonce
ssh-cmpclient REVOKE Not accepted, it sends pvno 0

WithStrictProfileValidation refuses MAC-protected requests from ssh-cmpclient and from cmpclient without --sender, because their sender is the NULL-DN. It also refuses cmpclient requests that carry poposkInput and a signed ssh-cmpclient UPDATE, which leaves the signer certificate out of extraCerts.

Other clients

Client Note
OpenSSL 3.0 and 3.2 Read an encrypted RSA certificate only as EncryptedValue, which the server sends to CMP version 2 requests
Bouncy Castle CertificateResponse Reads only EnvelopedData. Send version 3 for RSA keys or set WithEnvelopedDataForVersion2 on the server

Running the tests

Testing explains the prerequisites and the Make targets.