]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/SSL_CONF_cmd.pod
Update KTLS documentation
[thirdparty/openssl.git] / doc / man3 / SSL_CONF_cmd.pod
CommitLineData
3db935a9
DSH
1=pod
2
3=head1 NAME
4
1722496f 5SSL_CONF_cmd_value_type,
3db935a9
DSH
6SSL_CONF_cmd - send configuration command
7
8=head1 SYNOPSIS
9
10 #include <openssl/ssl.h>
11
8b3efb53
RS
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);
3db935a9
DSH
14
15=head1 DESCRIPTION
16
8b3efb53 17The function SSL_CONF_cmd() performs configuration operation B<option> with
3db935a9
DSH
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
13cfb043
DSH
20framework for command line options or configuration files.
21
8b3efb53 22SSL_CONF_cmd_value_type() returns the type of value that B<option> refers to.
ec2f7e56 23
13cfb043
DSH
24=head1 SUPPORTED COMMAND LINE COMMANDS
25
8b3efb53
RS
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
4b64e0cb 28are case sensitive. Unless otherwise stated commands can be used by
13cfb043
DSH
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
8b3efb53 34=item B<-bugs>
13cfb043 35
8b3efb53 36Various bug workarounds are set, same as setting B<SSL_OP_ALL>.
13cfb043 37
8b3efb53 38=item B<-no_comp>
13cfb043 39
8b3efb53
RS
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.
13cfb043 43
8b3efb53 44=item B<-comp>
322755cc 45
8b3efb53
RS
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.
13cfb043 50
8b3efb53 51=item B<-no_ticket>
13cfb043 52
8b3efb53 53Disables support for session tickets, same as setting B<SSL_OP_NO_TICKET>.
13cfb043 54
8b3efb53 55=item B<-serverpref>
47f7cf05 56
8b3efb53
RS
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.
47f7cf05 60
8b3efb53 61=item B<-legacyrenegotiation>
dfa1f547 62
8b3efb53
RS
63permits the use of unsafe legacy renegotiation. Equivalent to setting
64B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
47f7cf05 65
8b3efb53 66=item B<-no_renegotiation>
47f7cf05 67
8b3efb53
RS
68Disables all attempts at renegotiation in TLSv1.2 and earlier, same as setting
69B<SSL_OP_NO_RENEGOTIATION>.
47f7cf05 70
8b3efb53 71=item B<-no_resumption_on_reneg>
13cfb043 72
8b3efb53 73set SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION flag. Only used by servers.
13cfb043 74
8b3efb53 75=item B<-legacy_server_connect>, B<-no_legacy_server_connect>
13cfb043 76
8b3efb53
RS
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.
13cfb043 80
8b3efb53 81=item B<-prioritize_chacha>
13cfb043 82
8b3efb53
RS
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>.
9d2674cd 87
8b3efb53 88=item B<-allow_no_dhe_kex>
9d2674cd 89
8b3efb53
RS
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.
9d2674cd 92
8b3efb53 93=item B<-strict>
ec2f7e56 94
8b3efb53
RS
95enables strict mode protocol handling. Equivalent to setting
96B<SSL_CERT_FLAG_TLS_STRICT>.
ec2f7e56 97
8b3efb53 98=item B<-sigalgs> I<algs>
ec2f7e56 99
8b3efb53
RS
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>.
ec2f7e56 113
8b3efb53
RS
114If this option is not set then all signature algorithms supported by the
115OpenSSL library are permissible.
c557f921 116
8b3efb53
RS
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.
c557f921 120
8b3efb53 121=item B<-client_sigalgs> I<algs>
c649d10d 122
8b3efb53
RS
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.
c649d10d 129
8b3efb53
RS
130The syntax of B<algs> is identical to B<-sigalgs>. If not set, then the
131value set for B<-sigalgs> will be used instead.
db0f35dd 132
8b3efb53 133=item B<-groups> I<groups>
db0f35dd 134
8b3efb53
RS
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>.
7946ab33 140
8b3efb53
RS
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
8c1cbc72 144(e.g. B<prime256v1>). Group names are case sensitive. The list should be
8b3efb53 145in order of preference with the most preferred group first.
7946ab33 146
8b3efb53
RS
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>.
13cfb043 150
8b3efb53 151=item B<-curves> I<groups>
13cfb043 152
8b3efb53 153This is a synonym for the B<-groups> command.
13cfb043 154
8b3efb53 155=item B<-named_curve> I<curve>
13cfb043 156
8b3efb53
RS
157This sets the temporary curve used for ephemeral ECDH modes. Only used
158by servers.
13cfb043 159
8b3efb53
RS
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
8c1cbc72 163(e.g. B<prime256v1>). Curve names are case sensitive.
cc5a9ba4 164
8b3efb53 165=item B<-cipher> I<ciphers>
cc5a9ba4 166
8b3efb53
RS
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>.
13cfb043 171
8b3efb53 172=item B<-ciphersuites> I<1.3ciphers>
13cfb043 173
8b3efb53
RS
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.
13cfb043 178
8b3efb53 179=item B<-min_protocol> I<minprot>, B<-max_protocol> I<maxprot>
13cfb043 180
77174598
VD
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.
13cfb043 192
8b3efb53 193=item B<-record_padding> I<padding>
e1c7871d 194
8b3efb53
RS
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.
e1c7871d 198
8b3efb53 199=item B<-debug_broken_protocol>
f0ef019d 200
03e16083
RS
201Ignored.
202
8b3efb53 203=item B<-no_middlebox>
f0ef019d 204
03e16083
RS
205Turn off "middlebox compatibility", as described below.
206
8b3efb53 207=back
13cfb043 208
8b3efb53 209=head2 Additional Options
13cfb043 210
8b3efb53
RS
211The following options are accepted by SSL_CONF_cmd(), but are not
212processed by the OpenSSL commands.
13cfb043 213
8b3efb53 214=over 4
13cfb043 215
8b3efb53 216=item B<-cert> I<file>
4e2bd9cb 217
8b3efb53
RS
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.
4e2bd9cb 223
8b3efb53 224=item B<-key> I<file>
13cfb043 225
8b3efb53
RS
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.
13cfb043 244
3bb5e5b0
MC
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
13cfb043 257=back
3db935a9
DSH
258
259=head1 SUPPORTED CONFIGURATION FILE COMMANDS
260
8b3efb53 261Currently supported B<option> names for configuration files (i.e., when the
3db935a9 262flag B<SSL_CONF_FLAG_FILE> is set) are listed below. All configuration file
8b3efb53 263B<option> names are case insensitive so B<signaturealgorithms> is recognised
c7b7984a 264as well as B<SignatureAlgorithms>. Unless otherwise stated the B<value> names
3db935a9
DSH
265are also case insensitive.
266
8b3efb53 267Note: the command prefix (if set) alters the recognised B<option> values.
3db935a9
DSH
268
269=over 4
270
65f2a565 271=item B<CipherString>
3db935a9 272
9d2674cd
MC
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>
8b3efb53 276structure is associated with B<ctx>.
9d2674cd
MC
277
278=item B<Ciphersuites>
279
8b3efb53
RS
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
9d2674cd 282list will be combined any configured TLSv1.2 and below ciphersuites.
1903a9b7 283See L<openssl-ciphers(1)> for more information.
3db935a9 284
ec2f7e56
DSH
285=item B<Certificate>
286
287Attempts to use the file B<value> as the certificate for the appropriate
fc1d88f0
RS
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>
ec2f7e56
DSH
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
2011b169
DSH
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.
ec2f7e56 299
429261d0
DSH
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
5a185729
DSH
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
5b7f36e8
DSH
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
c557f921
DSH
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
c649d10d
TS
325=item B<RecordPadding>
326
322755cc 327Attempts to pad TLSv1.3 records so that they are a multiple of B<value> in
c649d10d
TS
328length on send. A B<value> of 0 or 1 turns off padding. Otherwise, the
329B<value> must be >1 or <=16384.
330
3db935a9
DSH
331=item B<SignatureAlgorithms>
332
322755cc
HK
333This sets the supported signature algorithms for TLSv1.2 and TLSv1.3.
334For clients this
3db935a9
DSH
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
322755cc
HK
339in order of decreasing preference of the form B<algorithm+hash> or
340B<signature_scheme>. B<algorithm>
3db935a9
DSH
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.
322755cc
HK
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>.
3db935a9
DSH
347
348If this option is not set then all signature algorithms supported by the
349OpenSSL library are permissible.
350
322755cc
HK
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
3db935a9
DSH
355=item B<ClientSignatureAlgorithms>
356
357This sets the supported signature algorithms associated with client
322755cc
HK
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.
3db935a9
DSH
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
47f7cf05 368=item B<Groups>
3db935a9 369
47f7cf05
MC
370This sets the supported groups. For clients, the groups are
371sent using the supported groups extension. For servers, it is used
322755cc
HK
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>.
3db935a9 376
47f7cf05
MC
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
dfa1f547 379applicable (e.g. B<X25519>, B<ffdhe2048>) or an OpenSSL OID name
8c1cbc72 380(e.g. B<prime256v1>). Group names are case sensitive. The list should be in
dfa1f547 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>.
47f7cf05
MC
386
387=item B<Curves>
388
389This is a synonym for the "Groups" command.
3db935a9 390
7946ab33
KR
391=item B<MinProtocol>
392
393This sets the minimum supported SSL, TLS or DTLS version.
394
57ce7b61 395Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
322755cc 396B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
77174598
VD
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.
7946ab33
KR
402
403=item B<MaxProtocol>
404
405This sets the maximum supported SSL, TLS or DTLS version.
406
57ce7b61 407Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
322755cc 408B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
77174598
VD
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.
7946ab33 414
3db935a9
DSH
415=item B<Protocol>
416
57ce7b61
VD
417This can be used to enable or disable certain versions of the SSL,
418TLS or DTLS protocol.
7946ab33 419
57ce7b61
VD
420The B<value> argument is a comma separated list of supported protocols
421to enable or disable.
7946ab33
KR
422If a protocol is preceded by B<-> that version is disabled.
423
424All protocol versions are enabled by default.
57ce7b61
VD
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.
7946ab33 429
57ce7b61 430Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
322755cc 431B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
7946ab33 432The special value B<ALL> refers to all supported versions.
3db935a9 433
57ce7b61
VD
434This can't enable protocols that are disabled using B<MinProtocol>
435or B<MaxProtocol>, but can disable protocols that are still allowed
436by them.
7946ab33
KR
437
438The B<Protocol> command is fragile and deprecated; do not use it.
439Use B<MinProtocol> and B<MaxProtocol> instead.
57ce7b61
VD
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.
3db935a9
DSH
443
444=item B<Options>
445
446The B<value> argument is a comma separated list of various flags to set.
8106cb8b
VD
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.
3db935a9
DSH
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
c7b7984a 465B<Bugs>: enable various bug workarounds. Same as B<SSL_OP_ALL>.
3db935a9 466
c7b7984a 467B<DHSingle>: enable single use DH keys, set by default. Inverse of
3db935a9
DSH
468B<SSL_OP_DH_SINGLE>. Only used by servers.
469
e1c7871d 470B<ECDHSingle>: enable single use ECDH keys, set by default. Inverse of
3db935a9
DSH
471B<SSL_OP_ECDH_SINGLE>. Only used by servers.
472
e1c7871d 473B<ServerPreference>: use server and not client preference order when
3db935a9
DSH
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
e1c7871d
TS
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
f0ef019d
DSH
484B<SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION> flag. Only used by servers.
485
4ac5e43d
HK
486B<NoRenegotiation>: disables all attempts at renegotiation in TLSv1.2 and
487earlier, same as setting B<SSL_OP_NO_RENEGOTIATION>.
488
e1c7871d 489B<UnsafeLegacyRenegotiation>: permits the use of unsafe legacy renegotiation.
3db935a9
DSH
490Equivalent to B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
491
e1c7871d 492B<UnsafeLegacyServerConnect>: permits the use of unsafe legacy renegotiation
3db935a9
DSH
493for OpenSSL clients only. Equivalent to B<SSL_OP_LEGACY_SERVER_CONNECT>.
494Set by default.
495
b3618f44
EK
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>.
4e2bd9cb
MC
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>.
b3618f44 503
1c4b1545
MC
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
3bb5e5b0
MC
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
088dfa13
TS
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
90fc2c26
NM
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
6878f430
MC
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
429261d0
DSH
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
9d75dce3
TS
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
429261d0
DSH
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
3db935a9
DSH
564=back
565
ec2f7e56
DSH
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
8b3efb53 575The B<option> string is unrecognised, this return value can be use to flag
ec2f7e56
DSH
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
9c0586d5 584The value is a filename.
ec2f7e56
DSH
585
586=item B<SSL_CONF_TYPE_DIR>
587
588The value is a directory name.
589
656b2605
DSH
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
fa9d77dc
CR
595=back
596
3db935a9
DSH
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
87d9cafa 602 SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
3db935a9
DSH
603 SSL_CONF_cmd(ctx, userparam, uservalue);
604
87d9cafa 605it will disable SSLv3 support by default but the user can override it. If
3db935a9
DSH
606however the call sequence is:
607
608 SSL_CONF_cmd(ctx, userparam, uservalue);
87d9cafa 609 SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
3db935a9 610
87d9cafa 611SSLv3 is B<always> disabled and attempt to override this by the user are
3db935a9
DSH
612ignored.
613
f5f85f75 614By checking the return code of SSL_CONF_cmd() it is possible to query if a
8b3efb53 615given B<option> is recognised, this is useful if SSL_CONF_cmd() values are
3db935a9
DSH
616mixed with additional application specific operations.
617
f5f85f75 618For example an application might call SSL_CONF_cmd() and if it returns
3db935a9
DSH
619-2 (unrecognised command) continue with processing of application specific
620commands.
621
f5f85f75
JS
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
821244cf 624to do this is to set the prefix to an appropriate value using
8b3efb53 625SSL_CONF_CTX_set1_prefix(), pass the current argument to B<option> and the
821244cf 626following argument to B<value> (which may be NULL).
3db935a9
DSH
627
628In this case if the return value is positive then it is used to skip that
f5f85f75 629number of arguments as they have been processed by SSL_CONF_cmd(). If -2 is
8b3efb53 630returned then B<option> is not recognised and application specific arguments
3db935a9
DSH
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
7946ab33 635The function SSL_CONF_cmd_value_type() can be used by applications to
ec2f7e56
DSH
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
4564e77a
PY
641=head1 RETURN VALUES
642
8b3efb53
RS
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
4564e77a
PY
645returns the number of arguments processed. This is useful when processing
646command lines.
647
8b3efb53 648A return value of -2 means B<option> is not recognised.
4564e77a 649
8b3efb53 650A return value of -3 means B<option> is recognised and the command requires a
4564e77a
PY
651value but B<value> is NULL.
652
8b3efb53 653A return code of 0 indicates that both B<option> and B<value> are valid but an
4564e77a
PY
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
3db935a9
DSH
658=head1 EXAMPLES
659
660Set supported signature algorithms:
661
662 SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256");
663
24c2cd39 664There are various ways to select the supported protocols.
7946ab33
KR
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
57ce7b61
VD
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.
3db935a9 680
87d9cafa 681 SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3");
3db935a9
DSH
682
683Only enable TLSv1.2:
684
7946ab33
KR
685 SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1.2");
686 SSL_CONF_cmd(ctx, "MaxProtocol", "TLSv1.2");
687
688This also only enables TLSv1.2:
689
3db935a9
DSH
690 SSL_CONF_cmd(ctx, "Protocol", "-ALL,TLSv1.2");
691
692Disable TLS session tickets:
693
694 SSL_CONF_cmd(ctx, "Options", "-SessionTicket");
695
dc5744cb
EK
696Enable compression:
697
698 SSL_CONF_cmd(ctx, "Options", "Compression");
699
3db935a9
DSH
700Set supported curves to P-256, P-384:
701
702 SSL_CONF_cmd(ctx, "Curves", "P-256:P-384");
703
3db935a9
DSH
704=head1 SEE ALSO
705
98ca37e4 706L<ssl(7)>,
9b86974e
RS
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)>,
8106cb8b
VD
711L<SSL_CONF_cmd_argv(3)>,
712L<SSL_CTX_set_options(3)>
3db935a9
DSH
713
714=head1 HISTORY
715
fc5ecadd 716The SSL_CONF_cmd() function was added in OpenSSL 1.0.2.
3db935a9 717
fc5ecadd
DMSP
718The B<SSL_OP_NO_SSL2> option doesn't have effect since 1.1.0, but the macro
719is retained for backwards compatibility.
45f55f6a 720
fc5ecadd 721The B<SSL_CONF_TYPE_NONE> was added in OpenSSL 1.1.0. In earlier versions of
656b2605
DSH
722OpenSSL passing a command which didn't take an argument would return
723B<SSL_CONF_TYPE_UNKNOWN>.
724
7946ab33
KR
725B<MinProtocol> and B<MaxProtocol> where added in OpenSSL 1.1.0.
726
e1c7871d
TS
727B<AllowNoDHEKEX> and B<PrioritizeChaCha> were added in OpenSSL 1.1.1.
728
e2f92610
RS
729=head1 COPYRIGHT
730
33388b44 731Copyright 2012-2020 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 732
4746f25a 733Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
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