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<NoRenegotiation> 312 313Disables all attempts at renegotiation in TLSv1.2 and earlier, same as setting 314B<SSL_OP_NO_RENEGOTIATION>. 315 316=item B<SignatureAlgorithms> 317 318This sets the supported signature algorithms for TLSv1.2 and TLSv1.3. 319For clients this 320value is used directly for the supported signature algorithms extension. For 321servers it is used to determine which signature algorithms to support. 322 323The B<value> argument should be a colon separated list of signature algorithms 324in order of decreasing preference of the form B<algorithm+hash> or 325B<signature_scheme>. B<algorithm> 326is one of B<RSA>, B<DSA> or B<ECDSA> and B<hash> is a supported algorithm 327OID short name such as B<SHA1>, B<SHA224>, B<SHA256>, B<SHA384> of B<SHA512>. 328Note: algorithm and hash names are case sensitive. 329B<signature_scheme> is one of the signature schemes defined in TLSv1.3, 330specified using the IETF name, e.g., B<ecdsa_secp256r1_sha256>, B<ed25519>, 331or B<rsa_pss_pss_sha256>. 332 333If this option is not set then all signature algorithms supported by the 334OpenSSL library are permissible. 335 336Note: algorithms which specify a PKCS#1 v1.5 signature scheme (either by 337using B<RSA> as the B<algorithm> or by using one of the B<rsa_pkcs1_*> 338identifiers) are ignored in TLSv1.3 and will not be negotiated. 339 340=item B<ClientSignatureAlgorithms> 341 342This sets the supported signature algorithms associated with client 343authentication for TLSv1.2 and TLSv1.3. 344For servers the value is used in the 345B<signature_algorithms> field of a B<CertificateRequest> message. 346For clients it is 347used to determine which signature algorithm to use with the client certificate. 348If a server does not request a certificate this option has no effect. 349 350The syntax of B<value> is identical to B<SignatureAlgorithms>. If not set then 351the value set for B<SignatureAlgorithms> will be used instead. 352 353=item B<Groups> 354 355This sets the supported groups. For clients, the groups are 356sent using the supported groups extension. For servers, it is used 357to determine which group to use. This setting affects groups used for 358signatures (in TLSv1.2 and earlier) and key exchange. The first group listed 359will also be used for the B<key_share> sent by a client in a TLSv1.3 360B<ClientHello>. 361 362The B<value> argument is a colon separated list of groups. The group can be 363either the B<NIST> name (e.g. B<P-256>), some other commonly used name where 364applicable (e.g. B<X25519>) or an OpenSSL OID name (e.g B<prime256v1>). Group 365names are case sensitive. The list should be in order of preference with the 366most preferred group first. 367 368=item B<Curves> 369 370This is a synonym for the "Groups" command. 371 372=item B<MinProtocol> 373 374This sets the minimum supported SSL, TLS or DTLS version. 375 376Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>, 377B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>. 378The value B<None> will disable the limit. 379 380=item B<MaxProtocol> 381 382This sets the maximum supported SSL, TLS or DTLS version. 383 384Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>, 385B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>. 386The value B<None> will disable the limit. 387 388=item B<Protocol> 389 390This can be used to enable or disable certain versions of the SSL, 391TLS or DTLS protocol. 392 393The B<value> argument is a comma separated list of supported protocols 394to enable or disable. 395If a protocol is preceded by B<-> that version is disabled. 396 397All protocol versions are enabled by default. 398You need to disable at least one protocol version for this setting have any 399effect. 400Only enabling some protocol versions does not disable the other protocol 401versions. 402 403Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>, 404B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>. 405The special value B<ALL> refers to all supported versions. 406 407This can't enable protocols that are disabled using B<MinProtocol> 408or B<MaxProtocol>, but can disable protocols that are still allowed 409by them. 410 411The B<Protocol> command is fragile and deprecated; do not use it. 412Use B<MinProtocol> and B<MaxProtocol> instead. 413If you do use B<Protocol>, make sure that the resulting range of enabled 414protocols has no "holes", e.g. if TLS 1.0 and TLS 1.2 are both enabled, make 415sure to also leave TLS 1.1 enabled. 416 417=item B<Options> 418 419The B<value> argument is a comma separated list of various flags to set. 420If a flag string is preceded B<-> it is disabled. 421See the L<SSL_CTX_set_options(3)> function for more details of 422individual options. 423 424Each option is listed below. Where an operation is enabled by default 425the B<-flag> syntax is needed to disable it. 426 427B<SessionTicket>: session ticket support, enabled by default. Inverse of 428B<SSL_OP_NO_TICKET>: that is B<-SessionTicket> is the same as setting 429B<SSL_OP_NO_TICKET>. 430 431B<Compression>: SSL/TLS compression support, enabled by default. Inverse 432of B<SSL_OP_NO_COMPRESSION>. 433 434B<EmptyFragments>: use empty fragments as a countermeasure against a 435SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. It 436is set by default. Inverse of B<SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS>. 437 438B<Bugs>: enable various bug workarounds. Same as B<SSL_OP_ALL>. 439 440B<DHSingle>: enable single use DH keys, set by default. Inverse of 441B<SSL_OP_DH_SINGLE>. Only used by servers. 442 443B<ECDHSingle>: enable single use ECDH keys, set by default. Inverse of 444B<SSL_OP_ECDH_SINGLE>. Only used by servers. 445 446B<ServerPreference>: use server and not client preference order when 447determining which cipher suite, signature algorithm or elliptic curve 448to use for an incoming connection. Equivalent to 449B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers. 450 451B<PrioritizeChaCha>: prioritizes ChaCha ciphers when the client has a 452ChaCha20 cipher at the top of its preference list. This usually indicates 453a mobile client is in use. Equivalent to B<SSL_OP_PRIORITIZE_CHACHA>. 454Only used by servers. 455 456B<NoResumptionOnRenegotiation>: set 457B<SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION> flag. Only used by servers. 458 459B<UnsafeLegacyRenegotiation>: permits the use of unsafe legacy renegotiation. 460Equivalent to B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>. 461 462B<UnsafeLegacyServerConnect>: permits the use of unsafe legacy renegotiation 463for OpenSSL clients only. Equivalent to B<SSL_OP_LEGACY_SERVER_CONNECT>. 464Set by default. 465 466B<EncryptThenMac>: use encrypt-then-mac extension, enabled by 467default. Inverse of B<SSL_OP_NO_ENCRYPT_THEN_MAC>: that is, 468B<-EncryptThenMac> is the same as setting B<SSL_OP_NO_ENCRYPT_THEN_MAC>. 469 470B<AllowNoDHEKEX>: In TLSv1.3 allow a non-(ec)dhe based key exchange mode on 471resumption. This means that there will be no forward secrecy for the resumed 472session. Equivalent to B<SSL_OP_ALLOW_NO_DHE_KEX>. 473 474B<MiddleboxCompat>: If set then dummy Change Cipher Spec (CCS) messages are sent 475in TLSv1.3. This has the effect of making TLSv1.3 look more like TLSv1.2 so that 476middleboxes that do not understand TLSv1.3 will not drop the connection. This 477option is set by default. A future version of OpenSSL may not set this by 478default. Equivalent to B<SSL_OP_ENABLE_MIDDLEBOX_COMPAT>. 479 480B<AntiReplay>: If set then OpenSSL will automatically detect if a session ticket 481has been used more than once, TLSv1.3 has been negotiated, and early data is 482enabled on the server. A full handshake is forced if a session ticket is used a 483second or subsequent time. This option is set by default and is only used by 484servers. Anti-replay measures are required to comply with the TLSv1.3 485specification. Some applications may be able to mitigate the replay risks in 486other ways and in such cases the built-in OpenSSL functionality is not required. 487Disabling anti-replay is equivalent to setting B<SSL_OP_NO_ANTI_REPLAY>. 488 489=item B<VerifyMode> 490 491The B<value> argument is a comma separated list of flags to set. 492 493B<Peer> enables peer verification: for clients only. 494 495B<Request> requests but does not require a certificate from the client. 496Servers only. 497 498B<Require> requests and requires a certificate from the client: an error 499occurs if the client does not present a certificate. Servers only. 500 501B<Once> requests a certificate from a client only on the initial connection: 502not when renegotiating. Servers only. 503 504B<RequestPostHandshake> configures the connection to support requests but does 505not require a certificate from the client post-handshake. A certificate will 506not be requested during the initial handshake. The server application must 507provide a mechanism to request a certificate post-handshake. Servers only. 508TLSv1.3 only. 509 510B<RequiresPostHandshake> configures the connection to support requests and 511requires a certificate from the client post-handshake: an error occurs if the 512client does not present a certificate. A certificate will not be requested 513during the initial handshake. The server application must provide a mechanism 514to request a certificate post-handshake. Servers only. TLSv1.3 only. 515 516=item B<ClientCAFile>, B<ClientCAPath> 517 518A file or directory of certificates in PEM format whose names are used as the 519set of acceptable names for client CAs. Servers only. This option is only 520supported if certificate operations are permitted. 521 522=back 523 524=head1 SUPPORTED COMMAND TYPES 525 526The function SSL_CONF_cmd_value_type() currently returns one of the following 527types: 528 529=over 4 530 531=item B<SSL_CONF_TYPE_UNKNOWN> 532 533The B<cmd> string is unrecognised, this return value can be use to flag 534syntax errors. 535 536=item B<SSL_CONF_TYPE_STRING> 537 538The value is a string without any specific structure. 539 540=item B<SSL_CONF_TYPE_FILE> 541 542The value is a file name. 543 544=item B<SSL_CONF_TYPE_DIR> 545 546The value is a directory name. 547 548=item B<SSL_CONF_TYPE_NONE> 549 550The value string is not used e.g. a command line option which doesn't take an 551argument. 552 553=back 554 555=head1 NOTES 556 557The order of operations is significant. This can be used to set either defaults 558or values which cannot be overridden. For example if an application calls: 559 560 SSL_CONF_cmd(ctx, "Protocol", "-SSLv3"); 561 SSL_CONF_cmd(ctx, userparam, uservalue); 562 563it will disable SSLv3 support by default but the user can override it. If 564however the call sequence is: 565 566 SSL_CONF_cmd(ctx, userparam, uservalue); 567 SSL_CONF_cmd(ctx, "Protocol", "-SSLv3"); 568 569SSLv3 is B<always> disabled and attempt to override this by the user are 570ignored. 571 572By checking the return code of SSL_CONF_cmd() it is possible to query if a 573given B<cmd> is recognised, this is useful if SSL_CONF_cmd() values are 574mixed with additional application specific operations. 575 576For example an application might call SSL_CONF_cmd() and if it returns 577-2 (unrecognised command) continue with processing of application specific 578commands. 579 580Applications can also use SSL_CONF_cmd() to process command lines though the 581utility function SSL_CONF_cmd_argv() is normally used instead. One way 582to do this is to set the prefix to an appropriate value using 583SSL_CONF_CTX_set1_prefix(), pass the current argument to B<cmd> and the 584following argument to B<value> (which may be NULL). 585 586In this case if the return value is positive then it is used to skip that 587number of arguments as they have been processed by SSL_CONF_cmd(). If -2 is 588returned then B<cmd> is not recognised and application specific arguments 589can be checked instead. If -3 is returned a required argument is missing 590and an error is indicated. If 0 is returned some other error occurred and 591this can be reported back to the user. 592 593The function SSL_CONF_cmd_value_type() can be used by applications to 594check for the existence of a command or to perform additional syntax 595checking or translation of the command value. For example if the return 596value is B<SSL_CONF_TYPE_FILE> an application could translate a relative 597pathname to an absolute pathname. 598 599=head1 EXAMPLES 600 601Set supported signature algorithms: 602 603 SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256"); 604 605There are various ways to select the supported protocols. 606 607This set the minimum protocol version to TLSv1, and so disables SSLv3. 608This is the recommended way to disable protocols. 609 610 SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1"); 611 612The following also disables SSLv3: 613 614 SSL_CONF_cmd(ctx, "Protocol", "-SSLv3"); 615 616The following will first enable all protocols, and then disable 617SSLv3. 618If no protocol versions were disabled before this has the same effect as 619"-SSLv3", but if some versions were disables this will re-enable them before 620disabling SSLv3. 621 622 SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3"); 623 624Only enable TLSv1.2: 625 626 SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1.2"); 627 SSL_CONF_cmd(ctx, "MaxProtocol", "TLSv1.2"); 628 629This also only enables TLSv1.2: 630 631 SSL_CONF_cmd(ctx, "Protocol", "-ALL,TLSv1.2"); 632 633Disable TLS session tickets: 634 635 SSL_CONF_cmd(ctx, "Options", "-SessionTicket"); 636 637Enable compression: 638 639 SSL_CONF_cmd(ctx, "Options", "Compression"); 640 641Set supported curves to P-256, P-384: 642 643 SSL_CONF_cmd(ctx, "Curves", "P-256:P-384"); 644 645=head1 RETURN VALUES 646 647SSL_CONF_cmd() returns 1 if the value of B<cmd> is recognised and B<value> is 648B<NOT> used and 2 if both B<cmd> and B<value> are used. In other words it 649returns the number of arguments processed. This is useful when processing 650command lines. 651 652A return value of -2 means B<cmd> is not recognised. 653 654A return value of -3 means B<cmd> is recognised and the command requires a 655value but B<value> is NULL. 656 657A return code of 0 indicates that both B<cmd> and B<value> are valid but an 658error occurred attempting to perform the operation: for example due to an 659error in the syntax of B<value> in this case the error queue may provide 660additional information. 661 662=head1 SEE ALSO 663 664L<SSL_CONF_CTX_new(3)>, 665L<SSL_CONF_CTX_set_flags(3)>, 666L<SSL_CONF_CTX_set1_prefix(3)>, 667L<SSL_CONF_CTX_set_ssl_ctx(3)>, 668L<SSL_CONF_cmd_argv(3)>, 669L<SSL_CTX_set_options(3)> 670 671=head1 HISTORY 672 673SSL_CONF_cmd() was first added to OpenSSL 1.0.2 674 675B<SSL_OP_NO_SSL2> doesn't have effect since 1.1.0, but the macro is retained 676for backwards compatibility. 677 678B<SSL_CONF_TYPE_NONE> was first added to OpenSSL 1.1.0. In earlier versions of 679OpenSSL passing a command which didn't take an argument would return 680B<SSL_CONF_TYPE_UNKNOWN>. 681 682B<MinProtocol> and B<MaxProtocol> where added in OpenSSL 1.1.0. 683 684B<AllowNoDHEKEX> and B<PrioritizeChaCha> were added in OpenSSL 1.1.1. 685 686=head1 COPYRIGHT 687 688Copyright 2012-2018 The OpenSSL Project Authors. All Rights Reserved. 689 690Licensed under the OpenSSL license (the "License"). You may not use 691this file except in compliance with the License. You can obtain a copy 692in the file LICENSE in the source distribution or at 693L<https://www.openssl.org/source/license.html>. 694 695=cut 696