X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=doc%2Fssl%2FSSL_CONF_cmd.pod;h=b3c9df9cde92651ef8505454f93ea84819b9a5c3;hp=0df74d2e4ea65906b1e1889e3e8bd2cb3cadf331;hb=cc5a9ba485b988b036974cf682cda35180788446;hpb=821244cf678415e19ca1f5da594b3240e46ed0d4 diff --git a/doc/ssl/SSL_CONF_cmd.pod b/doc/ssl/SSL_CONF_cmd.pod index 0df74d2e4e..b3c9df9cde 100644 --- a/doc/ssl/SSL_CONF_cmd.pod +++ b/doc/ssl/SSL_CONF_cmd.pod @@ -9,19 +9,185 @@ SSL_CONF_cmd - send configuration command #include int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value); + int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd); + int SSL_CONF_finish(SSL_CONF_CTX *cctx); =head1 DESCRIPTION The function SSL_CONF_cmd() performs configuration operation B with optional parameter B on B. Its purpose is to simplify application configuration of B or B structures by providing a common -framework for configuration files or command line options. +framework for command line options or configuration files. + +SSL_CONF_cmd_value_type() returns the type of value that B refers to. + +The function SSL_CONF_finish() must be called after all configuration +operations have been completed. It is used to finalise any operations +or to process defaults. + +=head1 SUPPORTED COMMAND LINE COMMANDS + +Currently supported B names for command lines (i.e. when the +flag B is set) are listed below. Note: all B names +are case sensitive. Unless otherwise stated commands can be used by +both clients and servers and the B parameter is not used. The default +prefix for command line commands is B<-> and that is reflected below. + +=over 4 + +=item B<-sigalgs> + +This sets the supported signature algorithms for TLS v1.2. For clients this +value is used directly for the supported signature algorithms extension. For +servers it is used to determine which signature algorithms to support. + +The B argument should be a colon separated list of signature algorithms +in order of decreasing preference of the form B. B +is one of B, B or B and B is a supported algorithm +OID short name such as B, B, B, B of B. +Note: algorithm and hash names are case sensitive. + +If this option is not set then all signature algorithms supported by the +OpenSSL library are permissible. + +=item B<-client_sigalgs> + +This sets the supported signature algorithms associated with client +authentication for TLS v1.2. For servers the value is used in the supported +signature algorithms field of a certificate request. For clients it is +used to determine which signature algorithm to with the client certificate. +If a server does not request a certificate this option has no effect. + +The syntax of B is identical to B<-sigalgs>. If not set then +the value set for B<-sigalgs> will be used instead. + +=item B<-curves> + +This sets the supported elliptic curves. For clients the curves are +sent using the supported curves extension. For servers it is used +to determine which curve to use. This setting affects curves used for both +signatures and key exchange, if applicable. + +The B argument is a colon separated list of curves. The curve can be +either the B name (e.g. B) or an OpenSSL OID name (e.g +B). Curve names are case sensitive. + +=item B<-named_curve> + +This sets the temporary curve used for ephemeral ECDH modes. Only used by +servers + +The B argument is a curve name or the special value B which +picks an appropriate curve based on client and server preferences. The curve +can be either the B name (e.g. B) or an OpenSSL OID name +(e.g B). Curve names are case sensitive. + +=item B<-cipher> + +Sets the cipher suite list to B. Note: syntax checking of B is +currently not performed unless a B or B structure is +associated with B. + +=item B<-cert> + +Attempts to use the file B as the certificate for the appropriate +context. It currently uses SSL_CTX_use_certificate_chain_file() if an B +structure is set or SSL_use_certificate_file() with filetype PEM if an B +structure is set. This option is only supported if certificate operations +are permitted. + +=item B<-key> + +Attempts to use the file B as the private key for the appropriate +context. This option is only supported if certificate operations +are permitted. Note: if no B<-key> option is set then a private key is +not loaded unless the flag B is set. + +=item B<-dhparam> + +Attempts to use the file B as the set of temporary DH parameters for +the appropriate context. This option is only supported if certificate +operations are permitted. + +=item B<-min_protocol>, B<-max_protocol> + +Sets the minimum and maximum supported protocol. +Currently supported protocol values are B, B, +B, B for TLS and B, B for DTLS, +and B for no limit. +If the either bound is not specified then only the other bound applies, +if specified. +To restrict the supported protocol versions use these commands rather +than the deprecated alternative commands below. + +=item B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2> + +Disables protocol support for SSLv3, TLS 1.0, TLS 1.1 or TLS 1.2 +by setting the corresponding options B, B, +B and B respectively. +These options are deprecated, instead use B<-min_protocol> and B<-max_protocol>. + +=item B<-bugs> + +Various bug workarounds are set, same as setting B. + +=item B<-comp> + +Enables support for SSL/TLS compression, same as clearing +B. +This command was introduced in OpenSSL 1.1.0. +As of OpenSSL 1.1.0, compression is off by default. + +=item B<-no_comp> + +Disables support for SSL/TLS compression, same as setting +B. +As of OpenSSL 1.1.0, compression is off by default. + +=item B<-no_ticket> + +Disables support for session tickets, same as setting B. + +=item B<-serverpref> + +Use server and not client preference order when determining which cipher suite, +signature algorithm or elliptic curve to use for an incoming connection. +Equivalent to B. Only used by servers. + +=item B<-no_resumption_on_reneg> + +set SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION flag. Only used by servers. + +=item B<-legacyrenegotiation> + +permits the use of unsafe legacy renegotiation. Equivalent to setting +B. + +=item B<-legacy_server_connect>, B<-no_legacy_server_connect> + +permits or prohibits the use of unsafe legacy renegotiation for OpenSSL +clients only. Equivalent to setting or clearing B. +Set by default. + +=item B<-strict> + +enables strict mode protocol handling. Equivalent to setting +B. + +=item B<-debug_broken_protocol> + +disables various checks and permits several kinds of broken protocol behaviour +for testing purposes: it should B be used in anything other than a test +environment. Only supported if OpenSSL is configured with +B<-DOPENSSL_SSL_DEBUG_BROKEN_PROTOCOL>. + +=back =head1 SUPPORTED CONFIGURATION FILE COMMANDS Currently supported B names for configuration files (i.e. when the flag B is set) are listed below. All configuration file -B names and are case insensitive so B is recognised +B names are case insensitive so B is recognised as well as B. Unless otherwise stated the B names are also case insensitive. @@ -29,12 +195,44 @@ Note: the command prefix (if set) alters the recognised B values. =over 4 -=item B +=item B Sets the cipher suite list to B. Note: syntax checking of B is -currently not performed unless an B or B structure is +currently not performed unless an B or B structure is associated with B. +=item B + +Attempts to use the file B as the certificate for the appropriate +context. It currently uses SSL_CTX_use_certificate_chain_file() if an B +structure is set or SSL_use_certificate_file() with filetype PEM if an B +structure is set. This option is only supported if certificate operations +are permitted. + +=item B + +Attempts to use the file B as the private key for the appropriate +context. This option is only supported if certificate operations +are permitted. Note: if no B option is set then a private key is +not loaded unless the B is set. + +=item B, B, B, B + +These options indicate a file or directory used for building certificate +chains or verifying certificate chains. These options are only supported +if certificate operations are permitted. + +=item B + +Attempts to use the file B in the "serverinfo" extension using the +function SSL_CTX_use_serverinfo_file. + +=item B + +Attempts to use the file B as the set of temporary DH parameters for +the appropriate context. This option is only supported if certificate +operations are permitted. + =item B This sets the supported signature algorithms for TLS v1.2. For clients this @@ -62,8 +260,8 @@ the value set for B will be used instead. =item B -This sets the supported elliptic curves. For servers the curves are -sent using the supported curves extension for TLS v1.2. For clients it is used +This sets the supported elliptic curves. For clients the curves are +sent using the supported curves extension. For servers it is used to determine which curve to use. This setting affects curves used for both signatures and key exchange, if applicable. @@ -73,29 +271,65 @@ B). Curve names are case sensitive. =item B -This sets the temporary curve used for ephemeral ECDH modes. +This sets the temporary curve used for ephemeral ECDH modes. Only used by +servers The B argument is a curve name or the special value B which picks an appropriate curve based on client and server preferences. The curve can be either the B name (e.g. B) or an OpenSSL OID name (e.g B). Curve names are case sensitive. +=item B + +This sets the minimum supported SSL, TLS or DTLS version. + +Currently supported protocol values are B, B, B, +B, B and B. +The value B will disable the limit. + +=item B + +This sets the maximum supported SSL, TLS or DTLS version. + +Currently supported protocol values are B, B, B, +B, B and B. +The value B will disable the limit. + =item B -The supported versions of the SSL or TLS protocol. +This can be used to enable or disable certain versions of the SSL, +TLS or DTLS protocol. + +The B argument is a comma separated list of supported protocols +to enable or disable. +If a protocol is preceded by B<-> that version is disabled. -The B argument is a comma separated list of supported protocols to -enable or disable. If an protocol is preceded by B<-> that version is disabled. -All versions are enabled by default, though applications may choose to -explicitly disable some. Currently supported protocol values are B, -B, B, B and B. The special value B refers -to all supported versions. +All protocol versions are enabled by default. +You need to disable at least one protocol version for this setting have any +effect. +Only enabling some protocol versions does not disable the other protocol +versions. + +Currently supported protocol values are B, B, B, +B, B and B. +The special value B refers to all supported versions. + +This can't enable protocols that are disabled using B +or B, but can disable protocols that are still allowed +by them. + +The B command is fragile and deprecated; do not use it. +Use B and B instead. +If you do use B, make sure that the resulting range of enabled +protocols has no "holes", e.g. if TLS 1.0 and TLS 1.2 are both enabled, make +sure to also leave TLS 1.1 enabled. =item B The B argument is a comma separated list of various flags to set. -If a flag string is preceded B<-> it is disabled. See the -B function for more details of individual options. +If a flag string is preceded B<-> it is disabled. +See the L function for more details of +individual options. Each option is listed below. Where an operation is enabled by default the B<-flag> syntax is needed to disable it. @@ -124,6 +358,9 @@ determining which cipher suite, signature algorithm or elliptic curve to use for an incoming connection. Equivalent to B. Only used by servers. +B set +B flag. Only used by servers. + B permits the use of unsafe legacy renegotiation. Equivalent to B. @@ -131,91 +368,57 @@ B permits the use of unsafe legacy renegotiation for OpenSSL clients only. Equivalent to B. Set by default. -=back - -=head1 SUPPORTED COMMAND LINE COMMANDS - -Currently supported B names for command lines (i.e. when the -flag B is set) are listed below. Note: all B names -and are case sensitive. Unless otherwise stated the B parameter is -not used. The default prefix for command line commands is B<-> and that is -reflected below. - -=over 4 - -=item B<-sigalgs> - -Sets the supported signature algorithms to B. Equivalent to the -B file command. - -=item B<-client_sigalgs> - -Sets the supported client signature algorithms to B. Equivalent to the -B file command. +=item B -=item B<-curves> - -Sets supported elliptic curves to B. Equivalent to B file -command. - -=item B<-named_curve> - -Sets supported ECDH parameters to B. For automatic curve selection -B should be set to B, otherwise the command is identical to -the B file command. +The B argument is a comma separated list of flags to set. -=item B<-cipher> +B enables peer verification: for clients only. -Sets the cipher suite list to B. Note: syntax checking of B is -currently not performed unless a B or B structure is -associated with B. +B requests but does not require a certificate from the client. +Servers only. -=item B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2> +B requests and requires a certificate from the client: an error +occurs if the client does not present a certificate. Servers only. -Disables protocol support for SSLv2, SSLv3, TLS 1.0, TLS 1.1 or TLS 1.2 -by setting the corresponding options B, B, -B, B and B respectively. +B requests a certificate from a client only on the initial connection: +not when renegotiating. Servers only. -=item B<-bugs> +=item B, B -Various bug workarounds are set, same as setting B. +A file or directory of certificates in PEM format whose names are used as the +set of acceptable names for client CAs. Servers only. This option is only +supported if certificate operations are permitted. -=item B<-no_comp> +=back -Disables support for SSL/TLS compression, same as setting B. +=head1 SUPPORTED COMMAND TYPES -=item B<-no_ticket> +The function SSL_CONF_cmd_value_type() currently returns one of the following +types: -Disables support for session tickets, same as setting B. +=over 4 -=item B<-serverpref> +=item B -Use server and not client preference order when determining which cipher suite, -signature algorithm or elliptic curve to use for an incoming connection. -Equivalent to B. Only used by servers. +The B string is unrecognised, this return value can be use to flag +syntax errors. -=item B<-legacyrenegotiation> +=item B -permits the use of unsafe legacy renegotiation. Equivalent to setting -B. +The value is a string without any specific structure. -=item B<-legacy_server_connect>, B<-no_legacy_server_connect> +=item B -permits or prohibits the use of unsafe legacy renegotiation for OpenSSL -clients only. Equivalent to setting or clearing B. -Set by default. +The value is a file name. -=item B<-strict> +=item B -enables strict mode protocol handling. Equivalent to setting -B. +The value is a directory name. -=item B<-debug_broken_protocol> +=item B -disables various checks and permits several kinds of broken protocol behaviour -for testing purposes: it should B be used in anything other than a test -environment. Only supported if OpenSSL is configured with -B<-DOPENSSL_SSL_DEBUG_BROKEN_PROTOCOL>. +The value string is not used e.g. a command line option which doesn't take an +argument. =back @@ -224,16 +427,16 @@ B<-DOPENSSL_SSL_DEBUG_BROKEN_PROTOCOL>. The order of operations is significant. This can be used to set either defaults or values which cannot be overridden. For example if an application calls: - SSL_CONF_cmd(ctx, "Protocol", "-SSLv2"); + SSL_CONF_cmd(ctx, "Protocol", "-SSLv3"); SSL_CONF_cmd(ctx, userparam, uservalue); -it will disable SSLv2 support by default but the user can override it. If +it will disable SSLv3 support by default but the user can override it. If however the call sequence is: SSL_CONF_cmd(ctx, userparam, uservalue); - SSL_CONF_cmd(ctx, "Protocol", "-SSLv2"); + SSL_CONF_cmd(ctx, "Protocol", "-SSLv3"); -SSLv2 is B disabled and attempt to override this by the user are +SSLv3 is B disabled and attempt to override this by the user are ignored. By checking the return code of SSL_CTX_cmd() it is possible to query if a @@ -257,24 +460,54 @@ can be checked instead. If -3 is returned a required argument is missing and an error is indicated. If 0 is returned some other error occurred and this can be reported back to the user. +The function SSL_CONF_cmd_value_type() can be used by applications to +check for the existence of a command or to perform additional syntax +checking or translation of the command value. For example if the return +value is B an application could translate a relative +pathname to an absolute pathname. + =head1 EXAMPLES Set supported signature algorithms: SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256"); -Enable all protocols except SSLv3 and SSLv2: +There are various ways to select the supported procotols. + +This set the minimum protocol version to TLSv1, and so disables SSLv3. +This is the recommended way to disable protocols. - SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3,-SSLv2"); + SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1"); + +The following also disables SSLv3: + + SSL_CONF_cmd(ctx, "Protocol", "-SSLv3"); + +The following will first enable all protocols, and then disable +SSLv3. +If no protocol versions were disabled before this has the same effect as +"-SSLv3", but if some versions were disables this will re-enable them before +disabling SSLv3. + + SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3"); Only enable TLSv1.2: + SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1.2"); + SSL_CONF_cmd(ctx, "MaxProtocol", "TLSv1.2"); + +This also only enables TLSv1.2: + SSL_CONF_cmd(ctx, "Protocol", "-ALL,TLSv1.2"); Disable TLS session tickets: SSL_CONF_cmd(ctx, "Options", "-SessionTicket"); +Enable compression: + + SSL_CONF_cmd(ctx, "Options", "Compression"); + Set supported curves to P-256, P-384: SSL_CONF_cmd(ctx, "Curves", "P-256:P-384"); @@ -285,7 +518,7 @@ Set automatic support for any elliptic curve for key exchange: =head1 RETURN VALUES -SSL_CONF_cmd() return 1 if the value of B is recognised and B is +SSL_CONF_cmd() returns 1 if the value of B is recognised and B is B used and 2 if both B and B are used. In other words it returns the number of arguments processed. This is useful when processing command lines. @@ -300,16 +533,28 @@ error occurred attempting to perform the operation: for example due to an error in the syntax of B in this case the error queue may provide additional information. +SSL_CONF_finish() returns 1 for success and 0 for failure. + =head1 SEE ALSO -L, -L, -L, -L, -L +L, +L, +L, +L, +L, +L =head1 HISTORY -SSL_CONF_cmd() was first added to OpenSSL 1.1.0 +SSL_CONF_cmd() was first added to OpenSSL 1.0.2 + +B doesn't have effect since 1.1.0, but the macro is retained +for backwards compatibility. + +B was first added to OpenSSL 1.1.0. In earlier versions of +OpenSSL passing a command which didn't take an argument would return +B. + +B and B where added in OpenSSL 1.1.0. =cut