From 82b7f378b6907ab315a6e50322d2a0a8794a0aa9 Mon Sep 17 00:00:00 2001 From: bentley <> Date: Sun, 12 Oct 2014 09:33:04 +0000 Subject: Convert libssl manpages from pod to mdoc(7). libcrypto has not been started yet. ok schwarze@ miod@ --- src/lib/libssl/doc/SSL_CTX_set_options.3 | 384 +++++++++++++++++++++++++++++++ 1 file changed, 384 insertions(+) create mode 100644 src/lib/libssl/doc/SSL_CTX_set_options.3 (limited to 'src/lib/libssl/doc/SSL_CTX_set_options.3') diff --git a/src/lib/libssl/doc/SSL_CTX_set_options.3 b/src/lib/libssl/doc/SSL_CTX_set_options.3 new file mode 100644 index 0000000000..8b2f75cc59 --- /dev/null +++ b/src/lib/libssl/doc/SSL_CTX_set_options.3 @@ -0,0 +1,384 @@ +.Dd $Mdocdate: October 12 2014 $ +.Dt SSL_CTX_SET_OPTIONS 3 +.Os +.Sh NAME +.Nm SSL_CTX_set_options , +.Nm SSL_set_options , +.Nm SSL_CTX_clear_options , +.Nm SSL_clear_options , +.Nm SSL_CTX_get_options , +.Nm SSL_get_options , +.Nm SSL_get_secure_renegotiation_support +.Nd manipulate SSL options +.Sh SYNOPSIS +.In openssl/ssl.h +.Ft long +.Fn SSL_CTX_set_options "SSL_CTX *ctx" "long options" +.Ft long +.Fn SSL_set_options "SSL *ssl" "long options" +.Ft long +.Fn SSL_CTX_clear_options "SSL_CTX *ctx" "long options" +.Ft long +.Fn SSL_clear_options "SSL *ssl" "long options" +.Ft long +.Fn SSL_CTX_get_options "SSL_CTX *ctx" +.Ft long +.Fn SSL_get_options "SSL *ssl" +.Ft long +.Fn SSL_get_secure_renegotiation_support "SSL *ssl" +.Sh DESCRIPTION +Note: all these functions are implemented using macros. +.Pp +.Fn SSL_CTX_set_options +adds the options set via bitmask in +.Fa options +to +.Fa ctx . +Options already set before are not cleared! +.Pp +.Fn SSL_set_options +adds the options set via bitmask in +.Fa options +to +.Fa ssl . +Options already set before are not cleared! +.Pp +.Fn SSL_CTX_clear_options +clears the options set via bitmask in +.Fa options +to +.Fa ctx . +.Pp +.Fn SSL_clear_options +clears the options set via bitmask in +.Fa options +to +.Fa ssl . +.Pp +.Fn SSL_CTX_get_options +returns the options set for +.Fa ctx . +.Pp +.Fn SSL_get_options +returns the options set for +.Fa ssl . +.Pp +.Fn SSL_get_secure_renegotiation_support +indicates whether the peer supports secure renegotiation. +.Sh NOTES +The behaviour of the SSL library can be changed by setting several options. +The options are coded as bitmasks and can be combined by a bitwise OR +operation (|). +.Pp +.Fn SSL_CTX_set_options +and +.Fn SSL_set_options +affect the (external) protocol behaviour of the SSL library. +The (internal) behaviour of the API can be changed by using the similar +.Xr SSL_CTX_set_mode 3 +and +.Xr SSL_set_mode 3 +functions. +.Pp +During a handshake, the option settings of the SSL object are used. +When a new SSL object is created from a context using +.Xr SSL_new 3 , +the current option setting is copied. +Changes to +.Fa ctx +do not affect already created +.Vt SSL +objects. +.Fn SSL_clear +does not affect the settings. +.Pp +The following +.Em bug workaround +options are available: +.Bl -tag -width Ds +.It Dv SSL_OP_MICROSOFT_SESS_ID_BUG +.Lk www.microsoft.com +\(en when talking SSLv2, if session-id reuse is performed, +the session-id passed back in the server-finished message is different from the +one decided upon. +.It Dv SSL_OP_NETSCAPE_CHALLENGE_BUG +Netscape-Commerce/1.12, when talking SSLv2, accepts a 32 byte challenge but +then appears to only use 16 bytes when generating the encryption keys. +Using 16 bytes is ok but it should be ok to use 32. +According to the SSLv3 spec, one should use 32 bytes for the challenge when +operating in SSLv2/v3 compatibility mode, but as mentioned above, this breaks +this server so 16 bytes is the way to go. +.It Dv SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG +As of OpenSSL 0.9.8q and 1.0.0c, this option has no effect. +.It Dv SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG +\&... +.It Dv SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER +\&... +.It Dv SSL_OP_SAFARI_ECDHE_ECDSA_BUG +Don't prefer ECDHE-ECDSA ciphers when the client appears to be Safari on OS X. +OS X 10.8..10.8.3 has broken support for ECDHE-ECDSA ciphers. +.It Dv SSL_OP_SSLEAY_080_CLIENT_DH_BUG +\&... +.It Dv SSL_OP_TLS_D5_BUG +\&... +.It Dv SSL_OP_TLS_BLOCK_PADDING_BUG +\&... +.It Dv SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS +Disables a countermeasure against a SSL 3.0/TLS 1.0 protocol vulnerability +affecting CBC ciphers, which cannot be handled by some broken SSL +implementations. +This option has no effect for connections using other ciphers. +.It Dv SSL_OP_TLSEXT_PADDING +Adds a padding extension to ensure the ClientHello size is never between 256 +and 511 bytes in length. +This is needed as a workaround for some implementations. +.It Dv SSL_OP_ALL +All of the above bug workarounds. +.El +.Pp +It is usually safe to use +.Dv SSL_OP_ALL +to enable the bug workaround options if compatibility with somewhat broken +implementations is desired. +.Pp +The following +.Em modifying +options are available: +.Bl -tag -width Ds +.It Dv SSL_OP_TLS_ROLLBACK_BUG +Disable version rollback attack detection. +.Pp +During the client key exchange, the client must send the same information +about acceptable SSL/TLS protocol levels as during the first hello. +Some clients violate this rule by adapting to the server's answer. +(Example: the client sends a SSLv2 hello and accepts up to SSLv3.1=TLSv1, +the server only understands up to SSLv3. +In this case the client must still use the same SSLv3.1=TLSv1 announcement. +Some clients step down to SSLv3 with respect to the server's answer and violate +the version rollback protection.) +.It Dv SSL_OP_SINGLE_DH_USE +Always create a new key when using temporary/ephemeral DH parameters +(see +.Xr SSL_CTX_set_tmp_dh_callback 3 ) . +This option must be used to prevent small subgroup attacks, when the DH +parameters were not generated using +.Dq strong +primes (e.g., when using DSA-parameters, see +.Xr dhparam 1 ) . +If +.Dq strong +primes were used, it is not strictly necessary to generate a new DH key during +each handshake but it is also recommended. +.Dv SSL_OP_SINGLE_DH_USE +should therefore be enabled whenever temporary/ephemeral DH parameters are used. +.It SSL_OP_EPHEMERAL_RSA +Always use ephemeral (temporary) RSA key when doing RSA operations (see +.Xr SSL_CTX_set_tmp_rsa_callback 3 ) . +According to the specifications, this is only done when a RSA key can only be +used for signature operations (namely under export ciphers with restricted RSA +keylength). +By setting this option, ephemeral RSA keys are always used. +This option breaks compatibility with the SSL/TLS specifications and may lead +to interoperability problems with clients and should therefore never be used. +Ciphers with EDH (ephemeral Diffie-Hellman) key exchange should be used instead. +.It Dv SSL_OP_CIPHER_SERVER_PREFERENCE +When choosing a cipher, use the server's preferences instead of the client +preferences. +When not set, the SSL server will always follow the client's preferences. +When set, the SSLv3/TLSv1 server will choose following its own preferences. +Because of the different protocol, for SSLv2 the server will send its list of +preferences to the client and the client chooses. +.It Dv SSL_OP_NETSCAPE_CA_DN_BUG +If we accept a netscape connection, demand a client cert, have a +non-self-signed CA which does not have its CA in netscape, and the browser has +a cert, it will crash/hang. +Works for 3.x and 4.xbeta +.It Dv SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG +\&... +.It Dv SSL_OP_NO_SSLv2 +As of +.Ox 5.6 , +this option has no effect as SSLv2 support has been removed. +In previous versions it disabled use of the SSLv2 protocol. +.It Dv SSL_OP_NO_SSLv3 +Do not use the SSLv3 protocol. +.It Dv SSL_OP_NO_TLSv1 +Do not use the TLSv1.0 protocol. +.It Dv SSL_OP_NO_TLSv1_1 +Do not use the TLSv1.1 protocol. +.It Dv SSL_OP_NO_TLSv1_2 +Do not use the TLSv1.2 protocol. +.It Dv SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION +When performing renegotiation as a server, always start a new session (i.e., +session resumption requests are only accepted in the initial handshake). +This option is not needed for clients. +.It Dv SSL_OP_NO_TICKET +Normally clients and servers will, where possible, transparently make use of +RFC4507bis tickets for stateless session resumption. +.Pp +If this option is set this functionality is disabled and tickets will not be +used by clients or servers. +.It Dv SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION +As of +.Ox 5.6 , +this option has no effect. +In previous versions it allowed legacy insecure renegotiation between OpenSSL +and unpatched clients or servers. +See the +.Sx SECURE RENEGOTIATION +section for more details. +.It Dv SSL_OP_LEGACY_SERVER_CONNECT +Allow legacy insecure renegotiation between OpenSSL and unpatched servers +.Em only : +this option is currently set by default. +See the +.Sx SECURE RENEGOTIATION +section for more details. +.El +.Sh SECURE RENEGOTIATION +OpenSSL 0.9.8m and later always attempts to use secure renegotiation as +described in RFC5746. +This counters the prefix attack described in CVE-2009-3555 and elsewhere. +.Pp +The deprecated and highly broken SSLv2 protocol does not support renegotiation +at all; its use is +.Em strongly +discouraged. +.Pp +This attack has far-reaching consequences which application writers should be +aware of. +In the description below an implementation supporting secure renegotiation is +referred to as +.Dq patched . +A server not supporting secure +renegotiation is referred to as +.Dq unpatched . +.Pp +The following sections describe the operations permitted by OpenSSL's secure +renegotiation implementation. +.Ss Patched client and server +Connections and renegotiation are always permitted by OpenSSL implementations. +.Ss Unpatched client and patched OpenSSL server +The initial connection succeeds but client renegotiation is denied by the +server with a +.Em no_renegotiation +warning alert if TLS v1.0 is used or a fatal +.Em handshake_failure +alert in SSL v3.0. +.Pp +If the patched OpenSSL server attempts to renegotiate a fatal +.Em handshake_failure +alert is sent. +This is because the server code may be unaware of the unpatched nature of the +client. +.Pp +.Em N.B.: +a bug in OpenSSL clients earlier than 0.9.8m (all of which are unpatched) will +result in the connection hanging if it receives a +.Em no_renegotiation +alert. +OpenSSL versions 0.9.8m and later will regard a +.Em no_renegotiation +alert as fatal and respond with a fatal +.Em handshake_failure +alert. +This is because the OpenSSL API currently has no provision to indicate to an +application that a renegotiation attempt was refused. +.Ss Patched OpenSSL client and unpatched server +If the option +.Dv SSL_OP_LEGACY_SERVER_CONNECT +is set then initial connections and renegotiation between patched OpenSSL +clients and unpatched servers succeeds. +If neither option is set then initial connections to unpatched servers will +fail. +.Pp +The option +.Dv SSL_OP_LEGACY_SERVER_CONNECT +is currently set by default even though it has security implications: +otherwise it would be impossible to connect to unpatched servers (i.e., all of +them initially) and this is clearly not acceptable. +Renegotiation is permitted because this does not add any additional security +issues: during an attack clients do not see any renegotiations anyway. +.Pp +As more servers become patched the option +.Dv SSL_OP_LEGACY_SERVER_CONNECT +will +.Em not +be set by default in a future version of OpenSSL. +.Pp +OpenSSL client applications wishing to ensure they can connect to unpatched +servers should always +.Em set +.Dv SSL_OP_LEGACY_SERVER_CONNECT +.Pp +OpenSSL client applications that want to ensure they can +.Em not +connect to unpatched servers (and thus avoid any security issues) should always +.Em clear +.Dv SSL_OP_LEGACY_SERVER_CONNECT +using +.Fn SSL_CTX_clear_options +or +.Fn SSL_clear_options . +.Sh RETURN VALUES +.Fn SSL_CTX_set_options +and +.Fn SSL_set_options +return the new options bitmask after adding +.Fa options . +.Pp +.Fn SSL_CTX_clear_options +and +.Fn SSL_clear_options +return the new options bitmask after clearing +.Fa options . +.Pp +.Fn SSL_CTX_get_options +and +.Fn SSL_get_options +return the current bitmask. +.Pp +.Fn SSL_get_secure_renegotiation_support +returns 1 is the peer supports secure renegotiation and 0 if it does not. +.Sh SEE ALSO +.Xr dhparam 1 , +.Xr ssl 3 , +.Xr SSL_clear 3 , +.Xr SSL_CTX_set_tmp_dh_callback 3 , +.Xr SSL_CTX_set_tmp_rsa_callback 3 , +.Xr SSL_new 3 +.Sh HISTORY +.Dv SSL_OP_CIPHER_SERVER_PREFERENCE +and +.Dv SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION +have been added in +OpenSSL 0.9.7. +.Pp +.Dv SSL_OP_TLS_ROLLBACK_BUG +has been added in OpenSSL 0.9.6 and was automatically enabled with +.Dv SSL_OP_ALL . +As of 0.9.7, it is no longer included in +.Dv SSL_OP_ALL +and must be explicitly set. +.Pp +.Dv SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS +has been added in OpenSSL 0.9.6e. +Versions up to OpenSSL 0.9.6c do not include the countermeasure that can be +disabled with this option (in OpenSSL 0.9.6d, it was always enabled). +.Pp +.Fn SSL_CTX_clear_options +and +.Fn SSL_clear_options +were first added in OpenSSL 0.9.8m. +.Pp +.Dv SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION , +.Dv SSL_OP_LEGACY_SERVER_CONNECT +and the function +.Fn SSL_get_secure_renegotiation_support +were first added in OpenSSL 0.9.8m. +.Pp +.Dv SSL_OP_NO_SSLv2 +and +.Dv SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION +were changed to have no effect in +.Ox 5.6 . -- cgit v1.2.3-55-g6feb