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

NOTES

916       When setting up CMP configurations and experimenting with enrollment
917       options typically various errors occur until the configuration is
918       correct and complete.  When the CMP server reports an error the client
919       will by default check the protection of the CMP response message.  Yet
920       some CMP services tend not to protect negative responses.  In this case
921       the client will reject them, and thus their contents are not shown
922       although they usually contain hints that would be helpful for
923       diagnostics.  For assisting in such cases the CMP client offers a
924       workaround via the -unprotected_errors option, which allows accepting
925       such negative messages.
926
927       If OpenSSL was built with trace support enabled and the environment
928       variable OPENSSL_TRACE includes HTTP, the request and response headers
929       of HTTP transfers are printed.
930

EXAMPLES

932   Simple examples using the default OpenSSL configuration file
933       This CMP client implementation comes with demonstrative CMP sections in
934       the example configuration file openssl/apps/openssl.cnf, which can be
935       used to interact conveniently with the Insta Demo CA.
936
937       In order to enroll an initial certificate from that CA it is sufficient
938       to issue the following shell commands.
939
940         export OPENSSL_CONF=/path/to/openssl/apps/openssl.cnf
941
942         openssl genrsa -out insta.priv.pem
943         openssl cmp -section insta
944
945       This should produce the file insta.cert.pem containing a new
946       certificate for the private key held in insta.priv.pem.  It can be
947       viewed using, e.g.,
948
949         openssl x509 -noout -text -in insta.cert.pem
950
951       In case the network setup requires using an HTTP proxy it may be given
952       as usual via the environment variable http_proxy or via the -proxy
953       option in the configuration file or the CMP command-line argument
954       -proxy, for example
955
956         -proxy http://192.168.1.1:8080
957
958       In the Insta Demo CA scenario both clients and the server may use the
959       pre-shared secret insta and the reference value 3078 to authenticate to
960       each other.
961
962       Alternatively, CMP messages may be protected in signature-based manner,
963       where the trust anchor in this case is insta.ca.crt and the client may
964       use any certificate already obtained from that CA, as specified in the
965       [signature] section of the example configuration.  This can be used in
966       combination with the [insta] section simply by
967
968         openssl cmp -section insta,signature
969
970       By default the CMP IR message type is used, yet CR works equally here.
971       This may be specified directly at the command line:
972
973         openssl cmp -section insta -cmd cr
974
975       or by referencing in addition the [cr] section of the example
976       configuration:
977
978         openssl cmp -section insta,cr
979
980       In order to update the enrolled certificate one may call
981
982         openssl cmp -section insta,kur
983
984       using with PBM-based protection or
985
986         openssl cmp -section insta,kur,signature
987
988       using signature-based protection.
989
990       In a similar way any previously enrolled certificate may be revoked by
991
992         openssl cmp -section insta,rr -trusted insta.ca.crt
993
994       or
995
996         openssl cmp -section insta,rr,signature
997
998       Many more options can be given in the configuration file and/or on the
999       command line.  For instance, the -reqexts CLI option may refer to a
1000       section in the configuration file defining X.509 extensions to use in
1001       certificate requests, such as "v3_req" in openssl/apps/openssl.cnf:
1002
1003         openssl cmp -section insta,cr -reqexts v3_req
1004
1005   Certificate enrollment
1006       The following examples do not make use of a configuration file at
1007       first.  They assume that a CMP server can be contacted on the local TCP
1008       port 80 and accepts requests under the alias /pkix/.
1009
1010       For enrolling its very first certificate the client generates a client
1011       key and sends an initial request message to the local CMP server using
1012       a pre-shared secret key for mutual authentication.  In this example the
1013       client does not have the CA certificate yet, so we specify the name of
1014       the CA with the -recipient option and save any CA certificates that we
1015       may receive in the "capubs.pem" file.
1016
1017       In below command line usage examples the "\" at line ends is used just
1018       for formatting; each of the command invocations should be on a single
1019       line.
1020
1021         openssl genrsa -out cl_key.pem
1022         openssl cmp -cmd ir -server 127.0.0.1:80/pkix/ -recipient "/CN=CMPserver" \
1023           -ref 1234 -secret pass:1234-5678 \
1024           -newkey cl_key.pem -subject "/CN=MyName" \
1025           -cacertsout capubs.pem -certout cl_cert.pem
1026
1027   Certificate update
1028       Then, when the client certificate and its related key pair needs to be
1029       updated, the client can send a key update request taking the certs in
1030       "capubs.pem" as trusted for authenticating the server and using the
1031       previous cert and key for its own authentication.  Then it can start
1032       using the new cert and key.
1033
1034         openssl genrsa -out cl_key_new.pem
1035         openssl cmp -cmd kur -server 127.0.0.1:80/pkix/ \
1036           -trusted capubs.pem \
1037           -cert cl_cert.pem -key cl_key.pem \
1038           -newkey cl_key_new.pem -certout cl_cert.pem
1039         cp cl_key_new.pem cl_key.pem
1040
1041       This command sequence can be repated as often as needed.
1042
1043   Requesting information from CMP server
1044       Requesting "all relevant information" with an empty General Message.
1045       This prints information about all received ITAV infoTypes to stdout.
1046
1047         openssl cmp -cmd genm -server 127.0.0.1/pkix/ -recipient "/CN=CMPserver" \
1048           -ref 1234 -secret pass:1234-5678
1049
1050   Using a custom configuration file
1051       For CMP client invocations, in particular for certificate enrollment,
1052       usually many parameters need to be set, which is tedious and error-
1053       prone to do on the command line.  Therefore, the client offers the
1054       possibility to read options from sections of the OpenSSL config file,
1055       usually called openssl.cnf.  The values found there can still be
1056       extended and even overridden by any subsequently loaded sections and on
1057       the command line.
1058
1059       After including in the configuration file the following sections:
1060
1061         [cmp]
1062         server = 127.0.0.1
1063         path = pkix/
1064         trusted = capubs.pem
1065         cert = cl_cert.pem
1066         key = cl_key.pem
1067         newkey = cl_key.pem
1068         certout = cl_cert.pem
1069
1070         [init]
1071         recipient = "/CN=CMPserver"
1072         trusted =
1073         cert =
1074         key =
1075         ref = 1234
1076         secret = pass:1234-5678-1234-567
1077         subject = "/CN=MyName"
1078         cacertsout = capubs.pem
1079
1080       the above enrollment transactions reduce to
1081
1082         openssl cmp -section cmp,init
1083         openssl cmp -cmd kur -newkey cl_key_new.pem
1084
1085       and the above transaction using a general message reduces to
1086
1087         openssl cmp -section cmp,init -cmd genm
1088

SEE ALSO

1090       openssl-genrsa(1), openssl-ecparam(1), openssl-list(1), openssl-req(1),
1091       openssl-x509(1), x509v3_config(5)
1092

HISTORY

1094       The cmp application was added in OpenSSL 3.0.
1095
1096       The -engine option was deprecated in OpenSSL 3.0.
1097
1099       Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
1100
1101       Licensed under the Apache License 2.0 (the "License").  You may not use
1102       this file except in compliance with the License.  You can obtain a copy
1103       in the file LICENSE in the source distribution or at
1104       <https://www.openssl.org/source/license.html>.
1105
1106
1107
11083.1.1                             2023-08-31                OPENSSL-CMP(1ossl)
Impressum