Skip to content

Commit e50f2bd

Browse files
nvbolhuislws-team
authored andcommitted
LWS_SERVER_OPTION_OPENSSL_AUTO_DH_PARAMETERS takes care of providing a
DH group, aka. finite field group, aka. "DH parameters" (by calling SSL_CTX_set_dh_auto) in case TLSv1.2 Kx=DH ciphers (e.g. TLS_DHE_RSA_WITH_AES_256_GCM_SHA384) are selected. Signed-off-by: Norbert van Bolhuis <[email protected]>
1 parent 4b9329f commit e50f2bd

File tree

5 files changed

+22
-0
lines changed

5 files changed

+22
-0
lines changed

cmake/lws_config.h.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@
9595
#cmakedefine LWS_HAVE_SSL_CTX_set1_param
9696
#cmakedefine LWS_HAVE_SSL_CTX_set_ciphersuites
9797
#cmakedefine LWS_HAVE_SSL_CTX_set_keylog_callback
98+
#cmakedefine LWS_HAVE_SSL_CTX_SET_ECDH_AUTO
9899
#cmakedefine LWS_HAVE_SSL_EXTRA_CHAIN_CERTS
99100
#cmakedefine LWS_HAVE_SSL_get0_alpn_selected
100101
#cmakedefine LWS_HAVE_SSL_CTX_EVP_PKEY_new_raw_private_key

include/libwebsockets/lws-context-vhost.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,12 @@
242242
#define LWS_SERVER_OPTION_DISABLE_TLS_SESSION_CACHE (1ll << 39)
243243
/**< (VHOST) Disallow use of client tls caching (on by default) */
244244

245+
#define LWS_SERVER_OPTION_OPENSSL_AUTO_DH_PARAMETERS (1ll << 40)
246+
/**< Configure openssl to use the default built-in DH parameters
247+
* to support TLSv1.2 Kx=DH ciphers (by calling SSL_CTX_set_dh_auto)
248+
* This is needed when you want to enable TLSv1.2 ephemeral
249+
* Diffie-Hellman (DH) key exchange ciphers
250+
* (e.g. TLS_DHE_RSA_WITH_AES_256_GCM_SHA384). It's not recommended. */
245251

246252
/****** add new things just above ---^ ******/
247253

lib/tls/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,10 @@ if (LWS_WITH_SSL AND NOT LWS_WITH_MBEDTLS)
367367
CHECK_C_SOURCE_COMPILES("#include <openssl/ssl.h>\nint main(void) { STACK_OF(X509) *c = NULL; SSL_CTX *ctx = NULL; return (int)SSL_CTX_get_extra_chain_certs_only(ctx, &c); }\n" LWS_HAVE_SSL_EXTRA_CHAIN_CERTS)
368368
CHECK_C_SOURCE_COMPILES("#include <openssl/ssl.h>\nint main(void) { EVP_MD_CTX *md_ctx = NULL; EVP_MD_CTX_free(md_ctx); return 0; }\n" LWS_HAVE_EVP_MD_CTX_free)
369369
CHECK_C_SOURCE_COMPILES("#include <openssl/ssl.h>\nint main(void) { OPENSSL_STACK *x = NULL; return !x; } \n" LWS_HAVE_OPENSSL_STACK)
370+
CHECK_C_SOURCE_COMPILES("#include <openssl/ssl.h>\nint main(void) { SSL_CTX *ctx = NULL; return SSL_CTX_set_ecdh_auto(ctx, 1); }\n" LWS_HAVE_SSL_CTX_SET_ECDH_AUTO)
370371
set(LWS_HAVE_SSL_EXTRA_CHAIN_CERTS ${LWS_HAVE_SSL_EXTRA_CHAIN_CERTS} PARENT_SCOPE)
371372
set(LWS_HAVE_EVP_MD_CTX_free ${LWS_HAVE_EVP_MD_CTX_free} PARENT_SCOPE)
373+
set(LWS_HAVE_SSL_CTX_SET_ECDH_AUTO ${LWS_HAVE_SSL_CTX_SET_ECDH_AUTO} PARENT_SCOPE)
372374
CHECK_FUNCTION_EXISTS(${VARIA}ECDSA_SIG_set0 LWS_HAVE_ECDSA_SIG_set0 PARENT_SCOPE)
373375
CHECK_FUNCTION_EXISTS(${VARIA}BN_bn2binpad LWS_HAVE_BN_bn2binpad PARENT_SCOPE)
374376
CHECK_FUNCTION_EXISTS(${VARIA}EVP_aes_128_wrap LWS_HAVE_EVP_aes_128_wrap PARENT_SCOPE)

lib/tls/openssl/openssl-server.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,14 @@ lws_tls_server_vhost_backend_init(const struct lws_context_creation_info *info,
520520
#ifdef SSL_OP_NO_COMPRESSION
521521
SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_NO_COMPRESSION);
522522
#endif
523+
if (lws_check_opt(info->options,
524+
LWS_SERVER_OPTION_OPENSSL_AUTO_DH_PARAMETERS))
525+
#if defined(LWS_HAVE_SSL_CTX_SET_ECDH_AUTO) || defined(LWS_WITH_BORINGSSL)
526+
SSL_CTX_set_ecdh_auto(vhost->tls.ssl_ctx, 1);
527+
#else
528+
SSL_CTX_set_dh_auto(vhost->tls.ssl_ctx, 1);
529+
#endif
530+
523531
SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_SINGLE_DH_USE);
524532
SSL_CTX_set_options(vhost->tls.ssl_ctx, SSL_OP_CIPHER_SERVER_PREFERENCE);
525533

test-apps/test-server.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,11 @@ int main(int argc, char **argv)
579579
"!DHE-RSA-AES256-SHA256:"
580580
"!AES256-GCM-SHA384:"
581581
"!AES256-SHA256";
582+
/*
583+
* This is needed for DHE-RSA-AES256-GCM-SHA384, it does enable all
584+
* TLSv1.2 Kx=DH ciphers though (if the're on the ssl_cipher_list).
585+
*/
586+
info.options |= LWS_SERVER_OPTION_OPENSSL_AUTO_DH_PARAMETERS;
582587
#endif
583588
info.mounts = &mount;
584589
#if defined(LWS_WITH_PEER_LIMITS)

0 commit comments

Comments
 (0)