Add option to disable Diffie Hellman key exchange by setting "--dh none"
PATCH 1/1 Add option to disable Diffie Hellman key exchange by setting "--dh none"
As requested on the mailing list and in trac ticket #410, add an option to disable 'traditional' Diffie Hellman key exchange. People want to be able to create ecdh-only configurations.
Also update the manpage to reflect the new behaviour, and while touching it change the text to motivate users towards a more secure configuration.
--- doc/openvpn.8 | 15 ++++++++++----- src/openvpn/options.c | 14 ++++++++++---- src/openvpn/ssl.c | 5 ++++- 3 files changed, 24 insertions(+), 10 deletions(-)
doc/openvpn.8 +10 -5
@@ -4238,13 +4238,18 @@ Not available with PolarSSL. File containing Diffie Hellman parameters in .pem format (required for .B \-\-tls-server -only). Use +only). -.B openssl dhparam -out dh1024.pem 1024 +Set +.B file=none +to disable Diffie Hellman key exchange (and use ECDH only). Note that this +requires peers to be using an SSL library that supports ECDH TLS cipher suites +(e.g. OpenSSL 1.0.1+, or PolarSSL 1.3+). -to generate your own, or use the existing dh1024.pem file -included with the OpenVPN distribution. Diffie Hellman parameters -may be considered public. +Use +.B openssl dhparam -out dh2048.pem 2048 +to generate 2048-bit DH parameters. Diffie Hellman parameters may be considered +public. .\"********************************************************* .TP .B \-\-ecdh-curve name
src/openvpn/options.c +10 -4
@@ -2149,10 +2149,6 @@ options_postprocess_verify_ce (const struct options *options, const struct conne (options->shared_secret_file != NULL) > 1)msg (M_USAGE ,"specify only one of --tls-server, --tls-client, or --secret" ); -if (options->tls_server) - { -notnull (options->dh_file,"DH file (--dh)" ); - }if (options->tls_server || options->tls_client) {#ifdef ENABLE_PKCS11
@@ -2504,6 +2500,16 @@ options_postprocess_mutate (struct options *o)for (i =0 ; i < o->connection_list->len; ++i)options_postprocess_mutate_ce (o, o->connection_list->array[i]); +#ifdef ENABLE_SSL +if (o->tls_server) + { +/* Check that DH file is specified, or explicitly disabled */ +notnull (o->dh_file,"DH file (--dh)" ); +if (streq (o->dh_file,"none" )) + o->dh_file =NULL ; + } +#endif +#if ENABLE_MANAGEMENT if (o->http_proxy_override)options_postprocess_http_proxy_override (o);
src/openvpn/ssl.c +4 -1
@@ -483,7 +483,10 @@ init_ssl (const struct options *options, struct tls_root_ctx *new_ctx)if (options->tls_server) {tls_ctx_server_new (new_ctx); -tls_ctx_load_dh_params (new_ctx, options->dh_file, options->dh_file_inline); + +if (options->dh_file) +tls_ctx_load_dh_params (new_ctx, options->dh_file, + options->dh_file_inline); }else /* if client */ {
Signature · 1 line
1.9.1
Anyone willing to review / comment?
Quoted 91 lines · Steffan Karger
As requested on the mailing list and in trac ticket #410, add an option to disable 'traditional' Diffie Hellman key exchange. People want to be able to create ecdh-only configurations.
Also update the manpage to reflect the new behaviour, and while touching it change the text to motivate users towards a more secure configuration.
Signed-off-by Steffan Karger <[email protected]...>--- doc/openvpn.8 | 15 ++++++++++----- src/openvpn/options.c | 14 ++++++++++---- src/openvpn/ssl.c | 5 ++++- 3 files changed, 24 insertions(+), 10 deletions(-)doc/openvpn.8 +10
-5@@ -4238,13 +4238,18 @@ Not available with PolarSSL. File containing Diffie Hellman parameters in .pem format (required for .B \-\-tls-server -only). Use +only). -.B openssl dhparam -out dh1024.pem 1024 +Set +.B file=none +to disable Diffie Hellman key exchange (and use ECDH only). Note that this +requires peers to be using an SSL library that supports ECDH TLS cipher suites +(e.g. OpenSSL 1.0.1+, or PolarSSL 1.3+). -to generate your own, or use the existing dh1024.pem file -included with the OpenVPN distribution. Diffie Hellman parameters -may be considered public. +Use +.B openssl dhparam -out dh2048.pem 2048 +to generate 2048-bit DH parameters. Diffie Hellman parameters may be considered +public. .\"********************************************************* .TP .B \-\-ecdh-curve namesrc/openvpn/options.c +10
-4@@ -2149,10 +2149,6 @@ options_postprocess_verify_ce (const struct options *options, const struct conne (options->shared_secret_file != NULL) > 1)msg (M_USAGE ,"specify only one of --tls-server, --tls-client, or --secret" ); -if (options->tls_server) - { -notnull (options->dh_file,"DH file (--dh)" ); - }if (options->tls_server || options->tls_client) {#ifdef ENABLE_PKCS11 @@ -2504,6 +2500,16 @@ options_postprocess_mutate (struct options *o)for (i =0 ; i < o->connection_list->len; ++i)options_postprocess_mutate_ce (o, o->connection_list->array[i]); +#ifdef ENABLE_SSL +if (o->tls_server) + { +/* Check that DH file is specified, or explicitly disabled */ +notnull (o->dh_file,"DH file (--dh)" ); +if (streq (o->dh_file,"none" )) + o->dh_file =NULL ; + } +#endif +#if ENABLE_MANAGEMENT if (o->http_proxy_override)options_postprocess_http_proxy_override (o);src/openvpn/ssl.c +4
-1@@ -483,7 +483,10 @@ init_ssl (const struct options *options, struct tls_root_ctx *new_ctx)if (options->tls_server) {tls_ctx_server_new (new_ctx); -tls_ctx_load_dh_params (new_ctx, options->dh_file, options->dh_file_inline); + +if (options->dh_file) +tls_ctx_load_dh_params (new_ctx, options->dh_file, + options->dh_file_inline); }else /* if client */ {
PATCH v2 1/1 Add option to disable Diffie Hellman key exchange by setting "--dh none"
In reply to Steffan KargerAs requested on the mailing list and in trac ticket #410, add an option to disable 'traditional' Diffie Hellman key exchange. People want to be able to create ecdh-only configurations.
This patch also disables RSA key exchange by default for OpenSSL builds, to prevent that people who set "--dh none" but have an OpenSSL version that doesn't support ECDH end up with a less secure connection. Note that users that specify their own --tls-cipher override these defaults and thus can still use whatever OpenSSL supports (and might thus end up with less secure connections).
PolarSSL does not allow to easily disable RSA key exchange during runtime, but its default compile options do not include RSA key exchange based cipher suites.
Finally update the manpage to reflect the new behaviour, and while touching it change the text to motivate users towards a more secure configuration.
v2 - disable RSA key exchange by default
--- doc/openvpn.8 | 15 ++++++++++----- src/openvpn/options.c | 14 ++++++++++---- src/openvpn/ssl.c | 6 +++++- src/openvpn/ssl_openssl.c | 2 +- 4 files changed, 26 insertions(+), 11 deletions(-)
doc/openvpn.8 +10 -5
@@ -4239,13 +4239,18 @@ Not available with PolarSSL. File containing Diffie Hellman parameters in .pem format (required for .B \-\-tls-server -only). Use +only). -.B openssl dhparam -out dh1024.pem 1024 +Set +.B file=none +to disable Diffie Hellman key exchange (and use ECDH only). Note that this +requires peers to be using an SSL library that supports ECDH TLS cipher suites +(e.g. OpenSSL 1.0.1+, or PolarSSL 1.3+). -to generate your own, or use the existing dh1024.pem file -included with the OpenVPN distribution. Diffie Hellman parameters -may be considered public. +Use +.B openssl dhparam -out dh2048.pem 2048 +to generate 2048-bit DH parameters. Diffie Hellman parameters may be considered +public. .\"********************************************************* .TP .B \-\-ecdh-curve name
src/openvpn/options.c +10 -4
@@ -2134,10 +2134,6 @@ options_postprocess_verify_ce (const struct options *options, const struct conne (options->shared_secret_file != NULL) > 1)msg (M_USAGE ,"specify only one of --tls-server, --tls-client, or --secret" ); -if (options->tls_server) - { -notnull (options->dh_file,"DH file (--dh)" ); - }if (options->tls_server || options->tls_client) {#ifdef ENABLE_PKCS11
@@ -2497,6 +2493,16 @@ options_postprocess_mutate (struct options *o)for (i =0 ; i < o->connection_list->len; ++i)options_postprocess_mutate_ce (o, o->connection_list->array[i]); +#ifdef ENABLE_CRYPTO +if (o->tls_server) + { +/* Check that DH file is specified, or explicitly disabled */ +notnull (o->dh_file,"DH file (--dh)" ); +if (streq (o->dh_file,"none" )) + o->dh_file =NULL ; + } +#endif +#if ENABLE_MANAGEMENT if (o->http_proxy_override)options_postprocess_http_proxy_override (o);
src/openvpn/ssl.c +5 -1
@@ -242,6 +242,7 @@ static const tls_cipher_name_pair tls_cipher_name_translation_table[] = { {"EDH", "EDH"}, {"EXP", "EXP"}, {"RSA", "RSA"}, + {"kRSA", "kRSA"}, {"SRP", "SRP"}, #endif {NULL, NULL}
@@ -483,7 +484,10 @@ init_ssl (const struct options *options, struct tls_root_ctx *new_ctx)if (options->tls_server) {tls_ctx_server_new (new_ctx); -tls_ctx_load_dh_params (new_ctx, options->dh_file, options->dh_file_inline); + +if (options->dh_file) +tls_ctx_load_dh_params (new_ctx, options->dh_file, + options->dh_file_inline); }else /* if client */ {
src/openvpn/ssl_openssl.c +1 -1
@@ -234,7 +234,7 @@ tls_ctx_restrict_ciphers(struct tls_root_ctx *ctx, const char *ciphers)if (ciphers ==NULL ) {/* Use sane default (disable export, and unsupported cipher modes) */ -if (!SSL_CTX_set_cipher_list (ctx->ctx,"DEFAULT:!EXP:!PSK:!SRP" )) +if (!SSL_CTX_set_cipher_list (ctx->ctx,"DEFAULT:!EXP:!PSK:!SRP:!kRSA" ))crypto_msg (M_FATAL ,"Failed to set default TLS cipher list." );return ; }
Signature · 1 line
1.9.1
Quoted 11 lines · Steffan Karger
As requested on the mailing list and in trac ticket #410, add an option to disable 'traditional' Diffie Hellman key exchange. People want to be able to create ecdh-only configurations.
This patch also disables RSA key exchange by default for OpenSSL builds, to prevent that people who set "--dh none" but have an OpenSSL version that doesn't support ECDH end up with a less secure connection. Note that users that specify their own --tls-cipher override these defaults and thus can still use whatever OpenSSL supports (and might thus end up with less secure connections).
Quoted 10 lines
PolarSSL does not allow to easily disable RSA key exchange during runtime, but its default compile options do not include RSA key exchange based cipher suites.
Finally update the manpage to reflect the new behaviour, and while touching it change the text to motivate users towards a more secure configuration.
v2 - disable RSA key exchange by default
ACK. On a side note we should document the default of tls-cipher (DEFAULT:!EXP:!PSK:!SRP:!kRSA) in the man page.
Arne
[Openvpn-devel] [PATCH applied] Re: Add option to disable Diffie Hellman key exchange by setting '--dh none'
In reply to Steffan KargerYour patch has been applied to the master branch.
commit bd9aa06feb41838689ed01f79845bc765f887ae3
Author: Steffan Karger Date: Thu Jan 1 20:46:09 2015 +0100
Add option to disable Diffie Hellman key exchange by setting '--dh none'
Signed-off-by: Steffan Karger <[email protected]...>
Acked-by: Arne Schwabe <[email protected]...>
Message-Id: <[email protected]...>
URL: http://article.gmane.org/gmane.network.openvpn.devel/9376
Signed-off-by: Gert Doering <[email protected]...>--
kind regards,
Gert Doering