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