=pod
{- OpenSSL::safe::output_do_not_edit_headers(); -}

=head1 NAME

openssl-cmp - Certificate Management Protocol (CMP, RFC 4210) application

=head1 SYNOPSIS

B<openssl> B<cmp>
[B<-help>]
[B<-config> I<filename>]
[B<-section> I<names>]
[B<-verbosity> I<level>]

Generic message options:

[B<-cmd> I<ir|cr|kur|p10cr|rr|genm>]
[B<-infotype> I<name>]
[B<-geninfo> I<OID:int:N>]

Certificate enrollment options:

[B<-newkey> I<filename>|I<uri>]
[B<-newkeypass> I<arg>]
[B<-subject> I<name>]
[B<-issuer> I<name>]
[B<-days> I<number>]
[B<-reqexts> I<name>]
[B<-sans> I<spec>]
[B<-san_nodefault>]
[B<-policies> I<name>]
[B<-policy_oids> I<names>]
[B<-policy_oids_critical>]
[B<-popo> I<number>]
[B<-csr> I<filename>]
[B<-out_trusted> I<filenames>|I<uris>]
[B<-implicit_confirm>]
[B<-disable_confirm>]
[B<-certout> I<filename>]
[B<-chainout> I<filename>]

Certificate enrollment and revocation options:

[B<-oldcert> I<filename>|I<uri>]
[B<-revreason> I<number>]

Message transfer options:

[B<-server> I<[http[s]://][userinfo@]host[:port][/path][?query][#fragment]>]
[B<-proxy> I<[http[s]://][userinfo@]host[:port][/path][?query][#fragment]>]
[B<-no_proxy> I<addresses>]
[B<-recipient> I<name>]
[B<-path> I<remote_path>]
[B<-keep_alive> I<value>]
[B<-msg_timeout> I<seconds>]
[B<-total_timeout> I<seconds>]

Server authentication options:

[B<-trusted> I<filenames>|I<uris>]
[B<-untrusted> I<filenames>|I<uris>]
[B<-srvcert> I<filename>|I<uri>]
[B<-expect_sender> I<name>]
[B<-ignore_keyusage>]
[B<-unprotected_errors>]
[B<-extracertsout> I<filename>]
[B<-cacertsout> I<filename>]

Client authentication and protection options:

[B<-ref> I<value>]
[B<-secret> I<arg>]
[B<-cert> I<filename>|I<uri>]
[B<-own_trusted> I<filenames>|I<uris>]
[B<-key> I<filename>|I<uri>]
[B<-keypass> I<arg>]
[B<-digest> I<name>]
[B<-mac> I<name>]
[B<-extracerts> I<filenames>|I<uris>]
[B<-unprotected_requests>]

Credentials format options:

[B<-certform> I<PEM|DER>]
[B<-keyform> I<PEM|DER|P12|ENGINE>]
[B<-otherpass> I<arg>]
{- $OpenSSL::safe::opt_engine_synopsis -}{- $OpenSSL::safe::opt_provider_synopsis -}

Random state options:

{- $OpenSSL::safe::opt_r_synopsis -}

TLS connection options:

[B<-tls_used>]
[B<-tls_cert> I<filename>|I<uri>]
[B<-tls_key> I<filename>|I<uri>]
[B<-tls_keypass> I<arg>]
[B<-tls_extra> I<filenames>|I<uris>]
[B<-tls_trusted> I<filenames>|I<uris>]
[B<-tls_host> I<name>]

Client-side debugging options:

[B<-batch>]
[B<-repeat> I<number>]
[B<-reqin> I<filenames>]
[B<-reqin_new_tid>]
[B<-reqout> I<filenames>]
[B<-rspin> I<filenames>]
[B<-rspout> I<filenames>]
[B<-use_mock_srv>]

Mock server options:

[B<-port> I<number>]
[B<-max_msgs> I<number>]
[B<-srv_ref> I<value>]
[B<-srv_secret> I<arg>]
[B<-srv_cert> I<filename>|I<uri>]
[B<-srv_key> I<filename>|I<uri>]
[B<-srv_keypass> I<arg>]
[B<-srv_trusted> I<filenames>|I<uris>]
[B<-srv_untrusted> I<filenames>|I<uris>]
[B<-ref_cert> I<filename>|I<uri>]
[B<-rsp_cert> I<filename>|I<uri>]
[B<-rsp_extracerts> I<filenames>|I<uris>]
[B<-rsp_capubs> I<filenames>|I<uris>]
[B<-poll_count> I<number>]
[B<-check_after> I<number>]
[B<-grant_implicitconf>]
[B<-pkistatus> I<number>]
[B<-failure> I<number>]
[B<-failurebits> I<number>]
[B<-statusstring> I<arg>]
[B<-send_error>]
[B<-send_unprotected>]
[B<-send_unprot_err>]
[B<-accept_unprotected>]
[B<-accept_unprot_err>]
[B<-accept_raverified>]

Certificate verification options, for both CMP and TLS:

{- $OpenSSL::safe::opt_v_synopsis -}

=head1 DESCRIPTION

The B<cmp> command is a client implementation for the Certificate
Management Protocol (CMP) as defined in RFC4210.
It can be used to request certificates from a CA server,
update their certificates,
request certificates to be revoked, and perform other types of CMP requests.

=head1 OPTIONS

=over 4

=item B<-help>

Display a summary of all options

=item B<-config> I<filename>

Configuration file to use.
An empty string C<""> means none.
Default filename is from the environment variable C<OPENSSL_CONF>.

=item B<-section> I<names>

Section(s) to use within config file defining CMP options.
An empty string C<""> means no specific section.
Default is C<cmp>.

Multiple section names may be given, separated by commas and/or whitespace
(where in the latter case the whole argument must be enclosed in "...").
Contents of sections named later may override contents of sections named before.
In any case, as usual, the C<[default]> section and finally the unnamed
section (as far as present) can provide per-option fallback values.

=item B<-verbosity> I<level>

Level of verbosity for logging, error output, etc.
0 = EMERG, 1 = ALERT, 2 = CRIT, 3 = ERR, 4 = WARN, 5 = NOTE,
6 = INFO, 7 = DEBUG, 8 = TRACE.
Defaults to 6 = INFO.

=back

=head2 Generic message options

=over 4

=item B<-cmd> I<ir|cr|kur|p10cr|rr|genm>

CMP command to execute.
Currently implemented commands are:

=over 8

=item  ir E<nbsp>  - Initialization Request

=item  cr E<nbsp>  - Certificate Request

=item  p10cr - PKCS#10 Certification Request (for legacy support)

=item  kur E<nbsp>E<nbsp>- Key Update Request

=item  rr E<nbsp>  - Revocation Request

=item  genm  - General Message

=back

B<ir> requests initialization of an end entity into a PKI hierarchy
by issuing a first certificate.

B<cr> requests issuing an additional certificate for an end entity already
initialized to the PKI hierarchy.

B<p10cr> requests issuing an additional certificate similarly to B<cr>
but using legacy PKCS#10 CSR format.

B<kur> requests a (key) update for an existing certificate.

B<rr> requests revocation of an existing certificate.

B<genm> requests information using a General Message, where optionally
included B<InfoTypeAndValue>s may be used to state which info is of interest.
Upon receipt of the General Response, information about all received
ITAV B<infoType>s is printed to stdout.

=item B<-infotype> I<name>

Set InfoType name to use for requesting specific info in B<genm>,
e.g., C<signKeyPairTypes>.

=item B<-geninfo> I<OID:int:N>

generalInfo integer values to place in request PKIHeader with given OID,
e.g., C<1.2.3.4:int:56789>.

=back

=head2 Certificate enrollment options

=over 4

=item B<-newkey> I<filename>|I<uri>

The source of the private or public key for the certificate requested
in Initialization Request (IR), Certification Request(CR), or
Key Update Request (KUR).
Defaults to the public key in the PKCS#10 CSR given with the B<-csr> option,
the public key of the reference certificate, or the current client key.

=item B<-newkeypass> I<arg>

Pass phrase source for the key given with the B<-newkey> option.
If not given here, the password will be prompted for if needed.

For more information about the format of I<arg> see
L<openssl-passphrase-options(1)>.

=item B<-subject> I<name>

X509 Distinguished Name (DN) of subject to use in the requested certificate
template.
For KUR, it defaults to the public key
in the PKCS#10 CSR given with the B<-csr> option, if provided,
or of the reference certificate (see B<-oldcert>) if provided.
This default is used for IR and CR only if no SANs are set.
If the NULL-DN (C<"/">) is given then no subject is placed in the template.

If provided and neither of B<-cert>, B<-oldcert>, or B<-csr> is given,
the subject DN is used as fallback sender of outgoing CMP messages.

The argument must be formatted as I</type0=value0/type1=value1/type2=...>.
Special characters may be escaped by C<\> (backslash); whitespace is retained.
Empty values are permitted, but the corresponding type will not be included.
Giving a single C</> will lead to an empty sequence of RDNs (a NULL-DN).
Multi-valued RDNs can be formed by placing a C<+> character instead of a C</>
between the AttributeValueAssertions (AVAs) that specify the members of the set.
Example:

C</DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe>

=item B<-issuer> I<name>

X509 issuer Distinguished Name (DN) of the CA server
to place in the requested certificate template in IR/CR/KUR.
If the NULL-DN (C<"/">) is given then no issuer is placed in the template.

If provided and neither B<-recipient> nor B<-srvcert> is given,
the issuer DN is used as fallback recipient of outgoing CMP messages.

The argument must be formatted as I</type0=value0/type1=value1/type2=...>.
For details see the description of the B<-subject> option.

=item B<-days> I<number>

Number of days the new certificate is requested to be valid for, counting from
the current time of the host.
Also triggers the explicit request that the
validity period starts from the current time (as seen by the host).

=item B<-reqexts> I<name>

Name of section in OpenSSL config file defining certificate request extensions.
If the B<-csr> option is present, these extensions augment the extensions
contained the given PKCS#10 CSR, overriding any extensions with same OIDs.

=item B<-sans> I<spec>

One or more IP addresses, email addresses, DNS names, or URIs
separated by commas or whitespace
(where in the latter case the whole argument must be enclosed in "...")
to add as Subject Alternative Name(s) (SAN) certificate request extension.
If the special element "critical" is given the SANs are flagged as critical.
Cannot be used if any Subject Alternative Name extension is set via B<-reqexts>.

=item B<-san_nodefault>

When Subject Alternative Names are not given via B<-sans>
nor defined via B<-reqexts>,
they are copied by default from the reference certificate (see B<-oldcert>).
This can be disabled by giving the B<-san_nodefault> option.

=item B<-policies> I<name>

Name of section in OpenSSL config file defining policies to be set
as certificate request extension.
This option cannot be used together with B<-policy_oids>.

=item B<-policy_oids> I<names>

One or more OID(s), separated by commas and/or whitespace
(where in the latter case the whole argument must be enclosed in "...")
to add as certificate policies request extension.
This option cannot be used together with B<-policies>.

=item B<-policy_oids_critical>

Flag the policies given with B<-policy_oids> as critical.

=item B<-popo> I<number>

Proof-of-Possession (POPO) method to use for IR/CR/KUR; values: C<-1>..<2> where
C<-1> = NONE, C<0> = RAVERIFIED, C<1> = SIGNATURE (default), C<2> = KEYENC.

Note that a signature-based POPO can only be produced if a private key
is provided via the B<-newkey> or B<-key> options.

=item B<-csr> I<filename>

PKCS#10 CSR in PEM or DER format containing a certificate request.
With B<-cmd> I<p10cr> it is used directly in a legacy P10CR message.
When used with B<-cmd> I<ir>, I<cr>, or I<kur>, it is transformed into the
respective regular CMP request.
It may also be used with B<-cmd> I<rr> to specify the certificate to be revoked
via the included subject name and public key.
Its subject is used as fallback sender in CMP message headers
if B<-cert> and B<-oldcert> are not given.

=item B<-out_trusted> I<filenames>|I<uris>

Trusted certificate(s) to use for validating the newly enrolled certificate.

Multiple sources may be given, separated by commas and/or whitespace
(where in the latter case the whole argument must be enclosed in "...").
Each source may contain multiple certificates.

The certificate verification options
B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
only affect the certificate verification enabled via this option.

=item B<-implicit_confirm>

Request implicit confirmation of newly enrolled certificates.

=item B<-disable_confirm>

Do not send certificate confirmation message for newly enrolled certificate
without requesting implicit confirmation
to cope with broken servers not supporting implicit confirmation correctly.
B<WARNING:> This leads to behavior violating RFC 4210.

=item B<-certout> I<filename>

The file where the newly enrolled certificate should be saved.

=item B<-chainout> I<filename>

The file where the chain of the newly enrolled certificate should be saved.

=back

=head2 Certificate enrollment and revocation options

=over 4

=item B<-oldcert> I<filename>|I<uri>

The certificate to be updated (i.e., renewed or re-keyed) in Key Update Request
(KUR) messages or to be revoked in Revocation Request (RR) messages.
For KUR the certificate to be updated defaults to B<-cert>,
and the resulting certificate is called I<reference certificate>.
For RR the certificate to be revoked can also be specified using B<-csr>.

The reference certificate, if any, is also used for
deriving default subject DN and Subject Alternative Names and the
default issuer entry in the requested certificate template of an IR/CR/KUR.
Its subject is used as sender of outgoing messages if B<-cert> is not given.
Its issuer is used as default recipient in CMP message headers
if neither B<-recipient>, B<-srvcert>, nor B<-issuer> is given.

=item B<-revreason> I<number>

Set CRLReason to be included in revocation request (RR); values: C<0>..C<10>
or C<-1> for none (which is the default).

Reason numbers defined in RFC 5280 are:

   CRLReason ::= ENUMERATED {
        unspecified             (0),
        keyCompromise           (1),
        cACompromise            (2),
        affiliationChanged      (3),
        superseded              (4),
        cessationOfOperation    (5),
        certificateHold         (6),
        -- value 7 is not used
        removeFromCRL           (8),
        privilegeWithdrawn      (9),
        aACompromise           (10)
    }

=back

=head2 Message transfer options

=over 4

=item B<-server> I<[http[s]://][userinfo@]host[:port][/path][?query][#fragment]>

The DNS hostname or IP address and optionally port
of the CMP server to connect to using HTTP(S).
This excludes I<-port> and I<-use_mock_srv> and is ignored with I<-rspin>.

The scheme C<https> may be given only if the B<-tls_used> option is provided.
In this case the default port is 443, else 80.
The optional userinfo and fragment components are ignored.
Any given query component is handled as part of the path component.
If a path is included it provides the default value for the B<-path> option.

=item B<-proxy> I<[http[s]://][userinfo@]host[:port][/path][?query][#fragment]>

The HTTP(S) proxy server to use for reaching the CMP server unless B<-no_proxy>
applies, see below.
The proxy port defaults to 80 or 443 if the scheme is C<https>; apart from that
the optional C<http://> or C<https://> prefix is ignored (note that TLS may be
enabled by B<-tls_used>), as well as any path, userinfo, and query, and fragment
components.
Defaults to the environment variable C<http_proxy> if set, else C<HTTP_PROXY>
in case no TLS is used, otherwise C<https_proxy> if set, else C<HTTPS_PROXY>.
This option is ignored if I<-server> is not given.

=item B<-no_proxy> I<addresses>

List of IP addresses and/or DNS names of servers
not to use an HTTP(S) proxy for, separated by commas and/or whitespace
(where in the latter case the whole argument must be enclosed in "...").
Default is from the environment variable C<no_proxy> if set, else C<NO_PROXY>.
This option is ignored if I<-server> is not given.

=item B<-recipient> I<name>

Distinguished Name (DN) to use in the recipient field of CMP request message
headers, i.e., the CMP server (usually the addressed CA).

The recipient field in the header of a CMP message is mandatory.
If not given explicitly the recipient is determined in the following order:
the subject of the CMP server certificate given with the B<-srvcert> option,
the B<-issuer> option,
the issuer of the certificate given with the B<-oldcert> option,
the issuer of the CMP client certificate (B<-cert> option),
as far as any of those is present, else the NULL-DN as last resort.

The argument must be formatted as I</type0=value0/type1=value1/type2=...>.
For details see the description of the B<-subject> option.

=item B<-path> I<remote_path>

HTTP path at the CMP server (aka CMP alias) to use for POST requests.
Defaults to any path given with B<-server>, else C<"/">.

=item B<-keep_alive> I<value>

If the given value is 0 then HTTP connections are not kept open
after receiving a response, which is the default behavior for HTTP 1.0.
If the value is 1 or 2 then persistent connections are requested.
If the value is 2 then persistent connections are required,
i.e., in case the server does not grant them an error occurs.
The default value is 1, which means preferring to keep the connection open.

=item B<-msg_timeout> I<seconds>

Number of seconds (or 0 for infinite) a CMP request-response message round trip
is allowed to take before a timeout error is returned.
Default is to use the B<-total_timeout> setting.

=item B<-total_timeout> I<seconds>

Maximum number seconds an overall enrollment transaction may take,
including attempts polling for certificates on C<waiting> PKIStatus.
Default is 0 (infinite).

=back

=head2 Server authentication options

=over 4

=item B<-trusted> I<filenames>|I<uris>

When validating signature-based protection of CMP response messages,
these are the CA certificate(s) to trust while checking certificate chains
during CMP server authentication.
This option gives more flexibility than the B<-srvcert> option because the
server-side CMP signer certificate is not pinned but may be any certificate
for which a chain to one of the given trusted certificates can be constructed.

If no B<-trusted>, B<-srvcert>, and B<-secret> option is given
then protected response messages from the server are not authenticated.

Multiple sources may be given, separated by commas and/or whitespace
(where in the latter case the whole argument must be enclosed in "...").
Each source may contain multiple certificates.

The certificate verification options
B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
have no effect on the certificate verification enabled via this option.

=item B<-untrusted> I<filenames>|I<uris>

Non-trusted intermediate CA certificate(s).
Any extra certificates given with the B<-cert> option are appended to it.
All these certificates may be useful for cert path construction
for the CMP client certificate (to include in the extraCerts field of outgoing
messages) and for the TLS client certificate (if TLS is enabled)
as well as for chain building
when validating the CMP server certificate (checking signature-based
CMP message protection) and when validating newly enrolled certificates.

Multiple sources may be given, separated by commas and/or whitespace.
Each file may contain multiple certificates.

=item B<-srvcert> I<filename>|I<uri>

The specific CMP server certificate to expect and directly trust (even if it is
expired) when validating signature-based protection of CMP response messages.
May be set alternatively to the B<-trusted> option to pin the accepted server.

If set, the subject of the certificate is also used
as default value for the recipient of CMP requests
and as default value for the expected sender of incoming CMP messages.

=item B<-expect_sender> I<name>

Distinguished Name (DN) expected in the sender field of incoming CMP messages.
Defaults to the subject DN of the pinned B<-srvcert>, if any.

This can be used to make sure that only a particular entity is accepted as
CMP message signer, and attackers are not able to use arbitrary certificates
of a trusted PKI hierarchy to fraudulently pose as a CMP server.
Note that this option gives slightly more freedom than setting the B<-srvcert>,
which pins the server to the holder of a particular certificate, while the
expected sender name will continue to match after updates of the server cert.

The argument must be formatted as I</type0=value0/type1=value1/type2=...>.
For details see the description of the B<-subject> option.

=item B<-ignore_keyusage>

Ignore key usage restrictions in CMP signer certificates when validating
signature-based protection of incoming CMP messages,
else C<digitalSignature> must be allowed for signer certificate.

=item B<-unprotected_errors>

Accept missing or invalid protection of negative responses from the server.
This applies to the following message types and contents:

=over 4

=item * error messages

=item * negative certificate responses (IP/CP/KUP)

=item * negative revocation responses (RP)

=item * negative PKIConf messages

=back

B<WARNING:> This setting leads to unspecified behavior and it is meant
exclusively to allow interoperability with server implementations violating
RFC 4210, e.g.:

=over 4

=item * section 5.1.3.1 allows exceptions from protecting only for special
cases:
"There MAY be cases in which the PKIProtection BIT STRING is deliberately not
used to protect a message [...] because other protection, external to PKIX, will
be applied instead."

=item * section 5.3.21 is clear on ErrMsgContent: "The CA MUST always sign it
with a signature key."

=item * appendix D.4 shows PKIConf message having protection

=back

=item B<-extracertsout> I<filename>

The file where to save all certificates contained in the extraCerts field
of the last received response message (except for pollRep and PKIConf).

=item B<-cacertsout> I<filename>

The file where to save any CA certificates contained in the caPubs field of
the last received certificate response (i.e., IP, CP, or KUP) message.

=back

=head2 Client authentication options

=over 4

=item B<-ref> I<value>

Reference number/string/value to use as fallback senderKID; this is required
if no sender name can be determined from the B<-cert> or <-subject> options and
is typically used when authenticating with pre-shared key (password-based MAC).

=item B<-secret> I<arg>

Prefer PBM-based message protection with given source of a secret value.
The secret is used for creating PBM-based protection of outgoing messages
and (as far as needed) for validating PBM-based protection of incoming messages.
PBM stands for Password-Based Message Authentication Code.
This takes precedence over the B<-cert> and B<-key> options.

For more information about the format of I<arg> see
L<openssl-passphrase-options(1)>.

=item B<-cert> I<filename>|I<uri>

The client's current CMP signer certificate.
Requires the corresponding key to be given with B<-key>.
The subject of this certificate will be used as sender of outgoing CMP messages,
while the subject of B<-oldcert> or B<-subjectName> may provide fallback values.
The issuer of this certificate is used as one of the recipient fallback values
and as fallback issuer entry in the certificate template of IR/CR/KUR.
When using signature-based message protection, this "protection certificate"
will be included first in the extraCerts field of outgoing messages
and the signature is done with the corresponding key.
In Initialization Request (IR) messages this can be used for authenticating
using an external entity certificate as defined in appendix E.7 of RFC 4210.
For Key Update Request (KUR) messages this is also used as
the certificate to be updated if the B<-oldcert> option is not given.
If the file includes further certs, they are appended to the untrusted certs
because they typically constitute the chain of the client certificate, which
is included in the extraCerts field in signature-protected request messages.

=item B<-own_trusted> I<filenames>|I<uris>

If this list of certificates is provided then the chain built for
the client-side CMP signer certificate given with the B<-cert> option
is verified using the given certificates as trust anchors.

Multiple sources may be given, separated by commas and/or whitespace
(where in the latter case the whole argument must be enclosed in "...").
Each source may contain multiple certificates.

The certificate verification options
B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
have no effect on the certificate verification enabled via this option.

=item B<-key> I<filename>|I<uri>

The corresponding private key file for the client's current certificate given in
the B<-cert> option.
This will be used for signature-based message protection unless
the B<-secret> option indicating PBM or B<-unprotected_requests> is given.

=item B<-keypass> I<arg>

Pass phrase source for the private key given with the B<-key> option.
Also used for B<-cert> and B<-oldcert> in case it is an encrypted PKCS#12 file.
If not given here, the password will be prompted for if needed.

For more information about the format of I<arg> see
L<openssl-passphrase-options(1)>.

=item B<-digest> I<name>

Specifies name of supported digest to use in RFC 4210's MSG_SIG_ALG
and as the one-way function (OWF) in MSG_MAC_ALG.
If applicable, this is used for message protection and
Proof-of-Possession (POPO) signatures.
To see the list of supported digests, use C<openssl list -digest-commands>.
Defaults to C<sha256>.

=item B<-mac> I<name>

Specifies the name of the MAC algorithm in MSG_MAC_ALG.
To get the names of supported MAC algorithms use C<openssl list -mac-algorithms>
and possibly combine such a name with the name of a supported digest algorithm,
e.g., hmacWithSHA256.
Defaults to C<hmac-sha1> as per RFC 4210.

=item B<-extracerts> I<filenames>|I<uris>

Certificates to append in the extraCerts field when sending messages.
They can be used as the default CMP signer certificate chain to include.

Multiple sources may be given, separated by commas and/or whitespace
(where in the latter case the whole argument must be enclosed in "...").
Each source may contain multiple certificates.

=item B<-unprotected_requests>

Send messages without CMP-level protection.

=back

=head2 Credentials format options

=over 4

=item B<-certform> I<PEM|DER>

File format to use when saving a certificate to a file.
Default value is PEM.

=item B<-keyform> I<PEM|DER|P12|ENGINE>

The format of the key input; unspecified by default.
See L<openssl(1)/Format Options> for details.

=item B<-otherpass> I<arg>

Pass phrase source for certificate given with the B<-trusted>, B<-untrusted>,
B<-own_trusted>, B<-srvcert>, B<-out_trusted>, B<-extracerts>,
B<-srv_trusted>, B<-srv_untrusted>, B<-rsp_extracerts>, B<-rsp_capubs>,
B<-tls_extra>, and B<-tls_trusted> options.
If not given here, the password will be prompted for if needed.

For more information about the format of I<arg> see
L<openssl-passphrase-options(1)>.

{- $OpenSSL::safe::opt_engine_item -}

{- output_off() if $disabled{"deprecated-3.0"}; "" -}
As an alternative to using this combination:

    -engine {engineid} -key {keyid} -keyform ENGINE

... it's also possible to just give the key ID in URI form to B<-key>,
like this:

    -key org.openssl.engine:{engineid}:{keyid}

This applies to all options specifying keys: B<-key>, B<-newkey>, and
B<-tls_key>.
{- output_on() if $disabled{"deprecated-3.0"}; "" -}

=back

=head2 Provider options

=over 4

{- $OpenSSL::safe::opt_provider_item -}

=back

=head2 Random state options

=over 4

{- $OpenSSL::safe::opt_r_item -}

=back

=head2 TLS connection options

=over 4

=item B<-tls_used>

Enable using TLS (even when other TLS-related options are not set)
for message exchange with CMP server via HTTP.
This option is not supported with the I<-port> option
and is ignored with the I<-use_mock_srv> and I<-rspin> options
or if the I<-server> option is not given.

The following TLS-related options are ignored if B<-tls_used> is not given.

=item B<-tls_cert> I<filename>|I<uri>

Client's TLS certificate to use for authenticating to the TLS server.
If the source includes further certs they are used (along with B<-untrusted>
certs) for constructing the client cert chain provided to the TLS server.

=item B<-tls_key> I<filename>|I<uri>

Private key for the client's TLS certificate.

=item B<-tls_keypass> I<arg>

Pass phrase source for client's private TLS key B<-tls_key>.
Also used for B<-tls_cert> in case it is an encrypted PKCS#12 file.
If not given here, the password will be prompted for if needed.

For more information about the format of I<arg> see
L<openssl-passphrase-options(1)>.

=item B<-tls_extra> I<filenames>|I<uris>

Extra certificates to provide to the TLS server during handshake.

=item B<-tls_trusted> I<filenames>|I<uris>

Trusted certificate(s) to use for validating the TLS server certificate.
This implies hostname validation.

Multiple sources may be given, separated by commas and/or whitespace
(where in the latter case the whole argument must be enclosed in "...").
Each source may contain multiple certificates.

The certificate verification options
B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
have no effect on the certificate verification enabled via this option.

=item B<-tls_host> I<name>

Address to be checked during hostname validation.
This may be a DNS name or an IP address.
If not given it defaults to the B<-server> address.

=back

=head2 Client-side debugging options

=over 4

=item B<-batch>

Do not interactively prompt for input, for instance when a password is needed.
This can be useful for batch processing and testing.

=item B<-repeat> I<number>

Invoke the command the given positive number of times with the same parameters.
Default is one invocation.

=item B<-reqin> I<filenames>

Take sequence of CMP requests from file(s).

Multiple filenames may be given, separated by commas and/or whitespace
(where in the latter case the whole argument must be enclosed in "...").
As many files are read as needed for a complete transaction.

=item B<-reqin_new_tid>

Use a fresh transactionID for CMP request messages read using B<-reqin>,
which requires re-protecting them as far as they were protected before.
This may be needed in case the sequence of requests is reused
and the CMP server complains that the transaction ID has already been used.

=item B<-reqout> I<filenames>

Save sequence of CMP requests to file(s).

Multiple filenames may be given, separated by commas and/or whitespace.
As many files are written as needed to store the complete transaction.

=item B<-rspin> I<filenames>

Process sequence of CMP responses provided in file(s), skipping server.
This excludes I<-server>, I<-port>, and I<-use_mock_srv>.

Multiple filenames may be given, separated by commas and/or whitespace.
As many files are read as needed for the complete transaction.

=item B<-rspout> I<filenames>

Save sequence of CMP responses to file(s).

Multiple filenames may be given, separated by commas and/or whitespace.
As many files are written as needed to store the complete transaction.

=item B<-use_mock_srv>

Test the client using the internal CMP server mock-up at API level,
bypassing socket-based transfer via HTTP.
This excludes I<-server>, I<-port>, and I<-rspin>.

=back

=head2 Mock server options

=over 4

=item B<-port> I<number>

Act as HTTP-based CMP server mock-up listening on the given port.
This excludes I<-server>, I<-rspin>, and I<-use_mock_srv>.

=item B<-max_msgs> I<number>

Maximum number of CMP (request) messages the CMP HTTP server mock-up
should handle, which must be nonnegative.
The default value is 0, which means that no limit is imposed.
In any case the server terminates on internal errors, but not when it
detects a CMP-level error that it can successfully answer with an error message.

=item B<-srv_ref> I<value>

Reference value to use as senderKID of server in case no B<-srv_cert> is given.

=item B<-srv_secret> I<arg>

Password source for server authentication with a pre-shared key (secret).

=item B<-srv_cert> I<filename>|I<uri>

Certificate of the server.

=item B<-srv_key> I<filename>|I<uri>

Private key used by the server for signing messages.

=item B<-srv_keypass> I<arg>

Server private key (and cert) file pass phrase source.

=item B<-srv_trusted> I<filenames>|I<uris>

Trusted certificates for client authentication.

The certificate verification options
B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
have no effect on the certificate verification enabled via this option.

=item B<-srv_untrusted> I<filenames>|I<uris>

Intermediate CA certs that may be useful when validating client certificates.

=item B<-ref_cert> I<filename>|I<uri>

Certificate to be expected for RR messages and any oldCertID in KUR messages.

=item B<-rsp_cert> I<filename>|I<uri>

Certificate to be returned as mock enrollment result.

=item B<-rsp_extracerts> I<filenames>|I<uris>

Extra certificates to be included in mock certification responses.

=item B<-rsp_capubs> I<filenames>|I<uris>

CA certificates to be included in mock Initialization Response (IP) message.

=item B<-poll_count> I<number>

Number of times the client must poll before receiving a certificate.

=item B<-check_after> I<number>

The checkAfter value (number of seconds to wait) to include in poll response.

=item B<-grant_implicitconf>

Grant implicit confirmation of newly enrolled certificate.

=item B<-pkistatus> I<number>

PKIStatus to be included in server response.
Valid range is 0 (accepted) .. 6 (keyUpdateWarning).

=item B<-failure> I<number>

A single failure info bit number to be included in server response.
Valid range is 0 (badAlg) .. 26 (duplicateCertReq).

=item B<-failurebits> I<number>
Number representing failure bits to be included in server response.
Valid range is 0 .. 2^27 - 1.

=item B<-statusstring> I<arg>

Text to be included as status string in server response.

=item B<-send_error>

Force server to reply with error message.

=item B<-send_unprotected>

Send response messages without CMP-level protection.

=item B<-send_unprot_err>

In case of negative responses, server shall send unprotected error messages,
certificate responses (IP/CP/KUP), and revocation responses (RP).
WARNING: This setting leads to behavior violating RFC 4210.

=item B<-accept_unprotected>

Accept missing or invalid protection of requests.

=item B<-accept_unprot_err>

Accept unprotected error messages from client.

=item B<-accept_raverified>

Accept RAVERIFED as proof-of-possession (POPO).

=back

=head2 Certificate verification options, for both CMP and TLS

=over 4

{- $OpenSSL::safe::opt_v_item -}

The certificate verification options
B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
only affect the certificate verification enabled via the B<-out_trusted> option.

=back

=head1 NOTES

When setting up CMP configurations and experimenting with enrollment options
typically various errors occur until the configuration is correct and complete.
When the CMP server reports an error the client will by default
check the protection of the CMP response message.
Yet some CMP services tend not to protect negative responses.
In this case the client will reject them, and thus their contents are not shown
although they usually contain hints that would be helpful for diagnostics.
For assisting in such cases the CMP client offers a workaround via the
B<-unprotected_errors> option, which allows accepting such negative messages.

=head1 EXAMPLES

=head2 Simple examples using the default OpenSSL configuration file

This CMP client implementation comes with demonstrative CMP sections
in the example configuration file F<openssl/apps/openssl.cnf>,
which can be used to interact conveniently with the Insta Demo CA.

In order to enroll an initial certificate from that CA it is sufficient
to issue the following shell commands.

  export OPENSSL_CONF=/path/to/openssl/apps/openssl.cnf

=begin comment

  wget 'http://pki.certificate.fi:8081/install-ca-cert.html/ca-certificate.crt\
        ?ca-id=632&download-certificate=1' -O insta.ca.crt

=end comment

  openssl genrsa -out insta.priv.pem
  openssl cmp -section insta

This should produce the file F<insta.cert.pem> containing a new certificate
for the private key held in F<insta.priv.pem>.
It can be viewed using, e.g.,

  openssl x509 -noout -text -in insta.cert.pem

In case the network setup requires using an HTTP proxy it may be given as usual
via the environment variable B<http_proxy> or via the B<-proxy> option in the
configuration file or the CMP command-line argument B<-proxy>, for example

  -proxy http://192.168.1.1:8080

In the Insta Demo CA scenario both clients and the server may use the pre-shared
secret I<insta> and the reference value I<3078> to authenticate to each other.

Alternatively, CMP messages may be protected in signature-based manner,
where the trust anchor in this case is F<insta.ca.crt>
and the client may use any certificate already obtained from that CA,
as specified in the B<[signature]> section of the example configuration.
This can be used in combination with the B<[insta]> section simply by

  openssl cmp -section insta,signature

By default the CMP IR message type is used, yet CR works equally here.
This may be specified directly at the command line:

  openssl cmp -section insta -cmd cr

or by referencing in addition the B<[cr]> section of the example configuration:

  openssl cmp -section insta,cr

In order to update the enrolled certificate one may call

  openssl cmp -section insta,kur

using with PBM-based protection or

  openssl cmp -section insta,kur,signature

using signature-based protection.

In a similar way any previously enrolled certificate may be revoked by

  openssl cmp -section insta,rr -trusted insta.ca.crt

or

  openssl cmp -section insta,rr,signature

Many more options can be given in the configuration file
and/or on the command line.
For instance, the B<-reqexts> CLI option may refer to a section in the
configuration file defining X.509 extensions to use in certificate requests,
such as C<v3_req> in F<openssl/apps/openssl.cnf>:

  openssl cmp -section insta,cr -reqexts v3_req

=head2 Certificate enrollment

The following examples do not make use of a configuration file at first.
They assume that a CMP server can be contacted on the local TCP port 80
and accepts requests under the alias I</pkix/>.

For enrolling its very first certificate the client generates a client key
and sends an initial request message to the local CMP server
using a pre-shared secret key for mutual authentication.
In this example the client does not have the CA certificate yet,
so we specify the name of the CA with the B<-recipient> option
and save any CA certificates that we may receive in the C<capubs.pem> file.

In below command line usage examples the C<\> at line ends is used just
for formatting; each of the command invocations should be on a single line.

  openssl genrsa -out cl_key.pem
  openssl cmp -cmd ir -server 127.0.0.1:80/pkix/ -recipient "/CN=CMPserver" \
    -ref 1234 -secret pass:1234-5678 \
    -newkey cl_key.pem -subject "/CN=MyName" \
    -cacertsout capubs.pem -certout cl_cert.pem

=head2 Certificate update

Then, when the client certificate and its related key pair needs to be updated,
the client can send a key update request taking the certs in C<capubs.pem>
as trusted for authenticating the server and using the previous cert and key
for its own authentication.
Then it can start using the new cert and key.

  openssl genrsa -out cl_key_new.pem
  openssl cmp -cmd kur -server 127.0.0.1:80/pkix/ \
    -trusted capubs.pem \
    -cert cl_cert.pem -key cl_key.pem \
    -newkey cl_key_new.pem -certout cl_cert.pem
  cp cl_key_new.pem cl_key.pem

This command sequence can be repated as often as needed.

=head2 Requesting information from CMP server

Requesting "all relevant information" with an empty General Message.
This prints information about all received ITAV B<infoType>s to stdout.

  openssl cmp -cmd genm -server 127.0.0.1/pkix/ -recipient "/CN=CMPserver" \
    -ref 1234 -secret pass:1234-5678

=head2 Using a custom configuration file

For CMP client invocations, in particular for certificate enrollment,
usually many parameters need to be set, which is tedious and error-prone to do
on the command line.
Therefore, the client offers the possibility to read
options from sections of the OpenSSL config file, usually called F<openssl.cnf>.
The values found there can still be extended and even overridden by any
subsequently loaded sections and on the command line.

After including in the configuration file the following sections:

  [cmp]
  server = 127.0.0.1
  path = pkix/
  trusted = capubs.pem
  cert = cl_cert.pem
  key = cl_key.pem
  newkey = cl_key.pem
  certout = cl_cert.pem

  [init]
  recipient = "/CN=CMPserver"
  trusted =
  cert =
  key =
  ref = 1234
  secret = pass:1234-5678-1234-567
  subject = "/CN=MyName"
  cacertsout = capubs.pem

the above enrollment transactions reduce to

  openssl cmp -section cmp,init
  openssl cmp -cmd kur -newkey cl_key_new.pem

and the above transaction using a general message reduces to

  openssl cmp -section cmp,init -cmd genm

=head1 SEE ALSO

L<openssl-genrsa(1)>, L<openssl-ecparam(1)>, L<openssl-list(1)>,
L<openssl-req(1)>, L<openssl-x509(1)>, L<x509v3_config(5)>

=head1 HISTORY

The B<cmp> application was added in OpenSSL 3.0.

The B<-engine option> was deprecated in OpenSSL 3.0.

=head1 COPYRIGHT

Copyright 2007-2022 The OpenSSL Project Authors. All Rights Reserved.

Licensed under the Apache License 2.0 (the "License").  You may not use
this file except in compliance with the License.  You can obtain a copy
in the file LICENSE in the source distribution or at
L<https://www.openssl.org/source/license.html>.

=cut
