Patch for adding tls_honor_cipher_order

Jeroen van Meeuwen (Kolab Systems) vanmeeuwen at kolabsys.com
Thu Oct 30 12:04:42 EDT 2014


On 2014-10-23 16:04, Wolfgang Breyha wrote:
> Kristian Kræmmer Nielsen wrote on 17/10/14 15:13:
>> The more important part of my previous mail are that there are issues 
>> with
>> the patches that now have been merged into git. E.g. compression is 
>> not
>> merged correctly and it is recommended to do negative list and not
>> positive lists of protocols.
> 
> Yes, you're right. The patches in master tree have broken logic...
> 
> Option documentation says:
>  tls_versions: ssl2 ssl3 tls1_0 tls1_1 tls1_2
>            Disable SSL/TLS protocols not in this list.
> 
> Code says:
> + if (strstr(tls_versions, "tls1_2") == NULL) {
> +#if (OPENSSL_VERSION_NUMBER >= 0x1000105fL)
> + off |= SSL_OP_NO_TLSv1_2;
> +#else
> + syslog(LOG_ERR, "ERROR: TLSv1.2 configured, OpenSSL < 1.0.1e 
> insufficient");
> +#endif
> + }
> 
> Setting the NO_TLSv1_2 option does the opposite of the expected/wanted
> behavior.

You're aware though, that for the code to set NO_TLSv1_2 you would need 
to explicitly set a list of TLS versions that does not include tls1_2, 
such as:

   tls_versions: sslv2 sslv3 tls1_0 tls1_1

Let's not forget the code starts off with SSL_OP_ALL -- probably also 
not the best of ideas.

Should newer versions arrive (say, tls1_3), it would not be suppressed 
(the corresponding NO_TLSv1.3 flag would not be set) until after *both*; 
imap/tls.c is updated to handle a new value for the setting, and your 
configuration is not updated (to include the new value tls1_3 for it 
would otherwise be suppressed).

> I also would prefer a negative list as most other daemons like
> apache, exim, ... use. Maybe a more generic
> tls_openssl_options: no_ssl2 no_ssl3 no_compression 
> prefer_server_cipher_order
> would be better?
> 

A better way of specifying TLS versions would certainly be appreciated, 
especially if the list of options translates to openssl flags directly, 
so we don't have to patch/rebuild every time the flags change in order 
to allow newer/better versions.

I recall needing to upgrade Apache httpd from version 2.2 to 2.4 in 
order to be able to add -TLSv1.1:

   SSLOptions all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1

or, for that matter:

   SSLOptions TLSv1.2

as neither flags were supported by httpd 2.2 -- admittedly, I could have 
backported the fix/enhancement rather than upgrade.

Anyway, it's one of the things I wanted to prevent having to do in Cyrus 
IMAP.

> And yes, you're also right with mentioning that functionality is 
> missing.
>  tls_compression: 0
>    Enable TLS compression. Disabled by default.
> 

This has been an oversight on my part.

>  tls_eccurve: prime256v1
>    Select the elliptic curve used for ECDHE.
> description is there, but there is no code doing it actually. Support 
> for ECDH
> auto mode in Openssl 1.2+ as provided in
> https://bugzilla.cyrusimap.org/attachment.cgi?id=1535
> is missing in the documentation as well.
> 

This patch and various other patches from different people in different 
tickets did not really mix well. Along with the tls_compression having 
been omitted, I did not consider documenting "auto" as a valid 
configuration value.

I'm also not sure what you mean by OpenSSL 1.2+ -- do you mean OpenSSL 
1.0.2+?

Kind regards,

Jeroen van Meeuwen

-- 
Systems Architect, Kolab Systems AG

e: vanmeeuwen at kolabsys.com
m: +41 79 951 9003
w: http://www.kolabsys.com

pgp: 9342 BF08


More information about the Info-cyrus mailing list