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