On 5/5/23 17:23, Ilya Maximets wrote:
> Hi, Dan.  Thanks for the patch!
> 
> Looks like you've lost a commit message somewhere.
> 
> On 5/4/23 17:47, Dan Williams wrote:
>> diff --git a/lib/ssl-connect.man b/lib/ssl-connect.man
>> index 6e54f77ef4d5e..896ce79c6378f 100644
>> --- a/lib/ssl-connect.man
>> +++ b/lib/ssl-connect.man
>> @@ -1,10 +1,12 @@
>>  .IP "\fB\-\-ssl\-protocols=\fIprotocols\fR"
>>  Specifies, in a comma- or space-delimited list, the SSL protocols
>>  \fB\*(PN\fR will enable for SSL connections.  Supported
>> -\fIprotocols\fR include \fBTLSv1\fR, \fBTLSv1.1\fR, and \fBTLSv1.2\fR.
>> -Regardless of order, the highest protocol supported by both sides will
>> -be chosen when making the connection.  The default when this option is
>> -omitted is \fBTLSv1,TLSv1.1,TLSv1.2\fR.
>> +\fIprotocols\fR include \fBTLSv1\fR, \fBTLSv1.1\fR, \fBTLSv1.2\fR, and
>> +(if supported by OpenSSL) \fBTLSv1.3\fR. Regardless of order, the
>> +highest protocol supported by both sides will be chosen when making the
>> +connection.  The default when this option is omitted is
>> +\fBTLSv1,TLSv1.1,TLSv1.2\fR and when the SSL implementation supports
>> +TLSv1.3, the default also includes \fBTLSv1.3\fR.
> 
> I'd say we should document in the opposite manner.  All the modern versions
> of OpenSSL should support TLS 1.3.  So, I'd suggest we say that it is
> supported unless it's not supported by the SSL implementation.  Instead
> of saying that it's not supported unless SSL implementation supports.
> 
>>  .
>>  .IP "\fB\-\-ssl\-ciphers=\fIciphers\fR"
>>  Specifies, in OpenSSL cipher string format, the ciphers \fB\*(PN\fR will 
>> diff --git a/lib/stream-ssl.c b/lib/stream-ssl.c
>> index 62da9febb663a..4f053d17dfccc 100644
>> --- a/lib/stream-ssl.c
>> +++ b/lib/stream-ssl.c
>> @@ -162,9 +162,15 @@ 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";
>>  
>> +#define BASE_SSL_PROTOS "TLSv1,TLSv1.1,TLSv1.2"
>> +#ifdef SSL_OP_NO_TLSv1_3
>> +static char *ssl_protocols = BASE_SSL_PROTOS",TLSv1.3";
>> +#else
>> +static char *ssl_protocols = BASE_SSL_PROTOS;
>> +#endif
>> +
>>  /* 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
>>   * security risk.) */
>> @@ -1284,6 +1290,10 @@ stream_ssl_set_protocols(const char *arg)
>>              on_flag = SSL_OP_NO_TLSv1_1;
>>          } else if (!strcasecmp(word, "TLSv1")){
>>              on_flag = SSL_OP_NO_TLSv1;
>> +#ifdef SSL_OP_NO_TLSv1_3
>> +        } else if (!strcasecmp(word, "TLSv1.3")){
> 
> I think, we should place a space between ){.  Even though existing
> code doesn't do that, there is no point in repeating bad patterns.
> 
>> +            on_flag = SSL_OP_NO_TLSv1_3;
>> +#endif
> 
> I'm not really a big fan of having handling of 1.3 at the end while
> other versions are in descending order, but I also see why you placed
> it here.  It takes less ifdef-ed code this way.
> 
> Alternative suggestion:  Maybe we can create a local array of
> structures that will map the name to a flag.  And then iterate
> over it in a loop.
> 
> What do you think?  I don't have a strong opinion.

Hmm.  Also, according to OpenSSL documentation, flags to disable
specific versions are deprecated since 1.1.0:
  https://www.openssl.org/docs/man3.1/man3/SSL_CTX_set_options.html

And users advised to use SSL_CTX_set_min/max_proto_version() API
instead (new in 1.1.0):
  https://www.openssl.org/docs/man3.1/man3/SSL_CTX_set_min_proto_version.html

It might make sense to change the interface altogether, i.e. find
min and max requested version and use the new API.  But I'm not sure.

> 
> Best regards, Ilya Maximets.

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to