Hi Frode,

Thanks for your patch.
Please see my comments below.

On Wed, Aug 25, 2021 at 01:05:13PM +0200, Frode Nordahl wrote:
> Contrary to what is stated in the documentation, when SSL
> ciphers or protocols options are omitted the default values
> will not be set.  The SSL library default settings will be used
> instead.
> 
> Fix handling of default ciphers and protocols so that we actually
> enforce what is listed as defaults.
> 
> Fixes: e18a1d086133 ("Add support for specifying SSL connection parameters to 
> ovsdb")
> Signed-off-by: Frode Nordahl <frode.nord...@canonical.com>
> ---
>  lib/stream-ssl.c | 30 ++++++++++++++++++++++--------
>  1 file changed, 22 insertions(+), 8 deletions(-)
> 
> diff --git a/lib/stream-ssl.c b/lib/stream-ssl.c
> index 0ea3f2c08..6b4cf6970 100644
> --- a/lib/stream-ssl.c
> +++ b/lib/stream-ssl.c
> @@ -162,8 +162,10 @@ struct ssl_config_file {
>  static struct ssl_config_file private_key;
>  static struct ssl_config_file certificate;
>  static struct ssl_config_file ca_cert;
> -static char *ssl_protocols = "TLSv1,TLSv1.1,TLSv1.2";
> -static char *ssl_ciphers = "HIGH:!aNULL:!MD5";
> +static char *default_ssl_protocols = "TLSv1,TLSv1.1,TLSv1.2";
> +static char *default_ssl_ciphers = "HIGH:!aNULL:!MD5";
> +static char *ssl_protocols = NULL;
> +static char *ssl_ciphers = NULL;
>  
>  /* Ordinarily, the SSL client and server verify each other's certificates 
> using
>   * a CA certificate.  Setting this to false disables this behavior.  (This 
> is a
> @@ -1225,14 +1227,19 @@ stream_ssl_set_key_and_cert(const char 
> *private_key_file,
>  void
>  stream_ssl_set_ciphers(const char *arg)
>  {
> -    if (ssl_init() || !arg || !strcmp(ssl_ciphers, arg)) {

The ssl_init() calls at least one time do_ssl_init() which then
calls SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!MD5").
Those are the defaults in the man-page and not from the library.

The do_ssl_init() also does:
   method = CONST_CAST(SSL_METHOD *, SSLv23_method());  

That should return SSLv3, TLSv1, TLSv1.1 and TLS1.2.

   ctx = SSL_CTX_new(method); 
   SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);

And there it excludes those SSL v2 and v3.

Therefore, the default would be "TLSv1,TLSv1.1,TLSv1.2" which is
the same in the man-page.

Did I miss something?

Thanks
fbl



> +    const char *input = arg ? arg : default_ssl_ciphers;
> +
> +    if (ssl_init() || !input || (ssl_ciphers && !strcmp(ssl_ciphers, 
> input))) {
>          return;
>      }
> -    if (SSL_CTX_set_cipher_list(ctx,arg) == 0) {
> +    if (SSL_CTX_set_cipher_list(ctx, input) == 0) {
>          VLOG_ERR("SSL_CTX_set_cipher_list: %s",
>                   ERR_error_string(ERR_get_error(), NULL));
>      }
> -    ssl_ciphers = xstrdup(arg);
> +    if (ssl_ciphers) {
> +        free(ssl_ciphers);
> +    }
> +    ssl_ciphers = xstrdup(input);
>  }
>  
>  /* Set SSL protocols based on the string input. Aborts with an error message
> @@ -1240,7 +1247,11 @@ stream_ssl_set_ciphers(const char *arg)
>  void
>  stream_ssl_set_protocols(const char *arg)
>  {
> -    if (ssl_init() || !arg || !strcmp(arg, ssl_protocols)){
> +    const char *input = arg ? arg : default_ssl_protocols;
> +
> +    if (ssl_init() || !input
> +        || (ssl_protocols && !strcmp(input, ssl_protocols)))
> +    {
>          return;
>      }
>  
> @@ -1253,7 +1264,7 @@ stream_ssl_set_protocols(const char *arg)
>  #endif
>      long protocol_flags = SSL_OP_NO_SSL_MASK;
>  
> -    char *s = xstrdup(arg);
> +    char *s = xstrdup(input);
>      char *save_ptr = NULL;
>      char *word = strtok_r(s, " ,\t", &save_ptr);
>      if (word == NULL) {
> @@ -1281,7 +1292,10 @@ stream_ssl_set_protocols(const char *arg)
>      /* Set the actual options. */
>      SSL_CTX_set_options(ctx, protocol_flags);
>  
> -    ssl_protocols = xstrdup(arg);
> +    if (ssl_protocols) {
> +      free(ssl_protocols);
> +    }
> +    ssl_protocols = xstrdup(input);
>  
>  exit:
>      free(s);
> -- 
> 2.32.0
> 
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev

-- 
fbl
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to