1OPENSSL-CMP(1ossl)                  OpenSSL                 OPENSSL-CMP(1ossl)
2
3
4

NAME

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

SYNOPSIS

10       openssl cmp [-help] [-config filename] [-section names] [-verbosity
11       level]
12
13       Generic message options:
14
15       [-cmd ir|cr|kur|p10cr|rr|genm] [-infotype name] [-geninfo OID:int:N]
16
17       Certificate enrollment options:
18
19       [-newkey filename|uri] [-newkeypass arg] [-subject name] [-issuer name]
20       [-days number] [-reqexts name] [-sans spec] [-san_nodefault] [-policies
21       name] [-policy_oids names] [-policy_oids_critical] [-popo number] [-csr
22       filename] [-out_trusted filenames|uris] [-implicit_confirm]
23       [-disable_confirm] [-certout filename] [-chainout filename]
24
25       Certificate enrollment and revocation options:
26
27       [-oldcert filename|uri] [-revreason number]
28
29       Message transfer options:
30
31       [-server [http[s]://][userinfo@]host[:port][/path][?query][#fragment]]
32       [-proxy [http[s]://][userinfo@]host[:port][/path][?query][#fragment]]
33       [-no_proxy addresses] [-recipient name] [-path remote_path]
34       [-keep_alive value] [-msg_timeout seconds] [-total_timeout seconds]
35
36       Server authentication options:
37
38       [-trusted filenames|uris] [-untrusted filenames|uris] [-srvcert
39       filename|uri] [-expect_sender name] [-ignore_keyusage]
40       [-unprotected_errors] [-extracertsout filename] [-cacertsout filename]
41
42       Client authentication and protection options:
43
44       [-ref value] [-secret arg] [-cert filename|uri] [-own_trusted
45       filenames|uris] [-key filename|uri] [-keypass arg] [-digest name] [-mac
46       name] [-extracerts filenames|uris] [-unprotected_requests]
47
48       Credentials format options:
49
50       [-certform PEM|DER] [-keyform PEM|DER|P12|ENGINE] [-otherpass arg]
51       [-engine id] [-provider name] [-provider-path path] [-propquery propq]
52
53       Random state options:
54
55       [-rand files] [-writerand file]
56
57       TLS connection options:
58
59       [-tls_used] [-tls_cert filename|uri] [-tls_key filename|uri]
60       [-tls_keypass arg] [-tls_extra filenames|uris] [-tls_trusted
61       filenames|uris] [-tls_host name]
62
63       Client-side debugging options:
64
65       [-batch] [-repeat number] [-reqin filenames] [-reqin_new_tid] [-reqout
66       filenames] [-rspin filenames] [-rspout filenames] [-use_mock_srv]
67
68       Mock server options:
69
70       [-port number] [-max_msgs number] [-srv_ref value] [-srv_secret arg]
71       [-srv_cert filename|uri] [-srv_key filename|uri] [-srv_keypass arg]
72       [-srv_trusted filenames|uris] [-srv_untrusted filenames|uris]
73       [-rsp_cert filename|uri] [-rsp_extracerts filenames|uris] [-rsp_capubs
74       filenames|uris] [-poll_count number] [-check_after number]
75       [-grant_implicitconf] [-pkistatus number] [-failure number]
76       [-failurebits number] [-statusstring arg] [-send_error]
77       [-send_unprotected] [-send_unprot_err] [-accept_unprotected]
78       [-accept_unprot_err] [-accept_raverified]
79
80       Certificate verification options, for both CMP and TLS:
81
82       [-allow_proxy_certs] [-attime timestamp] [-no_check_time]
83       [-check_ss_sig] [-crl_check] [-crl_check_all] [-explicit_policy]
84       [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map]
85       [-partial_chain] [-policy arg] [-policy_check] [-policy_print]
86       [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192]
87       [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num]
88       [-verify_depth num] [-verify_email email] [-verify_hostname hostname]
89       [-verify_ip ip] [-verify_name name] [-x509_strict] [-issuer_checks]
90

DESCRIPTION

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

OPTIONS

99       -help
100           Display a summary of all options
101
102       -config filename
103           Configuration file to use.  An empty string "" means none.  Default
104           filename is from the environment variable "OPENSSL_CONF".
105
106       -section names
107           Section(s) to use within config file defining CMP options.  An
108           empty string "" means no specific section.  Default is "cmp".
109
110           Multiple section names may be given, separated by commas and/or
111           whitespace (where in the latter case the whole argument must be
112           enclosed in "...").  Contents of sections named later may override
113           contents of sections named before.  In any case, as usual, the
114           "[default]" section and finally the unnamed section (as far as
115           present) can provide per-option fallback values.
116
117       -verbosity level
118           Level of verbosity for logging, error output, etc.  0 = EMERG, 1 =
119           ALERT, 2 = CRIT, 3 = ERR, 4 = WARN, 5 = NOTE, 6 = INFO, 7 = DEBUG,
120           8 = TRACE.  Defaults to 6 = INFO.
121
122   Generic message options
123       -cmd ir|cr|kur|p10cr|rr|genm
124           CMP command to execute.  Currently implemented commands are:
125
126           ir    - Initialization Request
127           cr    - Certificate Request
128           p10cr - PKCS#10 Certification Request (for legacy support)
129           kur   - Key Update Request
130           rr    - Revocation Request
131           genm  - General Message
132
133           ir requests initialization of an end entity into a PKI hierarchy by
134           issuing a first certificate.
135
136           cr requests issuing an additional certificate for an end entity
137           already initialized to the PKI hierarchy.
138
139           p10cr requests issuing an additional certificate similarly to cr
140           but using legacy PKCS#10 CSR format.
141
142           kur requests a (key) update for an existing certificate.
143
144           rr requests revocation of an existing certificate.
145
146           genm requests information using a General Message, where optionally
147           included InfoTypeAndValues may be used to state which info is of
148           interest.  Upon receipt of the General Response, information about
149           all received ITAV infoTypes is printed to stdout.
150
151       -infotype name
152           Set InfoType name to use for requesting specific info in genm,
153           e.g., "signKeyPairTypes".
154
155       -geninfo OID:int:N
156           generalInfo integer values to place in request PKIHeader with given
157           OID, e.g., "1.2.3.4:int:56789".
158
159   Certificate enrollment options
160       -newkey filename|uri
161           The source of the private or public key for the certificate
162           requested in Initialization Request (IR), Certification
163           Request(CR), or Key Update Request (KUR).  Defaults to the public
164           key in the PKCS#10 CSR given with the -csr option, the public key
165           of the reference certificate, or the current client key.
166
167       -newkeypass arg
168           Pass phrase source for the key given with the -newkey option.  If
169           not given here, the password will be prompted for if needed.
170
171           For more information about the format of arg see
172           openssl-passphrase-options(1).
173
174       -subject name
175           X509 Distinguished Name (DN) of subject to use in the requested
176           certificate template.  For KUR, it defaults to the public key in
177           the PKCS#10 CSR given with the -csr option, if provided, or of the
178           reference certificate (see -oldcert) if provided.  This default is
179           used for IR and CR only if no SANs are set.  If the NULL-DN ("/")
180           is given then no subject is placed in the template.
181
182           If provided and neither -cert nor -oldcert is given, the subject DN
183           is used as fallback sender of outgoing CMP messages.
184
185           The argument must be formatted as
186           /type0=value0/type1=value1/type2=....  Special characters may be
187           escaped by "\" (backslash); whitespace is retained.  Empty values
188           are permitted, but the corresponding type will not be included.
189           Giving a single "/" will lead to an empty sequence of RDNs (a NULL-
190           DN).  Multi-valued RDNs can be formed by placing a "+" character
191           instead of a "/" between the AttributeValueAssertions (AVAs) that
192           specify the members of the set.  Example:
193
194           "/DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe"
195
196       -issuer name
197           X509 issuer Distinguished Name (DN) of the CA server to place in
198           the requested certificate template in IR/CR/KUR.  If the NULL-DN
199           ("/") is given then no issuer is placed in the template.
200
201           If provided and neither -recipient nor -srvcert is given, the
202           issuer DN is used as fallback recipient of outgoing CMP messages.
203
204           The argument must be formatted as
205           /type0=value0/type1=value1/type2=....  For details see the
206           description of the -subject option.
207
208       -days number
209           Number of days the new certificate is requested to be valid for,
210           counting from the current time of the host.  Also triggers the
211           explicit request that the validity period starts from the current
212           time (as seen by the host).
213
214       -reqexts name
215           Name of section in OpenSSL config file defining certificate request
216           extensions.  If the -csr option is present, these extensions
217           augment the extensions contained the given PKCS#10 CSR, overriding
218           any extensions with same OIDs.
219
220       -sans spec
221           One or more IP addresses, DNS names, or URIs separated by commas or
222           whitespace (where in the latter case the whole argument must be
223           enclosed in "...")  to add as Subject Alternative Name(s) (SAN)
224           certificate request extension.  If the special element "critical"
225           is given the SANs are flagged as critical.  Cannot be used if any
226           Subject Alternative Name extension is set via -reqexts.
227
228       -san_nodefault
229           When Subject Alternative Names are not given via -sans nor defined
230           via -reqexts, they are copied by default from the reference
231           certificate (see -oldcert).  This can be disabled by giving the
232           -san_nodefault option.
233
234       -policies name
235           Name of section in OpenSSL config file defining policies to be set
236           as certificate request extension.  This option cannot be used
237           together with -policy_oids.
238
239       -policy_oids names
240           One or more OID(s), separated by commas and/or whitespace (where in
241           the latter case the whole argument must be enclosed in "...")  to
242           add as certificate policies request extension.  This option cannot
243           be used together with -policies.
244
245       -policy_oids_critical
246           Flag the policies given with -policy_oids as critical.
247
248       -popo number
249           Proof-of-Possession (POPO) method to use for IR/CR/KUR; values:
250           "-1"..<2> where "-1" = NONE, 0 = RAVERIFIED, 1 = SIGNATURE
251           (default), 2 = KEYENC.
252
253           Note that a signature-based POPO can only be produced if a private
254           key is provided via the -newkey or -key options.
255
256       -csr filename
257           PKCS#10 CSR in PEM or DER format containing a certificate request.
258           With -cmd p10cr it is used directly in a legacy P10CR message.
259           When used with -cmd ir, cr, or kur, it is transformed into the
260           respective regular CMP request.  It may also be used with -cmd rr
261           to specify the certificate to be revoked via the included subject
262           name and public key.
263
264       -out_trusted filenames|uris
265           Trusted certificate(s) to use for validating the newly enrolled
266           certificate.
267
268           Multiple sources may be given, separated by commas and/or
269           whitespace (where in the latter case the whole argument must be
270           enclosed in "...").  Each source may contain multiple certificates.
271
272           The certificate verification options -verify_hostname, -verify_ip,
273           and -verify_email only affect the certificate verification enabled
274           via this option.
275
276       -implicit_confirm
277           Request implicit confirmation of newly enrolled certificates.
278
279       -disable_confirm
280           Do not send certificate confirmation message for newly enrolled
281           certificate without requesting implicit confirmation to cope with
282           broken servers not supporting implicit confirmation correctly.
283           WARNING: This leads to behavior violating RFC 4210.
284
285       -certout filename
286           The file where the newly enrolled certificate should be saved.
287
288       -chainout filename
289           The file where the chain of the newly enrolled certificate should
290           be saved.
291
292   Certificate enrollment and revocation options
293       -oldcert filename|uri
294           The certificate to be updated (i.e., renewed or re-keyed) in Key
295           Update Request (KUR) messages or to be revoked in Revocation
296           Request (RR) messages.  For KUR the certificate to be updated
297           defaults to -cert, and the resulting certificate is called
298           reference certificate.  For RR the certificate to be revoked can
299           also be specified using -csr.
300
301           The reference certificate, if any, is also used for deriving
302           default subject DN and Subject Alternative Names and the default
303           issuer entry in the requested certificate template of an IR/CR/KUR.
304           Its subject is used as sender of outgoing messages if -cert is not
305           given.  Its issuer is used as default recipient in CMP message
306           headers if neither -recipient, -srvcert, nor -issuer is given.
307
308       -revreason number
309           Set CRLReason to be included in revocation request (RR); values:
310           0..10 or "-1" for none (which is the default).
311
312           Reason numbers defined in RFC 5280 are:
313
314              CRLReason ::= ENUMERATED {
315                   unspecified             (0),
316                   keyCompromise           (1),
317                   cACompromise            (2),
318                   affiliationChanged      (3),
319                   superseded              (4),
320                   cessationOfOperation    (5),
321                   certificateHold         (6),
322                   -- value 7 is not used
323                   removeFromCRL           (8),
324                   privilegeWithdrawn      (9),
325                   aACompromise           (10)
326               }
327
328   Message transfer options
329       -server [http[s]://][userinfo@]host[:port][/path][?query][#fragment]
330           The DNS hostname or IP address and optionally port of the CMP
331           server to connect to using HTTP(S).  This excludes -port and
332           -use_mock_srv and is ignored with -rspin.
333
334           The scheme "https" may be given only if the -tls_used option is
335           used.  In this case the default port is 443, else 80.  The optional
336           userinfo and fragment components are ignored.  Any given query
337           component is handled as part of the path component.  If a path is
338           included it provides the default value for the -path option.
339
340       -proxy [http[s]://][userinfo@]host[:port][/path][?query][#fragment]
341           The HTTP(S) proxy server to use for reaching the CMP server unless
342           -no_proxy applies, see below.  The proxy port defaults to 80 or 443
343           if the scheme is "https"; apart from that the optional "http://" or
344           "https://" prefix is ignored (note that TLS may be selected by
345           -tls_used), as well as any path, userinfo, and query, and fragment
346           components.  Defaults to the environment variable "http_proxy" if
347           set, else "HTTP_PROXY" in case no TLS is used, otherwise
348           "https_proxy" if set, else "HTTPS_PROXY".  This option is ignored
349           if -server is not given.
350
351       -no_proxy addresses
352           List of IP addresses and/or DNS names of servers not to use an
353           HTTP(S) proxy for, separated by commas and/or whitespace (where in
354           the latter case the whole argument must be enclosed in "...").
355           Default is from the environment variable "no_proxy" if set, else
356           "NO_PROXY".  This option is ignored if -server is not given.
357
358       -recipient name
359           Distinguished Name (DN) to use in the recipient field of CMP
360           request message headers, i.e., the CMP server (usually the
361           addressed CA).
362
363           The recipient field in the header of a CMP message is mandatory.
364           If not given explicitly the recipient is determined in the
365           following order: the subject of the CMP server certificate given
366           with the -srvcert option, the -issuer option, the issuer of the
367           certificate given with the -oldcert option, the issuer of the CMP
368           client certificate (-cert option), as far as any of those is
369           present, else the NULL-DN as last resort.
370
371           The argument must be formatted as
372           /type0=value0/type1=value1/type2=....  For details see the
373           description of the -subject option.
374
375       -path remote_path
376           HTTP path at the CMP server (aka CMP alias) to use for POST
377           requests.  Defaults to any path given with -server, else "/".
378
379       -keep_alive value
380           If the given value is 0 then HTTP connections are not kept open
381           after receiving a response, which is the default behavior for HTTP
382           1.0.  If the value is 1 or 2 then persistent connections are
383           requested.  If the value is 2 then persistent connections are
384           required, i.e., in case the server does not grant them an error
385           occurs.  The default value is 1, which means preferring to keep the
386           connection open.
387
388       -msg_timeout seconds
389           Number of seconds (or 0 for infinite) a CMP request-response
390           message round trip is allowed to take before a timeout error is
391           returned.  Default is to use the -total_timeout setting.
392
393       -total_timeout seconds
394           Maximum number seconds an overall enrollment transaction may take,
395           including attempts polling for certificates on "waiting" PKIStatus.
396           Default is 0 (infinite).
397
398   Server authentication options
399       -trusted filenames|uris
400           When validating signature-based protection of CMP response
401           messages, these are the CA certificate(s) to trust while checking
402           certificate chains during CMP server authentication.  This option
403           gives more flexibility than the -srvcert option because the server-
404           side CMP signer certificate is not pinned but may be any
405           certificate for which a chain to one of the given trusted
406           certificates can be constructed.
407
408           If no -trusted, -srvcert, and -secret option is given then
409           protected response messages from the server are not authenticated.
410
411           Multiple sources may be given, separated by commas and/or
412           whitespace (where in the latter case the whole argument must be
413           enclosed in "...").  Each source may contain multiple certificates.
414
415           The certificate verification options -verify_hostname, -verify_ip,
416           and -verify_email have no effect on the certificate verification
417           enabled via this option.
418
419       -untrusted filenames|uris
420           Non-trusted intermediate CA certificate(s).  Any extra certificates
421           given with the -cert option are appended to it.  All these
422           certificates may be useful for cert path construction for the CMP
423           client certificate (to include in the extraCerts field of outgoing
424           messages) and for the TLS client certificate (if TLS is enabled) as
425           well as for chain building when validating the CMP server
426           certificate (checking signature-based CMP message protection) and
427           when validating newly enrolled certificates.
428
429           Multiple sources may be given, separated by commas and/or
430           whitespace.  Each file may contain multiple certificates.
431
432       -srvcert filename|uri
433           The specific CMP server certificate to expect and directly trust
434           (even if it is expired) when validating signature-based protection
435           of CMP response messages.  May be set alternatively to the -trusted
436           option to pin the accepted server.
437
438           If set, the subject of the certificate is also used as default
439           value for the recipient of CMP requests and as default value for
440           the expected sender of incoming CMP messages.
441
442       -expect_sender name
443           Distinguished Name (DN) expected in the sender field of incoming
444           CMP messages.  Defaults to the subject DN of the pinned -srvcert,
445           if any.
446
447           This can be used to make sure that only a particular entity is
448           accepted as CMP message signer, and attackers are not able to use
449           arbitrary certificates of a trusted PKI hierarchy to fraudulently
450           pose as a CMP server.  Note that this option gives slightly more
451           freedom than setting the -srvcert, which pins the server to the
452           holder of a particular certificate, while the expected sender name
453           will continue to match after updates of the server cert.
454
455           The argument must be formatted as
456           /type0=value0/type1=value1/type2=....  For details see the
457           description of the -subject option.
458
459       -ignore_keyusage
460           Ignore key usage restrictions in CMP signer certificates when
461           validating signature-based protection of incoming CMP messages,
462           else "digitalSignature" must be allowed for signer certificate.
463
464       -unprotected_errors
465           Accept missing or invalid protection of negative responses from the
466           server.  This applies to the following message types and contents:
467
468           •   error messages
469
470           •   negative certificate responses (IP/CP/KUP)
471
472           •   negative revocation responses (RP)
473
474           •   negative PKIConf messages
475
476           WARNING: This setting leads to unspecified behavior and it is meant
477           exclusively to allow interoperability with server implementations
478           violating RFC 4210, e.g.:
479
480           •   section 5.1.3.1 allows exceptions from protecting only for
481               special cases: "There MAY be cases in which the PKIProtection
482               BIT STRING is deliberately not used to protect a message [...]
483               because other protection, external to PKIX, will be applied
484               instead."
485
486           •   section 5.3.21 is clear on ErrMsgContent: "The CA MUST always
487               sign it with a signature key."
488
489           •   appendix D.4 shows PKIConf message having protection
490
491       -extracertsout filename
492           The file where to save all certificates contained in the extraCerts
493           field of the last received response message (except for pollRep and
494           PKIConf).
495
496       -cacertsout filename
497           The file where to save any CA certificates contained in the caPubs
498           field of the last received certificate response (i.e., IP, CP, or
499           KUP) message.
500
501   Client authentication options
502       -ref value
503           Reference number/string/value to use as fallback senderKID; this is
504           required if no sender name can be determined from the -cert or
505           <-subject> options and is typically used when authenticating with
506           pre-shared key (password-based MAC).
507
508       -secret arg
509           Prefer PBM-based message protection with given source of a secret
510           value.  The secret is used for creating PBM-based protection of
511           outgoing messages and (as far as needed) for validating PBM-based
512           protection of incoming messages.  PBM stands for Password-Based
513           Message Authentication Code.  This takes precedence over the -cert
514           and -key options.
515
516           For more information about the format of arg see
517           openssl-passphrase-options(1).
518
519       -cert filename|uri
520           The client's current CMP signer certificate.  Requires the
521           corresponding key to be given with -key.  The subject of this
522           certificate will be used as sender of outgoing CMP messages, while
523           the subject of -oldcert or -subjectName may provide fallback
524           values.  The issuer of this certificate is used as one of the
525           recipient fallback values and as fallback issuer entry in the
526           certificate template of IR/CR/KUR.  When using signature-based
527           message protection, this "protection certificate" will be included
528           first in the extraCerts field of outgoing messages and the
529           signature is done with the corresponding key.  In Initialization
530           Request (IR) messages this can be used for authenticating using an
531           external entity certificate as defined in appendix E.7 of RFC 4210.
532           For Key Update Request (KUR) messages this is also used as the
533           certificate to be updated if the -oldcert option is not given.  If
534           the file includes further certs, they are appended to the untrusted
535           certs because they typically constitute the chain of the client
536           certificate, which is included in the extraCerts field in
537           signature-protected request messages.
538
539       -own_trusted filenames|uris
540           If this list of certificates is provided then the chain built for
541           the client-side CMP signer certificate given with the -cert option
542           is verified using the given certificates as trust anchors.
543
544           Multiple sources may be given, separated by commas and/or
545           whitespace (where in the latter case the whole argument must be
546           enclosed in "...").  Each source may contain multiple certificates.
547
548           The certificate verification options -verify_hostname, -verify_ip,
549           and -verify_email have no effect on the certificate verification
550           enabled via this option.
551
552       -key filename|uri
553           The corresponding private key file for the client's current
554           certificate given in the -cert option.  This will be used for
555           signature-based message protection unless the -secret option
556           indicating PBM or -unprotected_requests is given.
557
558       -keypass arg
559           Pass phrase source for the private key given with the -key option.
560           Also used for -cert and -oldcert in case it is an encrypted PKCS#12
561           file.  If not given here, the password will be prompted for if
562           needed.
563
564           For more information about the format of arg see
565           openssl-passphrase-options(1).
566
567       -digest name
568           Specifies name of supported digest to use in RFC 4210's MSG_SIG_ALG
569           and as the one-way function (OWF) in MSG_MAC_ALG.  If applicable,
570           this is used for message protection and Proof-of-Possession (POPO)
571           signatures.  To see the list of supported digests, use "openssl
572           list -digest-commands".  Defaults to "sha256".
573
574       -mac name
575           Specifies the name of the MAC algorithm in MSG_MAC_ALG.  To get the
576           names of supported MAC algorithms use "openssl list
577           -mac-algorithms" and possibly combine such a name with the name of
578           a supported digest algorithm, e.g., hmacWithSHA256.  Defaults to
579           "hmac-sha1" as per RFC 4210.
580
581       -extracerts filenames|uris
582           Certificates to append in the extraCerts field when sending
583           messages.  They can be used as the default CMP signer certificate
584           chain to include.
585
586           Multiple sources may be given, separated by commas and/or
587           whitespace (where in the latter case the whole argument must be
588           enclosed in "...").  Each source may contain multiple certificates.
589
590       -unprotected_requests
591           Send messages without CMP-level protection.
592
593   Credentials format options
594       -certform PEM|DER
595           File format to use when saving a certificate to a file.  Default
596           value is PEM.
597
598       -keyform PEM|DER|P12|ENGINE
599           The format of the key input; unspecified by default.  See "Format
600           Options" in openssl(1) for details.
601
602       -otherpass arg
603           Pass phrase source for certificate given with the -trusted,
604           -untrusted, -own_trusted, -srvcert, -out_trusted, -extracerts,
605           -srv_trusted, -srv_untrusted, -rsp_extracerts, -rsp_capubs,
606           -tls_extra, and -tls_trusted options.  If not given here, the
607           password will be prompted for if needed.
608
609           For more information about the format of arg see
610           openssl-passphrase-options(1).
611
612       -engine id
613           See "Engine Options" in openssl(1).  This option is deprecated.
614
615           As an alternative to using this combination:
616
617               -engine {engineid} -key {keyid} -keyform ENGINE
618
619           ... it's also possible to just give the key ID in URI form to -key,
620           like this:
621
622               -key org.openssl.engine:{engineid}:{keyid}
623
624           This applies to all options specifying keys: -key, -newkey, and
625           -tls_key.
626
627   Provider options
628       -provider name
629       -provider-path path
630       -propquery propq
631           See "Provider Options" in openssl(1), provider(7), and property(7).
632
633   Random state options
634       -rand files, -writerand file
635           See "Random State Options" in openssl(1) for details.
636
637   TLS connection options
638       -tls_used
639           Enable using TLS (even when other TLS_related options are not set)
640           when connecting to CMP server via HTTP.  This option is not
641           supported with the -port option and is ignored with the
642           -use_mock_srv and -rspin options or if the -server option is not
643           given.
644
645       -tls_cert filename|uri
646           Client's TLS certificate.  If the source includes further certs
647           they are used (along with -untrusted certs) for constructing the
648           client cert chain provided to the TLS server.
649
650       -tls_key filename|uri
651           Private key for the client's TLS certificate.
652
653       -tls_keypass arg
654           Pass phrase source for client's private TLS key -tls_key.  Also
655           used for -tls_cert in case it is an encrypted PKCS#12 file.  If not
656           given here, the password will be prompted for if needed.
657
658           For more information about the format of arg see
659           openssl-passphrase-options(1).
660
661       -tls_extra filenames|uris
662           Extra certificates to provide to TLS server during TLS handshake
663
664       -tls_trusted filenames|uris
665           Trusted certificate(s) to use for validating the TLS server
666           certificate.  This implies hostname validation.
667
668           Multiple sources may be given, separated by commas and/or
669           whitespace (where in the latter case the whole argument must be
670           enclosed in "...").  Each source may contain multiple certificates.
671
672           The certificate verification options -verify_hostname, -verify_ip,
673           and -verify_email have no effect on the certificate verification
674           enabled via this option.
675
676       -tls_host name
677           Address to be checked during hostname validation.  This may be a
678           DNS name or an IP address.  If not given it defaults to the -server
679           address.
680
681   Client-side debugging options
682       -batch
683           Do not interactively prompt for input, for instance when a password
684           is needed.  This can be useful for batch processing and testing.
685
686       -repeat number
687           Invoke the command the given positive number of times with the same
688           parameters.  Default is one invocation.
689
690       -reqin filenames
691           Take sequence of CMP requests from file(s).
692
693           Multiple filenames may be given, separated by commas and/or
694           whitespace (where in the latter case the whole argument must be
695           enclosed in "...").  As many files are read as needed for a
696           complete transaction.
697
698       -reqin_new_tid
699           Use a fresh transactionID for CMP request messages read using
700           -reqin, which requires re-protecting them as far as they were
701           protected before.  This may be needed in case the sequence of
702           requests is reused and the CMP server complains that the
703           transaction ID has already been used.
704
705       -reqout filenames
706           Save sequence of CMP requests to file(s).
707
708           Multiple filenames may be given, separated by commas and/or
709           whitespace.  As many files are written as needed to store the
710           complete transaction.
711
712       -rspin filenames
713           Process sequence of CMP responses provided in file(s), skipping
714           server.  This excludes -server, -port, and -use_mock_srv.
715
716           Multiple filenames may be given, separated by commas and/or
717           whitespace.  As many files are read as needed for the complete
718           transaction.
719
720       -rspout filenames
721           Save sequence of CMP responses to file(s).
722
723           Multiple filenames may be given, separated by commas and/or
724           whitespace.  As many files are written as needed to store the
725           complete transaction.
726
727       -use_mock_srv
728           Test the client using the internal CMP server mock-up at API level,
729           bypassing socket-based transfer via HTTP.  This excludes -server,
730           -port, and -rspin.
731
732   Mock server options
733       -port number
734           Act as HTTP-based CMP server mock-up listening on the given port.
735           This excludes -server, -rspin, and -use_mock_srv.
736
737       -max_msgs number
738           Maximum number of CMP (request) messages the CMP HTTP server mock-
739           up should handle, which must be nonnegative.  The default value is
740           0, which means that no limit is imposed.  In any case the server
741           terminates on internal errors, but not when it detects a CMP-level
742           error that it can successfully answer with an error message.
743
744       -srv_ref value
745           Reference value to use as senderKID of server in case no -srv_cert
746           is given.
747
748       -srv_secret arg
749           Password source for server authentication with a pre-shared key
750           (secret).
751
752       -srv_cert filename|uri
753           Certificate of the server.
754
755       -srv_key filename|uri
756           Private key used by the server for signing messages.
757
758       -srv_keypass arg
759           Server private key (and cert) file pass phrase source.
760
761       -srv_trusted filenames|uris
762           Trusted certificates for client authentication.
763
764           The certificate verification options -verify_hostname, -verify_ip,
765           and -verify_email have no effect on the certificate verification
766           enabled via this option.
767
768       -srv_untrusted filenames|uris
769           Intermediate CA certs that may be useful when validating client
770           certificates.
771
772       -rsp_cert filename|uri
773           Certificate to be returned as mock enrollment result.
774
775       -rsp_extracerts filenames|uris
776           Extra certificates to be included in mock certification responses.
777
778       -rsp_capubs filenames|uris
779           CA certificates to be included in mock Initialization Response (IP)
780           message.
781
782       -poll_count number
783           Number of times the client must poll before receiving a
784           certificate.
785
786       -check_after number
787           The checkAfter value (number of seconds to wait) to include in poll
788           response.
789
790       -grant_implicitconf
791           Grant implicit confirmation of newly enrolled certificate.
792
793       -pkistatus number
794           PKIStatus to be included in server response.  Valid range is 0
795           (accepted) .. 6 (keyUpdateWarning).
796
797       -failure number
798           A single failure info bit number to be included in server response.
799           Valid range is 0 (badAlg) .. 26 (duplicateCertReq).
800
801       -failurebits number Number representing failure bits to be included in
802       server response. Valid range is 0 .. 2^27 - 1.
803       -statusstring arg
804           Text to be included as status string in server response.
805
806       -send_error
807           Force server to reply with error message.
808
809       -send_unprotected
810           Send response messages without CMP-level protection.
811
812       -send_unprot_err
813           In case of negative responses, server shall send unprotected error
814           messages, certificate responses (IP/CP/KUP), and revocation
815           responses (RP).  WARNING: This setting leads to behavior violating
816           RFC 4210.
817
818       -accept_unprotected
819           Accept missing or invalid protection of requests.
820
821       -accept_unprot_err
822           Accept unprotected error messages from client.
823
824       -accept_raverified
825           Accept RAVERIFED as proof-of-possession (POPO).
826
827   Certificate verification options, for both CMP and TLS
828       -allow_proxy_certs, -attime, -no_check_time, -check_ss_sig, -crl_check,
829       -crl_check_all, -explicit_policy, -extended_crl, -ignore_critical,
830       -inhibit_any, -inhibit_map, -no_alt_chains, -partial_chain, -policy,
831       -policy_check, -policy_print, -purpose, -suiteB_128, -suiteB_128_only,
832       -suiteB_192, -trusted_first, -use_deltas, -auth_level, -verify_depth,
833       -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict
834       -issuer_checks
835           Set various options of certificate chain verification.  See
836           "Verification Options" in openssl-verification-options(1) for
837           details.
838
839           The certificate verification options -verify_hostname, -verify_ip,
840           and -verify_email only affect the certificate verification enabled
841           via the -out_trusted option.
842

NOTES

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

EXAMPLES

856   Simple examples using the default OpenSSL configuration file
857       This CMP client implementation comes with demonstrative CMP sections in
858       the example configuration file openssl/apps/openssl.cnf, which can be
859       used to interact conveniently with the Insta Demo CA.
860
861       In order to enroll an initial certificate from that CA it is sufficient
862       to issue the following shell commands.
863
864         export OPENSSL_CONF=/path/to/openssl/apps/openssl.cnf
865
866         openssl genrsa -out insta.priv.pem
867         openssl cmp -section insta
868
869       This should produce the file insta.cert.pem containing a new
870       certificate for the private key held in insta.priv.pem.  It can be
871       viewed using, e.g.,
872
873         openssl x509 -noout -text -in insta.cert.pem
874
875       In case the network setup requires using an HTTP proxy it may be given
876       as usual via the environment variable http_proxy or via the -proxy
877       option in the configuration file or the CMP command-line argument
878       -proxy, for example
879
880         -proxy http://192.168.1.1:8080
881
882       In the Insta Demo CA scenario both clients and the server may use the
883       pre-shared secret insta and the reference value 3078 to authenticate to
884       each other.
885
886       Alternatively, CMP messages may be protected in signature-based manner,
887       where the trust anchor in this case is insta.ca.crt and the client may
888       use any certificate already obtained from that CA, as specified in the
889       [signature] section of the example configuration.  This can be used in
890       combination with the [insta] section simply by
891
892         openssl cmp -section insta,signature
893
894       By default the CMP IR message type is used, yet CR works equally here.
895       This may be specified directly at the command line:
896
897         openssl cmp -section insta -cmd cr
898
899       or by referencing in addition the [cr] section of the example
900       configuration:
901
902         openssl cmp -section insta,cr
903
904       In order to update the enrolled certificate one may call
905
906         openssl cmp -section insta,kur
907
908       using with PBM-based protection or
909
910         openssl cmp -section insta,kur,signature
911
912       using signature-based protection.
913
914       In a similar way any previously enrolled certificate may be revoked by
915
916         openssl cmp -section insta,rr -trusted insta.ca.crt
917
918       or
919
920         openssl cmp -section insta,rr,signature
921
922       Many more options can be given in the configuration file and/or on the
923       command line.  For instance, the -reqexts CLI option may refer to a
924       section in the configuration file defining X.509 extensions to use in
925       certificate requests, such as "v3_req" in openssl/apps/openssl.cnf:
926
927         openssl cmp -section insta,cr -reqexts v3_req
928
929   Certificate enrollment
930       The following examples do not make use of a configuration file at
931       first.  They assume that a CMP server can be contacted on the local TCP
932       port 80 and accepts requests under the alias /pkix/.
933
934       For enrolling its very first certificate the client generates a client
935       key and sends an initial request message to the local CMP server using
936       a pre-shared secret key for mutual authentication.  In this example the
937       client does not have the CA certificate yet, so we specify the name of
938       the CA with the -recipient option and save any CA certificates that we
939       may receive in the "capubs.pem" file.
940
941       In below command line usage examples the "\" at line ends is used just
942       for formatting; each of the command invocations should be on a single
943       line.
944
945         openssl genrsa -out cl_key.pem
946         openssl cmp -cmd ir -server 127.0.0.1:80/pkix/ -recipient "/CN=CMPserver" \
947           -ref 1234 -secret pass:1234-5678 \
948           -newkey cl_key.pem -subject "/CN=MyName" \
949           -cacertsout capubs.pem -certout cl_cert.pem
950
951   Certificate update
952       Then, when the client certificate and its related key pair needs to be
953       updated, the client can send a key update request taking the certs in
954       "capubs.pem" as trusted for authenticating the server and using the
955       previous cert and key for its own authentication.  Then it can start
956       using the new cert and key.
957
958         openssl genrsa -out cl_key_new.pem
959         openssl cmp -cmd kur -server 127.0.0.1:80/pkix/ \
960           -trusted capubs.pem \
961           -cert cl_cert.pem -key cl_key.pem \
962           -newkey cl_key_new.pem -certout cl_cert.pem
963         cp cl_key_new.pem cl_key.pem
964
965       This command sequence can be repated as often as needed.
966
967   Requesting information from CMP server
968       Requesting "all relevant information" with an empty General Message.
969       This prints information about all received ITAV infoTypes to stdout.
970
971         openssl cmp -cmd genm -server 127.0.0.1/pkix/ -recipient "/CN=CMPserver" \
972           -ref 1234 -secret pass:1234-5678
973
974   Using a custom configuration file
975       For CMP client invocations, in particular for certificate enrollment,
976       usually many parameters need to be set, which is tedious and error-
977       prone to do on the command line.  Therefore, the client offers the
978       possibility to read options from sections of the OpenSSL config file,
979       usually called openssl.cnf.  The values found there can still be
980       extended and even overridden by any subsequently loaded sections and on
981       the command line.
982
983       After including in the configuration file the following sections:
984
985         [cmp]
986         server = 127.0.0.1
987         path = pkix/
988         trusted = capubs.pem
989         cert = cl_cert.pem
990         key = cl_key.pem
991         newkey = cl_key.pem
992         certout = cl_cert.pem
993
994         [init]
995         recipient = "/CN=CMPserver"
996         trusted =
997         cert =
998         key =
999         ref = 1234
1000         secret = pass:1234-5678-1234-567
1001         subject = "/CN=MyName"
1002         cacertsout = capubs.pem
1003
1004       the above enrollment transactions reduce to
1005
1006         openssl cmp -section cmp,init
1007         openssl cmp -cmd kur -newkey cl_key_new.pem
1008
1009       and the above transaction using a general message reduces to
1010
1011         openssl cmp -section cmp,init -cmd genm
1012

SEE ALSO

1014       openssl-genrsa(1), openssl-ecparam(1), openssl-list(1), openssl-req(1),
1015       openssl-x509(1), x509v3_config(5)
1016

HISTORY

1018       The cmp application was added in OpenSSL 3.0.
1019
1020       The -engine option was deprecated in OpenSSL 3.0.
1021
1023       Copyright 2007-2022 The OpenSSL Project Authors. All Rights Reserved.
1024
1025       Licensed under the Apache License 2.0 (the "License").  You may not use
1026       this file except in compliance with the License.  You can obtain a copy
1027       in the file LICENSE in the source distribution or at
1028       <https://www.openssl.org/source/license.html>.
1029
1030
1031
10323.0.5                             2022-07-05                OPENSSL-CMP(1ossl)
Impressum