Anyone willing to review / comment?

On 23-08-14 18:21, Steffan Karger wrote:
> 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 <stef...@karger.me>
> ---
>  doc/openvpn.8         | 15 ++++++++++-----
>  src/openvpn/options.c | 14 ++++++++++----
>  src/openvpn/ssl.c     |  5 ++++-
>  3 files changed, 24 insertions(+), 10 deletions(-)
> 
> diff --git a/doc/openvpn.8 b/doc/openvpn.8
> index f2911c0..0448d29 100644
> --- a/doc/openvpn.8
> +++ b/doc/openvpn.8
> @@ -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
> diff --git a/src/openvpn/options.c b/src/openvpn/options.c
> index 84eb6ed..92189a5 100644
> --- a/src/openvpn/options.c
> +++ b/src/openvpn/options.c
> @@ -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);
> diff --git a/src/openvpn/ssl.c b/src/openvpn/ssl.c
> index 3ce1f60..34f02a7 100644
> --- a/src/openvpn/ssl.c
> +++ b/src/openvpn/ssl.c
> @@ -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 */
>      {
> 

Reply via email to