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