]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man1/openssl-cmp.pod.in
openssl-cmp.pod.in: fix grammar glitch
[thirdparty/openssl.git] / doc / man1 / openssl-cmp.pod.in
CommitLineData
8d9a4d83
DDO
1=pod
2{- OpenSSL::safe::output_do_not_edit_headers(); -}
3
4=head1 NAME
5
d99c8667 6openssl-cmp - Certificate Management Protocol (CMP, RFC 4210) application
8d9a4d83
DDO
7
8=head1 SYNOPSIS
9
10B<openssl> B<cmp>
11[B<-help>]
12[B<-config> I<filename>]
13[B<-section> I<names>]
d99c8667 14[B<-verbosity> I<level>]
8d9a4d83 15
d99c8667 16Generic message options:
8d9a4d83 17
6bbff162 18[B<-cmd> I<ir|cr|kur|p10cr|rr|genm>]
8d9a4d83 19[B<-infotype> I<name>]
7c6577ba 20[B<-profile> I<name>]
0739dd00 21[B<-geninfo> I<values>]
8d9a4d83 22
d99c8667
DDO
23Certificate enrollment options:
24
f91d003a 25[B<-newkey> I<filename>|I<uri>]
8d9a4d83
DDO
26[B<-newkeypass> I<arg>]
27[B<-subject> I<name>]
8d9a4d83
DDO
28[B<-days> I<number>]
29[B<-reqexts> I<name>]
30[B<-sans> I<spec>]
31[B<-san_nodefault>]
32[B<-policies> I<name>]
33[B<-policy_oids> I<names>]
34[B<-policy_oids_critical>]
35[B<-popo> I<number>]
36[B<-csr> I<filename>]
3d46c81a 37[B<-out_trusted> I<filenames>|I<uris>]
8d9a4d83
DDO
38[B<-implicit_confirm>]
39[B<-disable_confirm>]
40[B<-certout> I<filename>]
39082af2 41[B<-chainout> I<filename>]
8d9a4d83 42
d99c8667
DDO
43Certificate enrollment and revocation options:
44
3d46c81a 45[B<-oldcert> I<filename>|I<uri>]
1d32ec20
RR
46[B<-issuer> I<name>]
47[B<-serial> I<number>]
8d9a4d83
DDO
48[B<-revreason> I<number>]
49
d99c8667
DDO
50Message transfer options:
51
7932982b 52[B<-server> I<[http[s]://][userinfo@]host[:port][/path][?query][#fragment]>]
7932982b 53[B<-proxy> I<[http[s]://][userinfo@]host[:port][/path][?query][#fragment]>]
d99c8667 54[B<-no_proxy> I<addresses>]
6bbff162 55[B<-recipient> I<name>]
83b424c3 56[B<-path> I<remote_path>]
8f965908 57[B<-keep_alive> I<value>]
d99c8667
DDO
58[B<-msg_timeout> I<seconds>]
59[B<-total_timeout> I<seconds>]
60
61Server authentication options:
62
3d46c81a 63[B<-trusted> I<filenames>|I<uris>]
6bbff162 64[B<-untrusted> I<filenames>|I<uris>]
3d46c81a 65[B<-srvcert> I<filename>|I<uri>]
d99c8667
DDO
66[B<-expect_sender> I<name>]
67[B<-ignore_keyusage>]
68[B<-unprotected_errors>]
b6fbef11 69[B<-srvcertout> I<filename>]
d99c8667
DDO
70[B<-extracertsout> I<filename>]
71[B<-cacertsout> I<filename>]
01b04851
DDO
72[B<-oldwithold> I<filename>]
73[B<-newwithnew> I<filename>]
74[B<-newwithold> I<filename>]
75[B<-oldwithnew> I<filename>]
d99c8667 76
6bbff162 77Client authentication and protection options:
d99c8667
DDO
78
79[B<-ref> I<value>]
80[B<-secret> I<arg>]
3d46c81a
DDO
81[B<-cert> I<filename>|I<uri>]
82[B<-own_trusted> I<filenames>|I<uris>]
83[B<-key> I<filename>|I<uri>]
d99c8667
DDO
84[B<-keypass> I<arg>]
85[B<-digest> I<name>]
86[B<-mac> I<name>]
6bbff162 87[B<-extracerts> I<filenames>|I<uris>]
d99c8667
DDO
88[B<-unprotected_requests>]
89
90Credentials format options:
91
8d9a4d83
DDO
92[B<-certform> I<PEM|DER>]
93[B<-keyform> I<PEM|DER|P12|ENGINE>]
8d9a4d83 94[B<-otherpass> I<arg>]
d99c8667
DDO
95{- $OpenSSL::safe::opt_engine_synopsis -}{- $OpenSSL::safe::opt_provider_synopsis -}
96
aed03a12
DDO
97Random state options:
98
99{- $OpenSSL::safe::opt_r_synopsis -}
100
d99c8667 101TLS connection options:
8d9a4d83
DDO
102
103[B<-tls_used>]
3d46c81a 104[B<-tls_cert> I<filename>|I<uri>]
f91d003a 105[B<-tls_key> I<filename>|I<uri>]
8d9a4d83 106[B<-tls_keypass> I<arg>]
3d46c81a
DDO
107[B<-tls_extra> I<filenames>|I<uris>]
108[B<-tls_trusted> I<filenames>|I<uris>]
8d9a4d83
DDO
109[B<-tls_host> I<name>]
110
d99c8667
DDO
111Client-side debugging options:
112
8d9a4d83
DDO
113[B<-batch>]
114[B<-repeat> I<number>]
6bbff162 115[B<-reqin> I<filenames>]
143be474 116[B<-reqin_new_tid>]
6bbff162
DDO
117[B<-reqout> I<filenames>]
118[B<-rspin> I<filenames>]
119[B<-rspout> I<filenames>]
8d9a4d83
DDO
120[B<-use_mock_srv>]
121
d99c8667
DDO
122Mock server options:
123
124[B<-port> I<number>]
125[B<-max_msgs> I<number>]
126[B<-srv_ref> I<value>]
127[B<-srv_secret> I<arg>]
3d46c81a
DDO
128[B<-srv_cert> I<filename>|I<uri>]
129[B<-srv_key> I<filename>|I<uri>]
d99c8667 130[B<-srv_keypass> I<arg>]
3d46c81a
DDO
131[B<-srv_trusted> I<filenames>|I<uris>]
132[B<-srv_untrusted> I<filenames>|I<uris>]
b971d419 133[B<-ref_cert> I<filename>|I<uri>]
3d46c81a
DDO
134[B<-rsp_cert> I<filename>|I<uri>]
135[B<-rsp_extracerts> I<filenames>|I<uris>]
136[B<-rsp_capubs> I<filenames>|I<uris>]
01b04851
DDO
137[B<-rsp_newwithnew> I<filename>|I<uri>]
138[B<-rsp_newwithold> I<filename>|I<uri>]
139[B<-rsp_oldwithnew> I<filename>|I<uri>]
d99c8667
DDO
140[B<-poll_count> I<number>]
141[B<-check_after> I<number>]
142[B<-grant_implicitconf>]
143[B<-pkistatus> I<number>]
144[B<-failure> I<number>]
145[B<-failurebits> I<number>]
146[B<-statusstring> I<arg>]
147[B<-send_error>]
148[B<-send_unprotected>]
149[B<-send_unprot_err>]
150[B<-accept_unprotected>]
151[B<-accept_unprot_err>]
152[B<-accept_raverified>]
153
154Certificate verification options, for both CMP and TLS:
155
acb934ff 156{- $OpenSSL::safe::opt_v_synopsis -}
8d9a4d83 157
8d9a4d83
DDO
158=head1 DESCRIPTION
159
160The B<cmp> command is a client implementation for the Certificate
161Management Protocol (CMP) as defined in RFC4210.
162It can be used to request certificates from a CA server,
163update their certificates,
8b22c283 164request certificates to be revoked, and perform other types of CMP requests.
8d9a4d83
DDO
165
166=head1 OPTIONS
167
168=over 4
169
170=item B<-help>
171
172Display a summary of all options
173
174=item B<-config> I<filename>
175
176Configuration file to use.
177An empty string C<""> means none.
178Default filename is from the environment variable C<OPENSSL_CONF>.
179
180=item B<-section> I<names>
181
182Section(s) to use within config file defining CMP options.
183An empty string C<""> means no specific section.
184Default is C<cmp>.
b434b2c0 185
8d9a4d83
DDO
186Multiple section names may be given, separated by commas and/or whitespace
187(where in the latter case the whole argument must be enclosed in "...").
188Contents of sections named later may override contents of sections named before.
189In any case, as usual, the C<[default]> section and finally the unnamed
190section (as far as present) can provide per-option fallback values.
191
d99c8667 192=item B<-verbosity> I<level>
8d9a4d83 193
d99c8667
DDO
194Level of verbosity for logging, error output, etc.
1950 = EMERG, 1 = ALERT, 2 = CRIT, 3 = ERR, 4 = WARN, 5 = NOTE,
1966 = INFO, 7 = DEBUG, 8 = TRACE.
197Defaults to 6 = INFO.
198
199=back
8d9a4d83
DDO
200
201=head2 Generic message options
202
203=over 4
204
205=item B<-cmd> I<ir|cr|kur|p10cr|rr|genm>
206
207CMP command to execute.
208Currently implemented commands are:
209
210=over 8
211
212=item ir E<nbsp> - Initialization Request
213
214=item cr E<nbsp> - Certificate Request
215
216=item p10cr - PKCS#10 Certification Request (for legacy support)
217
218=item kur E<nbsp>E<nbsp>- Key Update Request
219
220=item rr E<nbsp> - Revocation Request
221
222=item genm - General Message
223
224=back
225
025c0f52 226B<ir> requests initialization of an end entity into a PKI hierarchy
8b22c283 227by issuing a first certificate.
8d9a4d83 228
025c0f52 229B<cr> requests issuing an additional certificate for an end entity already
8d9a4d83
DDO
230initialized to the PKI hierarchy.
231
8b22c283 232B<p10cr> requests issuing an additional certificate similarly to B<cr>
025c0f52 233but using legacy PKCS#10 CSR format.
8d9a4d83 234
5e128ed1 235B<kur> requests a (key) update for an existing certificate.
8d9a4d83 236
5e128ed1 237B<rr> requests revocation of an existing certificate.
8d9a4d83
DDO
238
239B<genm> requests information using a General Message, where optionally
240included B<InfoTypeAndValue>s may be used to state which info is of interest.
241Upon receipt of the General Response, information about all received
242ITAV B<infoType>s is printed to stdout.
243
244=item B<-infotype> I<name>
245
246Set InfoType name to use for requesting specific info in B<genm>,
247e.g., C<signKeyPairTypes>.
01b04851 248So far, there is specific support for C<caCerts> and C<rootCaCert>.
8d9a4d83 249
7c6577ba
DDO
250=item B<-profile> I<name>
251
252Name of a certificate profile to place in
253the PKIHeader generalInfo field of request messages.
254
0739dd00 255=item B<-geninfo> I<values>
8d9a4d83 256
0739dd00
DDO
257A comma-separated list of InfoTypeAndValue to place in
258the generalInfo field of the PKIHeader of requests messages.
259Each InfoTypeAndValue gives an OID and an integer or string value
260of the form I<OID>:int:I<number> or I<OID>:str:I<text>,
261e.g., C<'1.2.3.4:int:56789, id-kp:str:name'>.
8d9a4d83
DDO
262
263=back
264
d99c8667 265=head2 Certificate enrollment options
8d9a4d83
DDO
266
267=over 4
268
f91d003a 269=item B<-newkey> I<filename>|I<uri>
8d9a4d83 270
2d658598 271The source of the private or public key for the certificate being requested.
c8c92345
DDO
272Defaults to the public key in the PKCS#10 CSR given with the B<-csr> option,
273the public key of the reference certificate, or the current client key.
8d9a4d83 274
2d658598
DDO
275The public portion of the key is placed in the certification request.
276
277Unless B<-cmd> I<p10cr>, B<-popo> I<-1>, or B<-popo> I<0> is given, the
278private key will be needed as well to provide the proof of possession (POPO),
279where the B<-key> option may provide a fallback.
280
8d9a4d83
DDO
281=item B<-newkeypass> I<arg>
282
283Pass phrase source for the key given with the B<-newkey> option.
284If not given here, the password will be prompted for if needed.
285
79a2bccd 286For more information about the format of I<arg> see
fee0af08 287L<openssl-passphrase-options(1)>.
8d9a4d83
DDO
288
289=item B<-subject> I<name>
290
168d93a2
DDO
291X.509 Distinguished Name (DN) to use as subject field
292in the requested certificate template in IR/CR/KUR messages.
60c3d732 293If the NULL-DN (C</>) is given then no subject is placed in the template.
7af110f9
DDO
294Default is the subject DN of any PKCS#10 CSR given with the B<-csr> option.
295For KUR, a further fallback is the subject DN
296of the reference certificate (see B<-oldcert>) if provided.
297This fallback is used for IR and CR only if no SANs are set.
8d9a4d83 298
cd7ec0bc 299If provided and neither of B<-cert>, B<-oldcert>, or B<-csr> is given,
025c0f52 300the subject DN is used as fallback sender of outgoing CMP messages.
8d9a4d83 301
5a0991d0 302The argument must be formatted as I</type0=value0/type1=value1/type2=...>.
025c0f52 303Special characters may be escaped by C<\> (backslash); whitespace is retained.
5a0991d0
DDO
304Empty values are permitted, but the corresponding type will not be included.
305Giving a single C</> will lead to an empty sequence of RDNs (a NULL-DN).
306Multi-valued RDNs can be formed by placing a C<+> character instead of a C</>
307between the AttributeValueAssertions (AVAs) that specify the members of the set.
308Example:
309
310C</DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe>
311
8d9a4d83
DDO
312=item B<-days> I<number>
313
314Number of days the new certificate is requested to be valid for, counting from
315the current time of the host.
316Also triggers the explicit request that the
317validity period starts from the current time (as seen by the host).
318
319=item B<-reqexts> I<name>
320
321Name of section in OpenSSL config file defining certificate request extensions.
b51bed05
DDO
322If the B<-csr> option is present, these extensions augment the extensions
323contained the given PKCS#10 CSR, overriding any extensions with same OIDs.
8d9a4d83
DDO
324
325=item B<-sans> I<spec>
326
03ee2e5b
DDO
327One or more IP addresses, email addresses, DNS names, or URIs
328separated by commas or whitespace
8d9a4d83
DDO
329(where in the latter case the whole argument must be enclosed in "...")
330to add as Subject Alternative Name(s) (SAN) certificate request extension.
331If the special element "critical" is given the SANs are flagged as critical.
332Cannot be used if any Subject Alternative Name extension is set via B<-reqexts>.
333
334=item B<-san_nodefault>
335
336When Subject Alternative Names are not given via B<-sans>
337nor defined via B<-reqexts>,
338they are copied by default from the reference certificate (see B<-oldcert>).
339This can be disabled by giving the B<-san_nodefault> option.
340
341=item B<-policies> I<name>
342
343Name of section in OpenSSL config file defining policies to be set
344as certificate request extension.
345This option cannot be used together with B<-policy_oids>.
346
347=item B<-policy_oids> I<names>
348
349One or more OID(s), separated by commas and/or whitespace
350(where in the latter case the whole argument must be enclosed in "...")
351to add as certificate policies request extension.
352This option cannot be used together with B<-policies>.
353
354=item B<-policy_oids_critical>
355
356Flag the policies given with B<-policy_oids> as critical.
357
358=item B<-popo> I<number>
359
2d658598 360Proof-of-possession (POPO) method to use for IR/CR/KUR; values: C<-1>..<2> where
8d9a4d83
DDO
361C<-1> = NONE, C<0> = RAVERIFIED, C<1> = SIGNATURE (default), C<2> = KEYENC.
362
363Note that a signature-based POPO can only be produced if a private key
364is provided via the B<-newkey> or B<-key> options.
365
366=item B<-csr> I<filename>
367
3d46c81a 368PKCS#10 CSR in PEM or DER format containing a certificate request.
5e128ed1 369With B<-cmd> I<p10cr> it is used directly in a legacy P10CR message.
2d658598 370
7af110f9 371When used with B<-cmd> I<ir>, I<cr>, or I<kur>,
2d658598
DDO
372it is transformed into the respective regular CMP request.
373In this case, a private key must be provided (with B<-newkey> or B<-key>)
374for the proof of possession (unless B<-popo> I<-1> or B<-popo> I<0> is used)
375and the respective public key is placed in the certification request
376(rather than taking over the public key contained in the PKCS#10 CSR).
377
378PKCS#10 CSR input may also be used with B<-cmd> I<rr>
379to specify the certificate to be revoked
025c0f52 380via the included subject name and public key.
cd7ec0bc
DDO
381Its subject is used as fallback sender in CMP message headers
382if B<-cert> and B<-oldcert> are not given.
8d9a4d83 383
3d46c81a 384=item B<-out_trusted> I<filenames>|I<uris>
8d9a4d83 385
025c0f52 386Trusted certificate(s) to use for validating the newly enrolled certificate.
6b58f498 387During this verification, any certificate status checking is disabled.
8d9a4d83 388
3d46c81a 389Multiple sources may be given, separated by commas and/or whitespace
8d9a4d83
DDO
390(where in the latter case the whole argument must be enclosed in "...").
391Each source may contain multiple certificates.
392
acb934ff
DDO
393The certificate verification options
394B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
395only affect the certificate verification enabled via this option.
8d9a4d83
DDO
396
397=item B<-implicit_confirm>
398
399Request implicit confirmation of newly enrolled certificates.
400
401=item B<-disable_confirm>
402
403Do not send certificate confirmation message for newly enrolled certificate
404without requesting implicit confirmation
405to cope with broken servers not supporting implicit confirmation correctly.
406B<WARNING:> This leads to behavior violating RFC 4210.
407
408=item B<-certout> I<filename>
409
60c3d732 410The file where any newly enrolled certificate should be saved.
8d9a4d83 411
39082af2
DDO
412=item B<-chainout> I<filename>
413
60c3d732 414The file where the chain of any newly enrolled certificate should be saved.
39082af2 415
8d9a4d83
DDO
416=back
417
d99c8667 418=head2 Certificate enrollment and revocation options
8d9a4d83
DDO
419
420=over 4
421
6bbff162 422=item B<-oldcert> I<filename>|I<uri>
8d9a4d83
DDO
423
424The certificate to be updated (i.e., renewed or re-keyed) in Key Update Request
425(KUR) messages or to be revoked in Revocation Request (RR) messages.
5e128ed1
DDO
426For KUR the certificate to be updated defaults to B<-cert>,
427and the resulting certificate is called I<reference certificate>.
025c0f52 428For RR the certificate to be revoked can also be specified using B<-csr>.
1d32ec20 429B<-oldcert> and B<-csr> is ignored if B<-issuer> and B<-serial> is provided.
8d9a4d83 430
3d46c81a 431The reference certificate, if any, is also used for
d718521f 432deriving default subject DN and Subject Alternative Names and the
5e128ed1 433default issuer entry in the requested certificate template of an IR/CR/KUR.
2d658598 434Its public key is used as a fallback in the template of certification requests.
8b22c283 435Its subject is used as sender of outgoing messages if B<-cert> is not given.
16931355
DDO
436Its issuer is used as default recipient in CMP message headers
437if neither B<-recipient>, B<-srvcert>, nor B<-issuer> is given.
8d9a4d83 438
1d32ec20
RR
439=item B<-issuer> I<name>
440
441X.509 Distinguished Name (DN) use as issuer field
442in the requested certificate template in IR/CR/KUR/RR messages.
443If the NULL-DN (C</>) is given then no issuer is placed in the template.
444
445If provided and neither B<-recipient> nor B<-srvcert> is given,
446the issuer DN is used as fallback recipient of outgoing CMP messages.
447
448The argument must be formatted as I</type0=value0/type1=value1/type2=...>.
449For details see the description of the B<-subject> option.
450
451=item B<-serial> I<number>
452
453Specify the Serial number of certificate to be revoked in revocation request.
454The serial number can be decimal or hex (if preceded by C<0x>)
455
8d9a4d83
DDO
456=item B<-revreason> I<number>
457
458Set CRLReason to be included in revocation request (RR); values: C<0>..C<10>
459or C<-1> for none (which is the default).
460
461Reason numbers defined in RFC 5280 are:
462
463 CRLReason ::= ENUMERATED {
464 unspecified (0),
465 keyCompromise (1),
466 cACompromise (2),
467 affiliationChanged (3),
468 superseded (4),
469 cessationOfOperation (5),
470 certificateHold (6),
471 -- value 7 is not used
472 removeFromCRL (8),
473 privilegeWithdrawn (9),
474 aACompromise (10)
475 }
476
477=back
478
8d9a4d83
DDO
479=head2 Message transfer options
480
481=over 4
482
7932982b 483=item B<-server> I<[http[s]://][userinfo@]host[:port][/path][?query][#fragment]>
8d9a4d83 484
830b6a13 485The I<host> domain name or IP address and optionally I<port>
a56bb5d6 486of the CMP server to connect to using HTTP(S).
7a12e7af 487IP address may be for v4 or v6, such as C<127.0.0.1> or C<[::1]> for localhost.
830b6a13 488
1f757df1
DDO
489This option excludes I<-port> and I<-use_mock_srv>.
490It is ignored if I<-rspin> is given with enough filename arguments.
a56bb5d6 491
4a9299ac
DDO
492If the scheme C<https> is given, the B<-tls_used> option is implied.
493When TLS is used, the default port is 443, otherwise 80.
7932982b
DDO
494The optional userinfo and fragment components are ignored.
495Any given query component is handled as part of the path component.
d96486dc 496If a path is included it provides the default value for the B<-path> option.
8d9a4d83 497
79a2bccd 498=item B<-proxy> I<[http[s]://][userinfo@]host[:port][/path][?query][#fragment]>
8d9a4d83 499
79a2bccd 500The HTTP(S) proxy server to use for reaching the CMP server unless B<-no_proxy>
8d9a4d83 501applies, see below.
79a2bccd 502The proxy port defaults to 80 or 443 if the scheme is C<https>; apart from that
4a9299ac
DDO
503the optional C<http://> or C<https://> prefix is ignored (note that using TLS
504may be required by B<-tls_used> or B<-server> with the prefix C<https>),
505as well as any path, userinfo, and query, and fragment components.
8d9a4d83
DDO
506Defaults to the environment variable C<http_proxy> if set, else C<HTTP_PROXY>
507in case no TLS is used, otherwise C<https_proxy> if set, else C<HTTPS_PROXY>.
a56bb5d6 508This option is ignored if I<-server> is not given.
8d9a4d83
DDO
509
510=item B<-no_proxy> I<addresses>
6600baa9 511
8d9a4d83
DDO
512List of IP addresses and/or DNS names of servers
513not to use an HTTP(S) proxy for, separated by commas and/or whitespace
514(where in the latter case the whole argument must be enclosed in "...").
515Default is from the environment variable C<no_proxy> if set, else C<NO_PROXY>.
a56bb5d6 516This option is ignored if I<-server> is not given.
8d9a4d83 517
6bbff162
DDO
518=item B<-recipient> I<name>
519
520Distinguished Name (DN) to use in the recipient field of CMP request message
521headers, i.e., the CMP server (usually the addressed CA).
522
523The recipient field in the header of a CMP message is mandatory.
524If not given explicitly the recipient is determined in the following order:
525the subject of the CMP server certificate given with the B<-srvcert> option,
526the B<-issuer> option,
527the issuer of the certificate given with the B<-oldcert> option,
528the issuer of the CMP client certificate (B<-cert> option),
529as far as any of those is present, else the NULL-DN as last resort.
530
531The argument must be formatted as I</type0=value0/type1=value1/type2=...>.
532For details see the description of the B<-subject> option.
533
83b424c3
DDO
534=item B<-path> I<remote_path>
535
536HTTP path at the CMP server (aka CMP alias) to use for POST requests.
537Defaults to any path given with B<-server>, else C<"/">.
538
8f965908
DDO
539=item B<-keep_alive> I<value>
540
168d93a2
DDO
541If the given value is 0 then HTTP connections are closed after each response
542(which would be the default behavior of HTTP 1.0)
543even if a CMP transaction needs more than one round trip.
544If the value is 1 or 2
545then for each transaction a persistent connection is requested.
546If the value is 2 then a persistent connection is required,
547i.e., an error occurs if the server does not grant it.
8f965908
DDO
548The default value is 1, which means preferring to keep the connection open.
549
8d9a4d83
DDO
550=item B<-msg_timeout> I<seconds>
551
5acd4007 552Number of seconds a CMP request-response message round trip
8d9a4d83 553is allowed to take before a timeout error is returned.
5acd4007 554A value <= 0 means no limitation (waiting indefinitely).
8f965908 555Default is to use the B<-total_timeout> setting.
8d9a4d83
DDO
556
557=item B<-total_timeout> I<seconds>
558
5acd4007
DDO
559Maximum total number of seconds a transaction may take,
560including polling etc.
561A value <= 0 means no limitation (waiting indefinitely).
562Default is 0.
8d9a4d83
DDO
563
564=back
565
8d9a4d83
DDO
566=head2 Server authentication options
567
568=over 4
569
3d46c81a 570=item B<-trusted> I<filenames>|I<uris>
8d9a4d83 571
260878f7
DDO
572The certificate(s), typically of root CAs, the client shall use as trust anchors
573when validating signature-based protection of CMP response messages.
574This option is ignored if the B<-srvcert> option is given as well.
575It provides more flexibility than B<-srvcert> because the CMP protection
576certificate of the server is not pinned but may be any certificate
577from which a chain to one of the given trust anchors can be constructed.
8d9a4d83 578
260878f7
DDO
579If none of B<-trusted>, B<-srvcert>, and B<-secret> is given, message validation
580errors will be thrown unless B<-unprotected_errors> permits an exception.
b434b2c0 581
3d46c81a 582Multiple sources may be given, separated by commas and/or whitespace
8d9a4d83
DDO
583(where in the latter case the whole argument must be enclosed in "...").
584Each source may contain multiple certificates.
585
acb934ff
DDO
586The certificate verification options
587B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
588have no effect on the certificate verification enabled via this option.
589
6bbff162 590=item B<-untrusted> I<filenames>|I<uris>
8d9a4d83 591
7a7d6b51
DDO
592Non-trusted intermediate CA certificate(s).
593Any extra certificates given with the B<-cert> option are appended to it.
594All these certificates may be useful for cert path construction
260878f7 595for the own CMP signer certificate (to include in the extraCerts field of
4a9299ac 596request messages) and for the TLS client certificate (if TLS is used)
7a7d6b51 597as well as for chain building
260878f7 598when validating server certificates (checking signature-based
025c0f52 599CMP message protection) and when validating newly enrolled certificates.
8d9a4d83 600
168d93a2
DDO
601Multiple sources may be given, separated by commas and/or whitespace
602(where in the latter case the whole argument must be enclosed in "...").
260878f7 603Each source may contain multiple certificates.
8d9a4d83 604
6bbff162 605=item B<-srvcert> I<filename>|I<uri>
8d9a4d83 606
0d17c2f4 607The specific CMP server certificate to expect and directly trust (even if it is
260878f7
DDO
608expired) when verifying signature-based protection of CMP response messages.
609This pins the accepted server and results in ignoring the B<-trusted> option.
8d9a4d83 610
0d17c2f4
DDO
611If set, the subject of the certificate is also used
612as default value for the recipient of CMP requests
260878f7 613and as default value for the expected sender of CMP responses.
8d9a4d83 614
8d9a4d83
DDO
615=item B<-expect_sender> I<name>
616
8b22c283 617Distinguished Name (DN) expected in the sender field of incoming CMP messages.
0d17c2f4 618Defaults to the subject DN of the pinned B<-srvcert>, if any.
8d9a4d83 619
0d17c2f4
DDO
620This can be used to make sure that only a particular entity is accepted as
621CMP message signer, and attackers are not able to use arbitrary certificates
622of a trusted PKI hierarchy to fraudulently pose as a CMP server.
623Note that this option gives slightly more freedom than setting the B<-srvcert>,
624which pins the server to the holder of a particular certificate, while the
625expected sender name will continue to match after updates of the server cert.
8d9a4d83 626
025c0f52
DDO
627The argument must be formatted as I</type0=value0/type1=value1/type2=...>.
628For details see the description of the B<-subject> option.
629
8d9a4d83
DDO
630=item B<-ignore_keyusage>
631
025c0f52 632Ignore key usage restrictions in CMP signer certificates when validating
260878f7
DDO
633signature-based protection of incoming CMP messages.
634By default, C<digitalSignature> must be allowed by CMP signer certificates.
8d9a4d83
DDO
635
636=item B<-unprotected_errors>
637
638Accept missing or invalid protection of negative responses from the server.
639This applies to the following message types and contents:
640
641=over 4
642
643=item * error messages
644
645=item * negative certificate responses (IP/CP/KUP)
646
647=item * negative revocation responses (RP)
648
649=item * negative PKIConf messages
650
651=back
652
653B<WARNING:> This setting leads to unspecified behavior and it is meant
654exclusively to allow interoperability with server implementations violating
655RFC 4210, e.g.:
656
657=over 4
658
659=item * section 5.1.3.1 allows exceptions from protecting only for special
660cases:
661"There MAY be cases in which the PKIProtection BIT STRING is deliberately not
662used to protect a message [...] because other protection, external to PKIX, will
663be applied instead."
664
665=item * section 5.3.21 is clear on ErrMsgContent: "The CA MUST always sign it
666with a signature key."
667
668=item * appendix D.4 shows PKIConf message having protection
669
670=back
671
b6fbef11
DDO
672=item B<-srvcertout> I<filename>
673
674The file where to save the successfully validated certificate, if any,
675that the CMP server used for signature-based response message protection.
60c3d732
DDO
676If there is no such certificate, typically because the protection was MAC-based,
677this is indicated by deleting the file (if it existed).
b6fbef11 678
8d9a4d83
DDO
679=item B<-extracertsout> I<filename>
680
60c3d732
DDO
681The file where to save the list of certificates contained in the extraCerts
682field of the last received response message that is not a pollRep nor PKIConf.
8d9a4d83
DDO
683
684=item B<-cacertsout> I<filename>
685
60c3d732 686The file where to save the list of CA certificates contained in the caPubs field
d477484d
DDO
687if a positive certificate response (i.e., IP, CP, or KUP) message was received
688or contained in a general response (genp) message with infoType C<caCerts>.
8d9a4d83 689
01b04851
DDO
690=item B<-oldwithold> I<filename>
691
692The root CA certificate to include in a genm request of infoType C<rootCaCert>.
693If present and the optional oldWithNew certificate is received,
694it is verified using the newWithNew certificate as the (only) trust anchor.
695
696=item B<-newwithnew> I<filename>
697
698This option must be provided when B<-infotype> I<rootCaCert> is given.
699It specifies the file to save the newWithNew certificate
700received in a genp message of type C<rootCaKeyUpdate>.
701If on success no such cert was received, this file (if present) is deleted
702to indicate that the requested root CA certificate update is not available.
703
704Any received newWithNew certificate is verified
705using any received newWithOld certificate as untrusted intermediate certificate
706and the certificate provided with B<-oldwithold> as the (only) trust anchor,
707or if not provided, using the certificates given with the B<-trusted> option.
708
709B<WARNING:>
710The newWithNew certificate is meant to be a certificate that will be trusted.
711The trust placed in it cannot be stronger than the trust placed in
712the B<-oldwithold> certificate if present, otherwise it cannot be stronger than
713the weakest trust placed in any of the B<-trusted> certificates.
714
715=item B<-newwithold> I<filename>
716
717The file to save any newWithOld certificate
718received in a genp message of infoType C<rootCaKeyUpdate>.
719If on success no such cert was received, this is indicated by deleting the file.
720
721=item B<-oldwithnew> I<filename>
722
723The file to save any oldWithNew certificate
724received in a genp message of infoType C<rootCaKeyUpdate>.
725If on success no such cert was received, this is indicated by deleting the file.
726
8d9a4d83
DDO
727=back
728
8d9a4d83
DDO
729=head2 Client authentication options
730
731=over 4
732
733=item B<-ref> I<value>
734
735Reference number/string/value to use as fallback senderKID; this is required
736if no sender name can be determined from the B<-cert> or <-subject> options and
737is typically used when authenticating with pre-shared key (password-based MAC).
738
739=item B<-secret> I<arg>
740
89ed128d 741Provides the source of a secret value to use with MAC-based message protection.
ef2d3588 742This takes precedence over the B<-cert> and B<-key> options.
89ed128d
DDO
743The secret is used for creating MAC-based protection of outgoing messages
744and for validating incoming messages that have MAC-based protection.
745The algorithm used by default is Password-Based Message Authentication Code (PBM)
746as defined in RFC 4210 section 5.1.3.1.
8d9a4d83 747
79a2bccd 748For more information about the format of I<arg> see
fee0af08 749L<openssl-passphrase-options(1)>.
8d9a4d83 750
6bbff162 751=item B<-cert> I<filename>|I<uri>
8d9a4d83 752
15076c26 753The client's current CMP signer certificate.
8d9a4d83 754Requires the corresponding key to be given with B<-key>.
2d658598
DDO
755
756The subject and the public key contained in this certificate
757serve as fallback values in the certificate template of IR/CR/KUR messages.
758
8b22c283
DDO
759The subject of this certificate will be used as sender of outgoing CMP messages,
760while the subject of B<-oldcert> or B<-subjectName> may provide fallback values.
2d658598 761
d718521f 762The issuer of this certificate is used as one of the recipient fallback values
2d658598
DDO
763and as fallback issuer entry in the certificate template of IR/CR/KUR messages.
764
89ed128d
DDO
765When performing signature-based message protection,
766this "protection certificate", also called "signer certificate",
ef2d3588
DDO
767will be included first in the extraCerts field of outgoing messages
768and the signature is done with the corresponding key.
8d9a4d83
DDO
769In Initialization Request (IR) messages this can be used for authenticating
770using an external entity certificate as defined in appendix E.7 of RFC 4210.
2d658598 771
8d9a4d83
DDO
772For Key Update Request (KUR) messages this is also used as
773the certificate to be updated if the B<-oldcert> option is not given.
2d658598 774
ef2d3588
DDO
775If the file includes further certs, they are appended to the untrusted certs
776because they typically constitute the chain of the client certificate, which
777is included in the extraCerts field in signature-protected request messages.
8d9a4d83 778
3d46c81a 779=item B<-own_trusted> I<filenames>|I<uris>
15076c26
DDO
780
781If this list of certificates is provided then the chain built for
acb934ff
DDO
782the client-side CMP signer certificate given with the B<-cert> option
783is verified using the given certificates as trust anchors.
15076c26 784
3d46c81a 785Multiple sources may be given, separated by commas and/or whitespace
15076c26
DDO
786(where in the latter case the whole argument must be enclosed in "...").
787Each source may contain multiple certificates.
788
acb934ff
DDO
789The certificate verification options
790B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
791have no effect on the certificate verification enabled via this option.
792
6bbff162 793=item B<-key> I<filename>|I<uri>
8d9a4d83
DDO
794
795The corresponding private key file for the client's current certificate given in
796the B<-cert> option.
89ed128d
DDO
797This will be used for signature-based message protection unless the B<-secret>
798option indicating MAC-based protection or B<-unprotected_requests> is given.
8d9a4d83 799
2d658598
DDO
800It is also used as a fallback for the B<-newkey> option with IR/CR/KUR messages.
801
8d9a4d83
DDO
802=item B<-keypass> I<arg>
803
804Pass phrase source for the private key given with the B<-key> option.
805Also used for B<-cert> and B<-oldcert> in case it is an encrypted PKCS#12 file.
806If not given here, the password will be prompted for if needed.
807
79a2bccd 808For more information about the format of I<arg> see
fee0af08 809L<openssl-passphrase-options(1)>.
8d9a4d83
DDO
810
811=item B<-digest> I<name>
812
813Specifies name of supported digest to use in RFC 4210's MSG_SIG_ALG
89ed128d 814and as the one-way function (OWF) in C<MSG_MAC_ALG>.
8d9a4d83 815If applicable, this is used for message protection and
2d658598 816proof-of-possession (POPO) signatures.
79a2bccd 817To see the list of supported digests, use C<openssl list -digest-commands>.
8d9a4d83
DDO
818Defaults to C<sha256>.
819
820=item B<-mac> I<name>
821
89ed128d 822Specifies the name of the MAC algorithm in C<MSG_MAC_ALG>.
79a2bccd 823To get the names of supported MAC algorithms use C<openssl list -mac-algorithms>
8d9a4d83
DDO
824and possibly combine such a name with the name of a supported digest algorithm,
825e.g., hmacWithSHA256.
826Defaults to C<hmac-sha1> as per RFC 4210.
827
6bbff162 828=item B<-extracerts> I<filenames>|I<uris>
8d9a4d83
DDO
829
830Certificates to append in the extraCerts field when sending messages.
a0745e2b 831They can be used as the default CMP signer certificate chain to include.
8d9a4d83 832
3d46c81a 833Multiple sources may be given, separated by commas and/or whitespace
8d9a4d83
DDO
834(where in the latter case the whole argument must be enclosed in "...").
835Each source may contain multiple certificates.
836
837=item B<-unprotected_requests>
838
260878f7 839Send request messages without CMP-level protection.
8d9a4d83
DDO
840
841=back
842
8d9a4d83
DDO
843=head2 Credentials format options
844
845=over 4
846
847=item B<-certform> I<PEM|DER>
848
849File format to use when saving a certificate to a file.
850Default value is PEM.
851
b3c5aadf 852=item B<-keyform> I<PEM|DER|P12|ENGINE>
8d9a4d83 853
bee3f389 854The format of the key input; unspecified by default.
f91d003a 855See L<openssl(1)/Format Options> for details.
8d9a4d83
DDO
856
857=item B<-otherpass> I<arg>
858
859Pass phrase source for certificate given with the B<-trusted>, B<-untrusted>,
7a7d6b51 860B<-own_trusted>, B<-srvcert>, B<-out_trusted>, B<-extracerts>,
01b04851
DDO
861B<-srv_trusted>, B<-srv_untrusted>, B<-ref_cert>, B<-rsp_cert>,
862B<-rsp_extracerts>, B<-rsp_capubs>,
863B<-rsp_newwithnew>, B<-rsp_newwithold>, B<-rsp_oldwithnew>,
7a7d6b51 864B<-tls_extra>, and B<-tls_trusted> options.
8d9a4d83
DDO
865If not given here, the password will be prompted for if needed.
866
79a2bccd 867For more information about the format of I<arg> see
fee0af08 868L<openssl-passphrase-options(1)>.
f91d003a
RL
869
870{- $OpenSSL::safe::opt_engine_item -}
871
0f221d9c 872{- output_off() if $disabled{"deprecated-3.0"}; "" -}
f91d003a 873As an alternative to using this combination:
8d9a4d83 874
f91d003a 875 -engine {engineid} -key {keyid} -keyform ENGINE
8d9a4d83 876
f91d003a
RL
877... it's also possible to just give the key ID in URI form to B<-key>,
878like this:
8d9a4d83 879
f91d003a 880 -key org.openssl.engine:{engineid}:{keyid}
8d9a4d83 881
f91d003a
RL
882This applies to all options specifying keys: B<-key>, B<-newkey>, and
883B<-tls_key>.
0f221d9c 884{- output_on() if $disabled{"deprecated-3.0"}; "" -}
8d9a4d83 885
3206e41c
DDO
886=back
887
888=head2 Provider options
889
890=over 4
891
892{- $OpenSSL::safe::opt_provider_item -}
893
894=back
895
aed03a12
DDO
896=head2 Random state options
897
898=over 4
899
900{- $OpenSSL::safe::opt_r_item -}
901
902=back
903
d99c8667 904=head2 TLS connection options
8d9a4d83
DDO
905
906=over 4
907
908=item B<-tls_used>
909
4a9299ac
DDO
910Make the CMP client use TLS (regardless if other TLS-related options are set)
911for message exchange with the server via HTTP.
1f757df1 912This option is not supported with the I<-port> option.
4a9299ac
DDO
913It is implied if the B<-server> option is given with the scheme C<https>.
914It is ignored if the B<-server> option is not given or B<-use_mock_srv> is given
915or B<-rspin> is given with enough filename arguments.
8d9a4d83 916
4a9299ac 917The following TLS-related options are ignored if TLS is not used.
ad1a1d71 918
6bbff162 919=item B<-tls_cert> I<filename>|I<uri>
8d9a4d83 920
ad1a1d71 921Client's TLS certificate to use for authenticating to the TLS server.
3d46c81a 922If the source includes further certs they are used (along with B<-untrusted>
8b22c283 923certs) for constructing the client cert chain provided to the TLS server.
8d9a4d83 924
f91d003a 925=item B<-tls_key> I<filename>|I<uri>
8d9a4d83
DDO
926
927Private key for the client's TLS certificate.
928
929=item B<-tls_keypass> I<arg>
930
79a2bccd 931Pass phrase source for client's private TLS key B<-tls_key>.
8d9a4d83
DDO
932Also used for B<-tls_cert> in case it is an encrypted PKCS#12 file.
933If not given here, the password will be prompted for if needed.
934
79a2bccd 935For more information about the format of I<arg> see
fee0af08 936L<openssl-passphrase-options(1)>.
8d9a4d83 937
3d46c81a 938=item B<-tls_extra> I<filenames>|I<uris>
8d9a4d83 939
ad1a1d71 940Extra certificates to provide to the TLS server during handshake.
8d9a4d83 941
3d46c81a 942=item B<-tls_trusted> I<filenames>|I<uris>
8d9a4d83 943
025c0f52 944Trusted certificate(s) to use for validating the TLS server certificate.
8d9a4d83
DDO
945This implies hostname validation.
946
3d46c81a 947Multiple sources may be given, separated by commas and/or whitespace
8d9a4d83
DDO
948(where in the latter case the whole argument must be enclosed in "...").
949Each source may contain multiple certificates.
950
acb934ff
DDO
951The certificate verification options
952B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
953have no effect on the certificate verification enabled via this option.
954
8d9a4d83
DDO
955=item B<-tls_host> I<name>
956
57cd10dd 957Address to be checked during hostname validation.
8d9a4d83
DDO
958This may be a DNS name or an IP address.
959If not given it defaults to the B<-server> address.
960
961=back
962
8d9a4d83
DDO
963=head2 Client-side debugging options
964
965=over 4
966
967=item B<-batch>
968
969Do not interactively prompt for input, for instance when a password is needed.
970This can be useful for batch processing and testing.
971
972=item B<-repeat> I<number>
973
d830526c 974Invoke the command the given positive number of times with the same parameters.
8d9a4d83
DDO
975Default is one invocation.
976
977=item B<-reqin> I<filenames>
978
1f757df1
DDO
979Take the sequence of CMP requests to send to the server from the given file(s)
980rather than from the sequence of requests produced internally.
981
77aa0069
DDO
982This option is ignored if the B<-rspin> option is given
983because in the latter case no requests are actually sent.
b434b2c0 984
8d9a4d83
DDO
985Multiple filenames may be given, separated by commas and/or whitespace
986(where in the latter case the whole argument must be enclosed in "...").
1f757df1
DDO
987
988The files are read as far as needed to complete the transaction
989and filenames have been provided. If more requests are needed,
990the remaining ones are taken from the items at the respective position
991in the sequence of requests produced internally.
992
993The client needs to update the recipNonce field in the given requests (except
994for the first one) in order to satisfy the checks to be performed by the server.
995This causes re-protection (if protecting requests is required).
8d9a4d83 996
143be474
DDO
997=item B<-reqin_new_tid>
998
999Use a fresh transactionID for CMP request messages read using B<-reqin>,
4b0c27d4 1000which causes their reprotection (if protecting requests is required).
143be474
DDO
1001This may be needed in case the sequence of requests is reused
1002and the CMP server complains that the transaction ID has already been used.
1003
8d9a4d83
DDO
1004=item B<-reqout> I<filenames>
1005
1f757df1 1006Save the sequence of CMP requests created by the client to the given file(s).
77aa0069 1007These requests are not sent to the server if the B<-reqin> option is used, too.
b434b2c0 1008
8d9a4d83 1009Multiple filenames may be given, separated by commas and/or whitespace.
1f757df1
DDO
1010
1011Files are written as far as needed to save the transaction
1012and filenames have been provided.
1013If the transaction contains more requests, the remaining ones are not saved.
8d9a4d83
DDO
1014
1015=item B<-rspin> I<filenames>
1016
1f757df1
DDO
1017Process the sequence of CMP responses provided in the given file(s),
1018not contacting any given server,
1019as long as enough filenames are provided to complete the transaction.
b434b2c0 1020
8d9a4d83 1021Multiple filenames may be given, separated by commas and/or whitespace.
1f757df1
DDO
1022
1023Any server specified via the I<-server> or I<-use_mock_srv> options is contacted
1024only if more responses are needed to complete the transaction.
1025In this case the transaction will fail
1026unless the server has been prepared to continue the already started transaction.
8d9a4d83
DDO
1027
1028=item B<-rspout> I<filenames>
1029
1f757df1
DDO
1030Save the sequence of actually used CMP responses to the given file(s).
1031These have been received from the server unless B<-rspin> takes effect.
b434b2c0 1032
8d9a4d83 1033Multiple filenames may be given, separated by commas and/or whitespace.
1f757df1
DDO
1034
1035Files are written as far as needed to save the responses
1036contained in the transaction and filenames have been provided.
1037If the transaction contains more responses, the remaining ones are not saved.
8d9a4d83
DDO
1038
1039=item B<-use_mock_srv>
1040
a56bb5d6
DDO
1041Test the client using the internal CMP server mock-up at API level,
1042bypassing socket-based transfer via HTTP.
1f757df1 1043This excludes the B<-server> and B<-port> options.
8d9a4d83
DDO
1044
1045=back
1046
d99c8667 1047=head2 Mock server options
8d9a4d83
DDO
1048
1049=over 4
1050
1051=item B<-port> I<number>
1052
830b6a13 1053Act as HTTP-based CMP server mock-up listening on the given local port.
7a12e7af 1054The client may address the server via, e.g., C<127.0.0.1> or C<[::1]>.
830b6a13 1055This option excludes the B<-server> and B<-use_mock_srv> options.
1f757df1
DDO
1056The B<-rspin>, B<-rspout>, B<-reqin>, and B<-reqout> options
1057so far are not supported in this mode.
8d9a4d83
DDO
1058
1059=item B<-max_msgs> I<number>
1060
1061Maximum number of CMP (request) messages the CMP HTTP server mock-up
490c8711 1062should handle, which must be nonnegative.
8d9a4d83
DDO
1063The default value is 0, which means that no limit is imposed.
1064In any case the server terminates on internal errors, but not when it
1065detects a CMP-level error that it can successfully answer with an error message.
1066
1067=item B<-srv_ref> I<value>
1068
1069Reference value to use as senderKID of server in case no B<-srv_cert> is given.
1070
1071=item B<-srv_secret> I<arg>
1072
1073Password source for server authentication with a pre-shared key (secret).
1074
6bbff162 1075=item B<-srv_cert> I<filename>|I<uri>
8d9a4d83
DDO
1076
1077Certificate of the server.
1078
6bbff162 1079=item B<-srv_key> I<filename>|I<uri>
8d9a4d83
DDO
1080
1081Private key used by the server for signing messages.
1082
1083=item B<-srv_keypass> I<arg>
1084
1085Server private key (and cert) file pass phrase source.
1086
3d46c81a 1087=item B<-srv_trusted> I<filenames>|I<uris>
8d9a4d83
DDO
1088
1089Trusted certificates for client authentication.
1090
acb934ff
DDO
1091The certificate verification options
1092B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
1093have no effect on the certificate verification enabled via this option.
1094
3d46c81a 1095=item B<-srv_untrusted> I<filenames>|I<uris>
8d9a4d83 1096
025c0f52 1097Intermediate CA certs that may be useful when validating client certificates.
8d9a4d83 1098
b971d419
DDO
1099=item B<-ref_cert> I<filename>|I<uri>
1100
1101Certificate to be expected for RR messages and any oldCertID in KUR messages.
1102
6bbff162 1103=item B<-rsp_cert> I<filename>|I<uri>
8d9a4d83
DDO
1104
1105Certificate to be returned as mock enrollment result.
1106
3d46c81a 1107=item B<-rsp_extracerts> I<filenames>|I<uris>
8d9a4d83
DDO
1108
1109Extra certificates to be included in mock certification responses.
1110
3d46c81a 1111=item B<-rsp_capubs> I<filenames>|I<uris>
8d9a4d83
DDO
1112
1113CA certificates to be included in mock Initialization Response (IP) message.
1114
01b04851
DDO
1115=item B<-rsp_newwithnew> I<filename>|I<uri>
1116
1117Certificate to be returned in newWithNew field of genp of type rootCaKeyUpdate.
1118
1119=item B<-rsp_newwithold> I<filename>|I<uri>
1120
1121Certificate to be returned in newWithOld field of genp of type rootCaKeyUpdate.
1122
1123=item B<-rsp_oldwithnew> I<filename>|I<uri>
1124
1125Certificate to be returned in oldWithNew field of genp of type rootCaKeyUpdate.
1126
8d9a4d83
DDO
1127=item B<-poll_count> I<number>
1128
1129Number of times the client must poll before receiving a certificate.
1130
1131=item B<-check_after> I<number>
1132
1133The checkAfter value (number of seconds to wait) to include in poll response.
1134
8d9a4d83
DDO
1135=item B<-grant_implicitconf>
1136
1137Grant implicit confirmation of newly enrolled certificate.
1138
1139=item B<-pkistatus> I<number>
1140
1141PKIStatus to be included in server response.
1142Valid range is 0 (accepted) .. 6 (keyUpdateWarning).
1143
1144=item B<-failure> I<number>
1145
1146A single failure info bit number to be included in server response.
1147Valid range is 0 (badAlg) .. 26 (duplicateCertReq).
1148
1149=item B<-failurebits> I<number>
1150Number representing failure bits to be included in server response.
1151Valid range is 0 .. 2^27 - 1.
1152
1153=item B<-statusstring> I<arg>
1154
1155Text to be included as status string in server response.
1156
1157=item B<-send_error>
1158
1159Force server to reply with error message.
1160
1161=item B<-send_unprotected>
1162
1163Send response messages without CMP-level protection.
1164
1165=item B<-send_unprot_err>
1166
1167In case of negative responses, server shall send unprotected error messages,
1168certificate responses (IP/CP/KUP), and revocation responses (RP).
1169WARNING: This setting leads to behavior violating RFC 4210.
1170
1171=item B<-accept_unprotected>
1172
1173Accept missing or invalid protection of requests.
1174
1175=item B<-accept_unprot_err>
1176
1177Accept unprotected error messages from client.
260878f7 1178So far this has no effect because the server does not accept any error messages.
8d9a4d83
DDO
1179
1180=item B<-accept_raverified>
1181
2d658598 1182Accept RAVERIFED as proof of possession (POPO).
8d9a4d83
DDO
1183
1184=back
1185
d99c8667
DDO
1186=head2 Certificate verification options, for both CMP and TLS
1187
1188=over 4
1189
acb934ff
DDO
1190{- $OpenSSL::safe::opt_v_item -}
1191
1192The certificate verification options
1193B<-verify_hostname>, B<-verify_ip>, and B<-verify_email>
1194only affect the certificate verification enabled via the B<-out_trusted> option.
d99c8667
DDO
1195
1196=back
8d9a4d83
DDO
1197
1198=head1 NOTES
1199
01b04851 1200When a client obtains, from a CMP server, CA certificates that it is going to
1a9e2860 1201trust, for instance via the C<caPubs> field of a certificate response
01b04851 1202or using general messages with infoType C<caCerts> or C<rootCaCert>,
1a9e2860
DDO
1203authentication of the CMP server is particularly critical.
1204So special care must be taken setting up server authentication
1205using B<-trusted> and related options for certificate-based authentication
1206or B<-secret> for MAC-based protection.
1207If authentication is certificate-based, the B<-srvcertout> option
1208should be used to obtain the validated server certificate
1209and perform an authorization check based on it.
1210
8d9a4d83
DDO
1211When setting up CMP configurations and experimenting with enrollment options
1212typically various errors occur until the configuration is correct and complete.
1213When the CMP server reports an error the client will by default
1214check the protection of the CMP response message.
1215Yet some CMP services tend not to protect negative responses.
1216In this case the client will reject them, and thus their contents are not shown
1217although they usually contain hints that would be helpful for diagnostics.
1218For assisting in such cases the CMP client offers a workaround via the
1219B<-unprotected_errors> option, which allows accepting such negative messages.
1220
35b76bc8 1221If OpenSSL was built with trace support enabled (e.g., C<./config enable-trace>)
e8fdb060 1222and the environment variable B<OPENSSL_TRACE> includes B<HTTP>,
35b76bc8 1223the requests and the response headers transferred via HTTP are printed.
e8fdb060 1224
8d9a4d83
DDO
1225=head1 EXAMPLES
1226
1227=head2 Simple examples using the default OpenSSL configuration file
1228
1229This CMP client implementation comes with demonstrative CMP sections
1230in the example configuration file F<openssl/apps/openssl.cnf>,
1231which can be used to interact conveniently with the Insta Demo CA.
1232
1233In order to enroll an initial certificate from that CA it is sufficient
1234to issue the following shell commands.
1235
6bbff162 1236 export OPENSSL_CONF=/path/to/openssl/apps/openssl.cnf
6600baa9 1237
ebc1e8fc 1238=begin comment
6600baa9 1239
4d2b2889 1240 wget 'http://pki.certificate.fi:8081/install-ca-cert.html/ca-certificate.crt\
8d9a4d83 1241 ?ca-id=632&download-certificate=1' -O insta.ca.crt
6600baa9 1242
ebc1e8fc 1243=end comment
6600baa9 1244
8d9a4d83
DDO
1245 openssl genrsa -out insta.priv.pem
1246 openssl cmp -section insta
1247
1248This should produce the file F<insta.cert.pem> containing a new certificate
1249for the private key held in F<insta.priv.pem>.
1250It can be viewed using, e.g.,
1251
1252 openssl x509 -noout -text -in insta.cert.pem
1253
1254In case the network setup requires using an HTTP proxy it may be given as usual
79a2bccd 1255via the environment variable B<http_proxy> or via the B<-proxy> option in the
6bbff162 1256configuration file or the CMP command-line argument B<-proxy>, for example
8d9a4d83
DDO
1257
1258 -proxy http://192.168.1.1:8080
1259
1260In the Insta Demo CA scenario both clients and the server may use the pre-shared
8b22c283 1261secret I<insta> and the reference value I<3078> to authenticate to each other.
8d9a4d83
DDO
1262
1263Alternatively, CMP messages may be protected in signature-based manner,
1264where the trust anchor in this case is F<insta.ca.crt>
1265and the client may use any certificate already obtained from that CA,
1266as specified in the B<[signature]> section of the example configuration.
1267This can be used in combination with the B<[insta]> section simply by
1268
1269 openssl cmp -section insta,signature
1270
1271By default the CMP IR message type is used, yet CR works equally here.
1272This may be specified directly at the command line:
1273
1274 openssl cmp -section insta -cmd cr
1275
1276or by referencing in addition the B<[cr]> section of the example configuration:
1277
1278 openssl cmp -section insta,cr
1279
1280In order to update the enrolled certificate one may call
1281
1282 openssl cmp -section insta,kur
1283
cb03eef1 1284using MAC-based protection with PBM or
8d9a4d83
DDO
1285
1286 openssl cmp -section insta,kur,signature
1287
1288using signature-based protection.
1289
1290In a similar way any previously enrolled certificate may be revoked by
1291
1292 openssl cmp -section insta,rr -trusted insta.ca.crt
1293
1294or
1295
1296 openssl cmp -section insta,rr,signature
1297
6bbff162 1298Many more options can be given in the configuration file
8d9a4d83 1299and/or on the command line.
ebc1e8fc
DDO
1300For instance, the B<-reqexts> CLI option may refer to a section in the
1301configuration file defining X.509 extensions to use in certificate requests,
79a2bccd 1302such as C<v3_req> in F<openssl/apps/openssl.cnf>:
8d9a4d83 1303
ebc1e8fc 1304 openssl cmp -section insta,cr -reqexts v3_req
8d9a4d83
DDO
1305
1306=head2 Certificate enrollment
1307
6bbff162 1308The following examples do not make use of a configuration file at first.
8d9a4d83 1309They assume that a CMP server can be contacted on the local TCP port 80
8b22c283 1310and accepts requests under the alias I</pkix/>.
8d9a4d83 1311
6bbff162 1312For enrolling its very first certificate the client generates a client key
8d9a4d83
DDO
1313and sends an initial request message to the local CMP server
1314using a pre-shared secret key for mutual authentication.
1315In this example the client does not have the CA certificate yet,
1316so we specify the name of the CA with the B<-recipient> option
1317and save any CA certificates that we may receive in the C<capubs.pem> file.
1318
6bbff162 1319In below command line usage examples the C<\> at line ends is used just
8d9a4d83
DDO
1320for formatting; each of the command invocations should be on a single line.
1321
1322 openssl genrsa -out cl_key.pem
6bbff162
DDO
1323 openssl cmp -cmd ir -server 127.0.0.1:80/pkix/ -recipient "/CN=CMPserver" \
1324 -ref 1234 -secret pass:1234-5678 \
8d9a4d83
DDO
1325 -newkey cl_key.pem -subject "/CN=MyName" \
1326 -cacertsout capubs.pem -certout cl_cert.pem
1327
8d9a4d83
DDO
1328=head2 Certificate update
1329
1330Then, when the client certificate and its related key pair needs to be updated,
1331the client can send a key update request taking the certs in C<capubs.pem>
1332as trusted for authenticating the server and using the previous cert and key
1333for its own authentication.
1334Then it can start using the new cert and key.
1335
1336 openssl genrsa -out cl_key_new.pem
d99c8667 1337 openssl cmp -cmd kur -server 127.0.0.1:80/pkix/ \
8d9a4d83
DDO
1338 -trusted capubs.pem \
1339 -cert cl_cert.pem -key cl_key.pem \
1340 -newkey cl_key_new.pem -certout cl_cert.pem
1341 cp cl_key_new.pem cl_key.pem
1342
89ed128d 1343This command sequence can be repeated as often as needed.
8d9a4d83 1344
8d9a4d83
DDO
1345=head2 Requesting information from CMP server
1346
1347Requesting "all relevant information" with an empty General Message.
1348This prints information about all received ITAV B<infoType>s to stdout.
1349
6bbff162
DDO
1350 openssl cmp -cmd genm -server 127.0.0.1/pkix/ -recipient "/CN=CMPserver" \
1351 -ref 1234 -secret pass:1234-5678
8d9a4d83 1352
8d9a4d83
DDO
1353=head2 Using a custom configuration file
1354
1355For CMP client invocations, in particular for certificate enrollment,
1356usually many parameters need to be set, which is tedious and error-prone to do
1357on the command line.
8c1cbc72 1358Therefore, the client offers the possibility to read
79a2bccd 1359options from sections of the OpenSSL config file, usually called F<openssl.cnf>.
8d9a4d83
DDO
1360The values found there can still be extended and even overridden by any
1361subsequently loaded sections and on the command line.
1362
1363After including in the configuration file the following sections:
1364
1365 [cmp]
1366 server = 127.0.0.1
1367 path = pkix/
1368 trusted = capubs.pem
1369 cert = cl_cert.pem
1370 key = cl_key.pem
1371 newkey = cl_key.pem
1372 certout = cl_cert.pem
1373
6bbff162 1374 [init]
8d9a4d83
DDO
1375 recipient = "/CN=CMPserver"
1376 trusted =
1377 cert =
1378 key =
1379 ref = 1234
1380 secret = pass:1234-5678-1234-567
1381 subject = "/CN=MyName"
1382 cacertsout = capubs.pem
1383
6bbff162 1384the above enrollment transactions reduce to
8d9a4d83 1385
6bbff162 1386 openssl cmp -section cmp,init
8d9a4d83
DDO
1387 openssl cmp -cmd kur -newkey cl_key_new.pem
1388
6bbff162 1389and the above transaction using a general message reduces to
8d9a4d83 1390
6bbff162 1391 openssl cmp -section cmp,init -cmd genm
8d9a4d83
DDO
1392
1393=head1 SEE ALSO
1394
1395L<openssl-genrsa(1)>, L<openssl-ecparam(1)>, L<openssl-list(1)>,
1396L<openssl-req(1)>, L<openssl-x509(1)>, L<x509v3_config(5)>
1397
f91d003a
RL
1398=head1 HISTORY
1399
1400The B<cmp> application was added in OpenSSL 3.0.
1401
7c6577ba
DDO
1402The B<-engine> option was deprecated in OpenSSL 3.0.
1403
1404The B<-profile> option was added in OpenSSL 3.3.
f91d003a 1405
8d9a4d83
DDO
1406=head1 COPYRIGHT
1407
da1c088f 1408Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.
8d9a4d83 1409
75850738 1410Licensed under the Apache License 2.0 (the "License"). You may not use
8d9a4d83
DDO
1411this file except in compliance with the License. You can obtain a copy
1412in the file LICENSE in the source distribution or at
1413L<https://www.openssl.org/source/license.html>.
1414
1415=cut