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