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