]> git.ipfire.org Git - thirdparty/openssl.git/blame_incremental - doc/man3/SSL_CONF_cmd.pod
Update KTLS documentation
[thirdparty/openssl.git] / doc / man3 / SSL_CONF_cmd.pod
... / ...
CommitLineData
1=pod
2
3=head1 NAME
4
5SSL_CONF_cmd_value_type,
6SSL_CONF_cmd - send configuration command
7
8=head1 SYNOPSIS
9
10 #include <openssl/ssl.h>
11
12 int SSL_CONF_cmd(SSL_CONF_CTX *ctx, const char *option, const char *value);
13 int SSL_CONF_cmd_value_type(SSL_CONF_CTX *ctx, const char *option);
14
15=head1 DESCRIPTION
16
17The function SSL_CONF_cmd() performs configuration operation B<option> with
18optional parameter B<value> on B<ctx>. Its purpose is to simplify application
19configuration of B<SSL_CTX> or B<SSL> structures by providing a common
20framework for command line options or configuration files.
21
22SSL_CONF_cmd_value_type() returns the type of value that B<option> refers to.
23
24=head1 SUPPORTED COMMAND LINE COMMANDS
25
26Currently supported B<option> names for command lines (i.e. when the
27flag B<SSL_CONF_CMDLINE> is set) are listed below. Note: all B<option> names
28are case sensitive. Unless otherwise stated commands can be used by
29both clients and servers and the B<value> parameter is not used. The default
30prefix for command line commands is B<-> and that is reflected below.
31
32=over 4
33
34=item B<-bugs>
35
36Various bug workarounds are set, same as setting B<SSL_OP_ALL>.
37
38=item B<-no_comp>
39
40Disables support for SSL/TLS compression, same as setting
41B<SSL_OP_NO_COMPRESSION>.
42As of OpenSSL 1.1.0, compression is off by default.
43
44=item B<-comp>
45
46Enables support for SSL/TLS compression, same as clearing
47B<SSL_OP_NO_COMPRESSION>.
48This command was introduced in OpenSSL 1.1.0.
49As of OpenSSL 1.1.0, compression is off by default.
50
51=item B<-no_ticket>
52
53Disables support for session tickets, same as setting B<SSL_OP_NO_TICKET>.
54
55=item B<-serverpref>
56
57Use server and not client preference order when determining which cipher suite,
58signature algorithm or elliptic curve to use for an incoming connection.
59Equivalent to B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
60
61=item B<-legacyrenegotiation>
62
63permits the use of unsafe legacy renegotiation. Equivalent to setting
64B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
65
66=item B<-no_renegotiation>
67
68Disables all attempts at renegotiation in TLSv1.2 and earlier, same as setting
69B<SSL_OP_NO_RENEGOTIATION>.
70
71=item B<-no_resumption_on_reneg>
72
73set SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION flag. Only used by servers.
74
75=item B<-legacy_server_connect>, B<-no_legacy_server_connect>
76
77permits or prohibits the use of unsafe legacy renegotiation for OpenSSL
78clients only. Equivalent to setting or clearing B<SSL_OP_LEGACY_SERVER_CONNECT>.
79Set by default.
80
81=item B<-prioritize_chacha>
82
83Prioritize ChaCha ciphers when the client has a ChaCha20 cipher at the top of
84its preference list. This usually indicates a client without AES hardware
85acceleration (e.g. mobile) is in use. Equivalent to B<SSL_OP_PRIORITIZE_CHACHA>.
86Only used by servers. Requires B<-serverpref>.
87
88=item B<-allow_no_dhe_kex>
89
90In TLSv1.3 allow a non-(ec)dhe based key exchange mode on resumption. This means
91that there will be no forward secrecy for the resumed session.
92
93=item B<-strict>
94
95enables strict mode protocol handling. Equivalent to setting
96B<SSL_CERT_FLAG_TLS_STRICT>.
97
98=item B<-sigalgs> I<algs>
99
100This sets the supported signature algorithms for TLSv1.2 and TLSv1.3.
101For clients this value is used directly for the supported signature
102algorithms extension. For servers it is used to determine which signature
103algorithms to support.
104
105The B<algs> argument should be a colon separated list of signature
106algorithms in order of decreasing preference of the form B<algorithm+hash>
107or B<signature_scheme>. B<algorithm> is one of B<RSA>, B<DSA> or B<ECDSA> and
108B<hash> is a supported algorithm OID short name such as B<SHA1>, B<SHA224>,
109B<SHA256>, B<SHA384> of B<SHA512>. Note: algorithm and hash names are case
110sensitive. B<signature_scheme> is one of the signature schemes defined in
111TLSv1.3, specified using the IETF name, e.g., B<ecdsa_secp256r1_sha256>,
112B<ed25519>, or B<rsa_pss_pss_sha256>.
113
114If this option is not set then all signature algorithms supported by the
115OpenSSL library are permissible.
116
117Note: algorithms which specify a PKCS#1 v1.5 signature scheme (either by
118using B<RSA> as the B<algorithm> or by using one of the B<rsa_pkcs1_*>
119identifiers) are ignored in TLSv1.3 and will not be negotiated.
120
121=item B<-client_sigalgs> I<algs>
122
123This sets the supported signature algorithms associated with client
124authentication for TLSv1.2 and TLSv1.3. For servers the B<algs> is used
125in the B<signature_algorithms> field of a B<CertificateRequest> message.
126For clients it is used to determine which signature algorithm to use with
127the client certificate. If a server does not request a certificate this
128option has no effect.
129
130The syntax of B<algs> is identical to B<-sigalgs>. If not set, then the
131value set for B<-sigalgs> will be used instead.
132
133=item B<-groups> I<groups>
134
135This sets the supported groups. For clients, the groups are sent using
136the supported groups extension. For servers, it is used to determine which
137group to use. This setting affects groups used for signatures (in TLSv1.2
138and earlier) and key exchange. The first group listed will also be used
139for the B<key_share> sent by a client in a TLSv1.3 B<ClientHello>.
140
141The B<groups> argument is a colon separated list of groups. The group can
142be either the B<NIST> name (e.g. B<P-256>), some other commonly used name
143where applicable (e.g. B<X25519>, B<ffdhe2048>) or an OpenSSL OID name
144(e.g. B<prime256v1>). Group names are case sensitive. The list should be
145in order of preference with the most preferred group first.
146
147Currently supported groups for B<TLSv1.3> are B<P-256>, B<P-384>, B<P-521>,
148B<X25519>, B<X448>, B<ffdhe2048>, B<ffdhe3072>, B<ffdhe4096>, B<ffdhe6144>,
149B<ffdhe8192>.
150
151=item B<-curves> I<groups>
152
153This is a synonym for the B<-groups> command.
154
155=item B<-named_curve> I<curve>
156
157This sets the temporary curve used for ephemeral ECDH modes. Only used
158by servers.
159
160The B<groups> argument is a curve name or the special value B<auto> which
161picks an appropriate curve based on client and server preferences. The
162curve can be either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name
163(e.g. B<prime256v1>). Curve names are case sensitive.
164
165=item B<-cipher> I<ciphers>
166
167Sets the TLSv1.2 and below ciphersuite list to B<ciphers>. This list will be
168combined with any configured TLSv1.3 ciphersuites. Note: syntax checking
169of B<ciphers> is currently not performed unless a B<SSL> or B<SSL_CTX>
170structure is associated with B<ctx>.
171
172=item B<-ciphersuites> I<1.3ciphers>
173
174Sets the available ciphersuites for TLSv1.3 to value. This is a
175colon-separated list of TLSv1.3 ciphersuite names in order of preference. This
176list will be combined any configured TLSv1.2 and below ciphersuites.
177See L<openssl-ciphers(1)> for more information.
178
179=item B<-min_protocol> I<minprot>, B<-max_protocol> I<maxprot>
180
181Sets the minimum and maximum supported protocol.
182Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
183B<TLSv1.2>, B<TLSv1.3> for TLS; B<DTLSv1>, B<DTLSv1.2> for DTLS, and B<None>
184for no limit.
185If either the lower or upper bound is not specified then only the other bound
186applies, if specified.
187If your application supports both TLS and DTLS you can specify any of these
188options twice, once with a bound for TLS and again with an appropriate bound
189for DTLS.
190To restrict the supported protocol versions use these commands rather than the
191deprecated alternative commands below.
192
193=item B<-record_padding> I<padding>
194
195Attempts to pad TLSv1.3 records so that they are a multiple of B<padding>
196in length on send. A B<padding> of 0 or 1 turns off padding. Otherwise,
197the B<padding> must be >1 or <=16384.
198
199=item B<-debug_broken_protocol>
200
201Ignored.
202
203=item B<-no_middlebox>
204
205Turn off "middlebox compatibility", as described below.
206
207=back
208
209=head2 Additional Options
210
211The following options are accepted by SSL_CONF_cmd(), but are not
212processed by the OpenSSL commands.
213
214=over 4
215
216=item B<-cert> I<file>
217
218Attempts to use B<file> as the certificate for the appropriate context. It
219currently uses SSL_CTX_use_certificate_chain_file() if an B<SSL_CTX>
220structure is set or SSL_use_certificate_file() with filetype PEM if an
221B<SSL> structure is set. This option is only supported if certificate
222operations are permitted.
223
224=item B<-key> I<file>
225
226Attempts to use B<file> as the private key for the appropriate context. This
227option is only supported if certificate operations are permitted. Note:
228if no B<-key> option is set then a private key is not loaded unless the
229flag B<SSL_CONF_FLAG_REQUIRE_PRIVATE> is set.
230
231=item B<-dhparam> I<file>
232
233Attempts to use B<file> as the set of temporary DH parameters for
234the appropriate context. This option is only supported if certificate
235operations are permitted.
236
237=item B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>, B<-no_tls1_3>
238
239Disables protocol support for SSLv3, TLSv1.0, TLSv1.1, TLSv1.2 or TLSv1.3 by
240setting the corresponding options B<SSL_OP_NO_SSLv3>, B<SSL_OP_NO_TLSv1>,
241B<SSL_OP_NO_TLSv1_1>, B<SSL_OP_NO_TLSv1_2> and B<SSL_OP_NO_TLSv1_3>
242respectively. These options are deprecated, use B<-min_protocol> and
243B<-max_protocol> instead.
244
245=item B<-anti_replay>, B<-no_anti_replay>
246
247Switches replay protection, on or off respectively. With replay protection on,
248OpenSSL will automatically detect if a session ticket has been used more than
249once, TLSv1.3 has been negotiated, and early data is enabled on the server. A
250full handshake is forced if a session ticket is used a second or subsequent
251time. Anti-Replay is on by default unless overridden by a configuration file and
252is only used by servers. Anti-replay measures are required for compliance with
253the TLSv1.3 specification. Some applications may be able to mitigate the replay
254risks in other ways and in such cases the built-in OpenSSL functionality is not
255required. Switching off anti-replay is equivalent to B<SSL_OP_NO_ANTI_REPLAY>.
256
257=back
258
259=head1 SUPPORTED CONFIGURATION FILE COMMANDS
260
261Currently supported B<option> names for configuration files (i.e., when the
262flag B<SSL_CONF_FLAG_FILE> is set) are listed below. All configuration file
263B<option> names are case insensitive so B<signaturealgorithms> is recognised
264as well as B<SignatureAlgorithms>. Unless otherwise stated the B<value> names
265are also case insensitive.
266
267Note: the command prefix (if set) alters the recognised B<option> values.
268
269=over 4
270
271=item B<CipherString>
272
273Sets the ciphersuite list for TLSv1.2 and below to B<value>. This list will be
274combined with any configured TLSv1.3 ciphersuites. Note: syntax
275checking of B<value> is currently not performed unless an B<SSL> or B<SSL_CTX>
276structure is associated with B<ctx>.
277
278=item B<Ciphersuites>
279
280Sets the available ciphersuites for TLSv1.3 to B<value>. This is a
281colon-separated list of TLSv1.3 ciphersuite names in order of preference. This
282list will be combined any configured TLSv1.2 and below ciphersuites.
283See L<openssl-ciphers(1)> for more information.
284
285=item B<Certificate>
286
287Attempts to use the file B<value> as the certificate for the appropriate
288context. It currently uses SSL_CTX_use_certificate_chain_file() if an B<SSL_CTX>
289structure is set or SSL_use_certificate_file() with filetype PEM if an B<SSL>
290structure is set. This option is only supported if certificate operations
291are permitted.
292
293=item B<PrivateKey>
294
295Attempts to use the file B<value> as the private key for the appropriate
296context. This option is only supported if certificate operations
297are permitted. Note: if no B<PrivateKey> option is set then a private key is
298not loaded unless the B<SSL_CONF_FLAG_REQUIRE_PRIVATE> is set.
299
300=item B<ChainCAFile>, B<ChainCAPath>, B<VerifyCAFile>, B<VerifyCAPath>
301
302These options indicate a file or directory used for building certificate
303chains or verifying certificate chains. These options are only supported
304if certificate operations are permitted.
305
306=item B<RequestCAFile>
307
308This option indicates a file containing a set of certificates in PEM form.
309The subject names of the certificates are sent to the peer in the
310B<certificate_authorities> extension for TLS 1.3 (in ClientHello or
311CertificateRequest) or in a certificate request for previous versions or
312TLS.
313
314=item B<ServerInfoFile>
315
316Attempts to use the file B<value> in the "serverinfo" extension using the
317function SSL_CTX_use_serverinfo_file.
318
319=item B<DHParameters>
320
321Attempts to use the file B<value> as the set of temporary DH parameters for
322the appropriate context. This option is only supported if certificate
323operations are permitted.
324
325=item B<RecordPadding>
326
327Attempts to pad TLSv1.3 records so that they are a multiple of B<value> in
328length on send. A B<value> of 0 or 1 turns off padding. Otherwise, the
329B<value> must be >1 or <=16384.
330
331=item B<SignatureAlgorithms>
332
333This sets the supported signature algorithms for TLSv1.2 and TLSv1.3.
334For clients this
335value is used directly for the supported signature algorithms extension. For
336servers it is used to determine which signature algorithms to support.
337
338The B<value> argument should be a colon separated list of signature algorithms
339in order of decreasing preference of the form B<algorithm+hash> or
340B<signature_scheme>. B<algorithm>
341is one of B<RSA>, B<DSA> or B<ECDSA> and B<hash> is a supported algorithm
342OID short name such as B<SHA1>, B<SHA224>, B<SHA256>, B<SHA384> of B<SHA512>.
343Note: algorithm and hash names are case sensitive.
344B<signature_scheme> is one of the signature schemes defined in TLSv1.3,
345specified using the IETF name, e.g., B<ecdsa_secp256r1_sha256>, B<ed25519>,
346or B<rsa_pss_pss_sha256>.
347
348If this option is not set then all signature algorithms supported by the
349OpenSSL library are permissible.
350
351Note: algorithms which specify a PKCS#1 v1.5 signature scheme (either by
352using B<RSA> as the B<algorithm> or by using one of the B<rsa_pkcs1_*>
353identifiers) are ignored in TLSv1.3 and will not be negotiated.
354
355=item B<ClientSignatureAlgorithms>
356
357This sets the supported signature algorithms associated with client
358authentication for TLSv1.2 and TLSv1.3.
359For servers the value is used in the
360B<signature_algorithms> field of a B<CertificateRequest> message.
361For clients it is
362used to determine which signature algorithm to use with the client certificate.
363If a server does not request a certificate this option has no effect.
364
365The syntax of B<value> is identical to B<SignatureAlgorithms>. If not set then
366the value set for B<SignatureAlgorithms> will be used instead.
367
368=item B<Groups>
369
370This sets the supported groups. For clients, the groups are
371sent using the supported groups extension. For servers, it is used
372to determine which group to use. This setting affects groups used for
373signatures (in TLSv1.2 and earlier) and key exchange. The first group listed
374will also be used for the B<key_share> sent by a client in a TLSv1.3
375B<ClientHello>.
376
377The B<value> argument is a colon separated list of groups. The group can be
378either the B<NIST> name (e.g. B<P-256>), some other commonly used name where
379applicable (e.g. B<X25519>, B<ffdhe2048>) or an OpenSSL OID name
380(e.g. B<prime256v1>). Group names are case sensitive. The list should be in
381order of preference with the most preferred group first.
382
383Currently supported groups for B<TLSv1.3> are B<P-256>, B<P-384>, B<P-521>,
384B<X25519>, B<X448>, B<ffdhe2048>, B<ffdhe3072>, B<ffdhe4096>, B<ffdhe6144>,
385B<ffdhe8192>.
386
387=item B<Curves>
388
389This is a synonym for the "Groups" command.
390
391=item B<MinProtocol>
392
393This sets the minimum supported SSL, TLS or DTLS version.
394
395Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
396B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
397The SSL and TLS bounds apply only to TLS-based contexts, while the DTLS bounds
398apply only to DTLS-based contexts.
399The command can be repeated with one instance setting a TLS bound, and the
400other setting a DTLS bound.
401The value B<None> applies to both types of contexts and disables the limits.
402
403=item B<MaxProtocol>
404
405This sets the maximum supported SSL, TLS or DTLS version.
406
407Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
408B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
409The SSL and TLS bounds apply only to TLS-based contexts, while the DTLS bounds
410apply only to DTLS-based contexts.
411The command can be repeated with one instance setting a TLS bound, and the
412other setting a DTLS bound.
413The value B<None> applies to both types of contexts and disables the limits.
414
415=item B<Protocol>
416
417This can be used to enable or disable certain versions of the SSL,
418TLS or DTLS protocol.
419
420The B<value> argument is a comma separated list of supported protocols
421to enable or disable.
422If a protocol is preceded by B<-> that version is disabled.
423
424All protocol versions are enabled by default.
425You need to disable at least one protocol version for this setting have any
426effect.
427Only enabling some protocol versions does not disable the other protocol
428versions.
429
430Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
431B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
432The special value B<ALL> refers to all supported versions.
433
434This can't enable protocols that are disabled using B<MinProtocol>
435or B<MaxProtocol>, but can disable protocols that are still allowed
436by them.
437
438The B<Protocol> command is fragile and deprecated; do not use it.
439Use B<MinProtocol> and B<MaxProtocol> instead.
440If you do use B<Protocol>, make sure that the resulting range of enabled
441protocols has no "holes", e.g. if TLS 1.0 and TLS 1.2 are both enabled, make
442sure to also leave TLS 1.1 enabled.
443
444=item B<Options>
445
446The B<value> argument is a comma separated list of various flags to set.
447If a flag string is preceded B<-> it is disabled.
448See the L<SSL_CTX_set_options(3)> function for more details of
449individual options.
450
451Each option is listed below. Where an operation is enabled by default
452the B<-flag> syntax is needed to disable it.
453
454B<SessionTicket>: session ticket support, enabled by default. Inverse of
455B<SSL_OP_NO_TICKET>: that is B<-SessionTicket> is the same as setting
456B<SSL_OP_NO_TICKET>.
457
458B<Compression>: SSL/TLS compression support, enabled by default. Inverse
459of B<SSL_OP_NO_COMPRESSION>.
460
461B<EmptyFragments>: use empty fragments as a countermeasure against a
462SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. It
463is set by default. Inverse of B<SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS>.
464
465B<Bugs>: enable various bug workarounds. Same as B<SSL_OP_ALL>.
466
467B<DHSingle>: enable single use DH keys, set by default. Inverse of
468B<SSL_OP_DH_SINGLE>. Only used by servers.
469
470B<ECDHSingle>: enable single use ECDH keys, set by default. Inverse of
471B<SSL_OP_ECDH_SINGLE>. Only used by servers.
472
473B<ServerPreference>: use server and not client preference order when
474determining which cipher suite, signature algorithm or elliptic curve
475to use for an incoming connection. Equivalent to
476B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
477
478B<PrioritizeChaCha>: prioritizes ChaCha ciphers when the client has a
479ChaCha20 cipher at the top of its preference list. This usually indicates
480a mobile client is in use. Equivalent to B<SSL_OP_PRIORITIZE_CHACHA>.
481Only used by servers.
482
483B<NoResumptionOnRenegotiation>: set
484B<SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION> flag. Only used by servers.
485
486B<NoRenegotiation>: disables all attempts at renegotiation in TLSv1.2 and
487earlier, same as setting B<SSL_OP_NO_RENEGOTIATION>.
488
489B<UnsafeLegacyRenegotiation>: permits the use of unsafe legacy renegotiation.
490Equivalent to B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
491
492B<UnsafeLegacyServerConnect>: permits the use of unsafe legacy renegotiation
493for OpenSSL clients only. Equivalent to B<SSL_OP_LEGACY_SERVER_CONNECT>.
494Set by default.
495
496B<EncryptThenMac>: use encrypt-then-mac extension, enabled by
497default. Inverse of B<SSL_OP_NO_ENCRYPT_THEN_MAC>: that is,
498B<-EncryptThenMac> is the same as setting B<SSL_OP_NO_ENCRYPT_THEN_MAC>.
499
500B<AllowNoDHEKEX>: In TLSv1.3 allow a non-(ec)dhe based key exchange mode on
501resumption. This means that there will be no forward secrecy for the resumed
502session. Equivalent to B<SSL_OP_ALLOW_NO_DHE_KEX>.
503
504B<MiddleboxCompat>: If set then dummy Change Cipher Spec (CCS) messages are sent
505in TLSv1.3. This has the effect of making TLSv1.3 look more like TLSv1.2 so that
506middleboxes that do not understand TLSv1.3 will not drop the connection. This
507option is set by default. A future version of OpenSSL may not set this by
508default. Equivalent to B<SSL_OP_ENABLE_MIDDLEBOX_COMPAT>.
509
510B<AntiReplay>: If set then OpenSSL will automatically detect if a session ticket
511has been used more than once, TLSv1.3 has been negotiated, and early data is
512enabled on the server. A full handshake is forced if a session ticket is used a
513second or subsequent time. This option is set by default and is only used by
514servers. Anti-replay measures are required to comply with the TLSv1.3
515specification. Some applications may be able to mitigate the replay risks in
516other ways and in such cases the built-in OpenSSL functionality is not required.
517Disabling anti-replay is equivalent to setting B<SSL_OP_NO_ANTI_REPLAY>.
518
519B<ExtendedMasterSecret>: use extended master secret extension, enabled by
520default. Inverse of B<SSL_OP_NO_EXTENDED_MASTER_SECRET>: that is,
521B<-ExtendedMasterSecret> is the same as setting B<SSL_OP_NO_EXTENDED_MASTER_SECRET>.
522
523B<CANames>: use CA names extension, enabled by
524default. Inverse of B<SSL_OP_DISABLE_TLSEXT_CA_NAMES>: that is,
525B<-CANames> is the same as setting B<SSL_OP_DISABLE_TLSEXT_CA_NAMES>.
526
527B<KTLS>: Enables kernel TLS if support has been compiled in, and it is supported
528by the negotiated ciphersuites and extensions. Equivalent to
529B<SSL_OP_ENABLE_KTLS>.
530
531=item B<VerifyMode>
532
533The B<value> argument is a comma separated list of flags to set.
534
535B<Peer> enables peer verification: for clients only.
536
537B<Request> requests but does not require a certificate from the client.
538Servers only.
539
540B<Require> requests and requires a certificate from the client: an error
541occurs if the client does not present a certificate. Servers only.
542
543B<Once> requests a certificate from a client only on the initial connection:
544not when renegotiating. Servers only.
545
546B<RequestPostHandshake> configures the connection to support requests but does
547not require a certificate from the client post-handshake. A certificate will
548not be requested during the initial handshake. The server application must
549provide a mechanism to request a certificate post-handshake. Servers only.
550TLSv1.3 only.
551
552B<RequiresPostHandshake> configures the connection to support requests and
553requires a certificate from the client post-handshake: an error occurs if the
554client does not present a certificate. A certificate will not be requested
555during the initial handshake. The server application must provide a mechanism
556to request a certificate post-handshake. Servers only. TLSv1.3 only.
557
558=item B<ClientCAFile>, B<ClientCAPath>
559
560A file or directory of certificates in PEM format whose names are used as the
561set of acceptable names for client CAs. Servers only. This option is only
562supported if certificate operations are permitted.
563
564=back
565
566=head1 SUPPORTED COMMAND TYPES
567
568The function SSL_CONF_cmd_value_type() currently returns one of the following
569types:
570
571=over 4
572
573=item B<SSL_CONF_TYPE_UNKNOWN>
574
575The B<option> string is unrecognised, this return value can be use to flag
576syntax errors.
577
578=item B<SSL_CONF_TYPE_STRING>
579
580The value is a string without any specific structure.
581
582=item B<SSL_CONF_TYPE_FILE>
583
584The value is a filename.
585
586=item B<SSL_CONF_TYPE_DIR>
587
588The value is a directory name.
589
590=item B<SSL_CONF_TYPE_NONE>
591
592The value string is not used e.g. a command line option which doesn't take an
593argument.
594
595=back
596
597=head1 NOTES
598
599The order of operations is significant. This can be used to set either defaults
600or values which cannot be overridden. For example if an application calls:
601
602 SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
603 SSL_CONF_cmd(ctx, userparam, uservalue);
604
605it will disable SSLv3 support by default but the user can override it. If
606however the call sequence is:
607
608 SSL_CONF_cmd(ctx, userparam, uservalue);
609 SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
610
611SSLv3 is B<always> disabled and attempt to override this by the user are
612ignored.
613
614By checking the return code of SSL_CONF_cmd() it is possible to query if a
615given B<option> is recognised, this is useful if SSL_CONF_cmd() values are
616mixed with additional application specific operations.
617
618For example an application might call SSL_CONF_cmd() and if it returns
619-2 (unrecognised command) continue with processing of application specific
620commands.
621
622Applications can also use SSL_CONF_cmd() to process command lines though the
623utility function SSL_CONF_cmd_argv() is normally used instead. One way
624to do this is to set the prefix to an appropriate value using
625SSL_CONF_CTX_set1_prefix(), pass the current argument to B<option> and the
626following argument to B<value> (which may be NULL).
627
628In this case if the return value is positive then it is used to skip that
629number of arguments as they have been processed by SSL_CONF_cmd(). If -2 is
630returned then B<option> is not recognised and application specific arguments
631can be checked instead. If -3 is returned a required argument is missing
632and an error is indicated. If 0 is returned some other error occurred and
633this can be reported back to the user.
634
635The function SSL_CONF_cmd_value_type() can be used by applications to
636check for the existence of a command or to perform additional syntax
637checking or translation of the command value. For example if the return
638value is B<SSL_CONF_TYPE_FILE> an application could translate a relative
639pathname to an absolute pathname.
640
641=head1 RETURN VALUES
642
643SSL_CONF_cmd() returns 1 if the value of B<option> is recognised and B<value> is
644B<NOT> used and 2 if both B<option> and B<value> are used. In other words it
645returns the number of arguments processed. This is useful when processing
646command lines.
647
648A return value of -2 means B<option> is not recognised.
649
650A return value of -3 means B<option> is recognised and the command requires a
651value but B<value> is NULL.
652
653A return code of 0 indicates that both B<option> and B<value> are valid but an
654error occurred attempting to perform the operation: for example due to an
655error in the syntax of B<value> in this case the error queue may provide
656additional information.
657
658=head1 EXAMPLES
659
660Set supported signature algorithms:
661
662 SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256");
663
664There are various ways to select the supported protocols.
665
666This set the minimum protocol version to TLSv1, and so disables SSLv3.
667This is the recommended way to disable protocols.
668
669 SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1");
670
671The following also disables SSLv3:
672
673 SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
674
675The following will first enable all protocols, and then disable
676SSLv3.
677If no protocol versions were disabled before this has the same effect as
678"-SSLv3", but if some versions were disables this will re-enable them before
679disabling SSLv3.
680
681 SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3");
682
683Only enable TLSv1.2:
684
685 SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1.2");
686 SSL_CONF_cmd(ctx, "MaxProtocol", "TLSv1.2");
687
688This also only enables TLSv1.2:
689
690 SSL_CONF_cmd(ctx, "Protocol", "-ALL,TLSv1.2");
691
692Disable TLS session tickets:
693
694 SSL_CONF_cmd(ctx, "Options", "-SessionTicket");
695
696Enable compression:
697
698 SSL_CONF_cmd(ctx, "Options", "Compression");
699
700Set supported curves to P-256, P-384:
701
702 SSL_CONF_cmd(ctx, "Curves", "P-256:P-384");
703
704=head1 SEE ALSO
705
706L<ssl(7)>,
707L<SSL_CONF_CTX_new(3)>,
708L<SSL_CONF_CTX_set_flags(3)>,
709L<SSL_CONF_CTX_set1_prefix(3)>,
710L<SSL_CONF_CTX_set_ssl_ctx(3)>,
711L<SSL_CONF_cmd_argv(3)>,
712L<SSL_CTX_set_options(3)>
713
714=head1 HISTORY
715
716The SSL_CONF_cmd() function was added in OpenSSL 1.0.2.
717
718The B<SSL_OP_NO_SSL2> option doesn't have effect since 1.1.0, but the macro
719is retained for backwards compatibility.
720
721The B<SSL_CONF_TYPE_NONE> was added in OpenSSL 1.1.0. In earlier versions of
722OpenSSL passing a command which didn't take an argument would return
723B<SSL_CONF_TYPE_UNKNOWN>.
724
725B<MinProtocol> and B<MaxProtocol> where added in OpenSSL 1.1.0.
726
727B<AllowNoDHEKEX> and B<PrioritizeChaCha> were added in OpenSSL 1.1.1.
728
729=head1 COPYRIGHT
730
731Copyright 2012-2020 The OpenSSL Project Authors. All Rights Reserved.
732
733Licensed under the Apache License 2.0 (the "License"). You may not use
734this file except in compliance with the License. You can obtain a copy
735in the file LICENSE in the source distribution or at
736L<https://www.openssl.org/source/license.html>.
737
738=cut