Skip to content

Commit

Permalink
ssl: call SSL_CTX_set_ecdh_auto() on OpenSSL 1.0.2 only
Browse files Browse the repository at this point in the history
SSL_CTX_set_ecdh_auto() exists in OpenSSL 1.1.0 and LibreSSL 2.6.1, but
it is made no-op and the automatic curve selection cannot be disabled.
Wrap it with ifdef to make it clear that it is safe to remove it
completely when we drop support for OpenSSL 1.0.2.
  • Loading branch information
rhenium committed Apr 4, 2021
1 parent c055938 commit 2ae8f21
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions ext/openssl/ossl_ssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,14 +93,15 @@ ossl_sslctx_s_alloc(VALUE klass)
RTYPEDDATA_DATA(obj) = ctx;
SSL_CTX_set_ex_data(ctx, ossl_sslctx_ex_ptr_idx, (void *)obj);

#if !defined(OPENSSL_NO_EC)
#if !defined(OPENSSL_NO_EC) && OPENSSL_VERSION_NUMBER < 0x10100000 && \
!defined(LIBRESSL_VERSION_NUMBER)
/* We use SSL_CTX_set1_curves_list() to specify the curve used in ECDH. It
* allows to specify multiple curve names and OpenSSL will select
* automatically from them. In OpenSSL 1.0.2, the automatic selection has to
* be enabled explicitly. But OpenSSL 1.1.0 removed the knob and it is
* always enabled. To uniform the behavior, we enable the automatic
* selection also in 1.0.2. Users can still disable ECDH by removing ECDH
* cipher suites by SSLContext#ciphers=. */
* be enabled explicitly. OpenSSL 1.1.0 and LibreSSL 2.6.1 removed the knob
* and it is always enabled. To uniform the behavior, we enable the
* automatic selection also in 1.0.2. Users can still disable ECDH by
* removing ECDH cipher suites by SSLContext#ciphers=. */
if (!SSL_CTX_set_ecdh_auto(ctx, 1))
ossl_raise(eSSLError, "SSL_CTX_set_ecdh_auto");
#endif
Expand Down

0 comments on commit 2ae8f21

Please sign in to comment.