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