2
votes

This is a continuation of Indy server supports SSL 2, but it should not.

Using Delphi XE Berlin 10.1, I have found two CipherList strings that meet the basic requirements of level A encryption strength:

TLSv1:TLSv1.2:SSLv3:!RC4:!NULL-MD5:!NULL-SHA:!NULL-SHA256:!DES-CBC-SHA:!DES-CBC3-SHA:!IDEA-CBC-SHA

ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS

Testing with Qualys SSLlabs shows the same results for them: they are strong, but:

  • forward secrecy is not supported.

  • some of the older browsers (in particular, IE8 on XP and Win7) will not connect (some of my users - government, hospitals - may still be using those. You may argue that those users have bigger problems than to worry about RC4 and DES, but that is not what this post is about).

When I check my bank's service with Qualys, I notice that they do support all of the old browsers. My question is: how to configure Indy's TIdServerIOHandlerSSLOpenSSL so that my server will do the same?

In the current configuration, I have:

Method := sslvTLSv1_2;
SSLVersions := [sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];

I notice that the Qualys report says that my server supports TLS 1.2 only, while my bank seems to support TLS 1.1 and TLS 1.0 as well. They use an RSA2048 key with SHA256withRSA signature. But so do I. I use the latest OpenSSL DLLs. The cipherList is from Hynek Sclawack (hynek.me/articles), updated 10 days ago.

And yet: no older browsers, no forward secrecy. What have I missed?

1
Qualys has a blog article about Forward Secrecy: Configuring Apache, Nginx, and OpenSSL for Forward SecrecyRemy Lebeau
The only way an OpenSSL server can support multiple TLS versions is by using OpenSSL's SSLv23 wildcard protocol, which performs TLS version negotiation dynamically based on the client's handshake and server's configuration. Indy uses SSLv23 when you have Method=sslvSSLv23. Setting Method=sslvTLSv1_2 forces TLS 1.2 only (and sets SSLVersions=[sslvTLSv1_2]), but setting SSLVersions=[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2] will set Method=sslvSSLv23 and then disable SSLv2 and SSLv3 while leaving TLS 1.x enabled.Remy Lebeau
When I use method=sslvSSLv23 in combination with versions=[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2] the SSLlabs test shows that TLS1.x protocols are supported. But also SSL 3. If I read you correctly that should not be the case. So my code must be messed up somehow. I will search further. When I use method=sslvTLSv1_2 only the TLS1.2 protocol is supported - as expected.user3212191
Note that the Qualys blog starts with "This blog is obsolete."user3212191
I don't know what to tell you. Indy explicitly disables SSL3 when Method=sslvSSLv23 and sslvSSLv3 is not in SSLVersions, using SSL_CTX_set_options(SSL_OP_NO_SSLv3).Remy Lebeau

1 Answers

0
votes

A few months ago my tests on Qualys Labs got an A grade, including Forward Secrecy. This was the CipherList used (Cipher List is too long for a comment, so here it goes as an answer):

CipherList := 'ECDHE-RSA-AES256-GCM-SHA384:'+            
  'ECDHE-RSA-AES128-GCM-SHA256:'+            
  'ECDHE-RSA-AES256-SHA384:'+                
  'ECDHE-RSA-AES128-SHA256:'+                
  'ECDHE-RSA-AES256-SHA:'+                   
  'ECDHE-RSA-AES128-SHA:'+                   
  'DHE-RSA-AES256-GCM-SHA384:'+              
  'DHE-RSA-AES256-SHA256:'+                  
  'DHE-RSA-AES256-SHA:'+                     
  'DHE-RSA-AES128-GCM-SHA256:'+              
  'DHE-RSA-AES128-SHA256:'+                  
  'DHE-RSA-AES128-SHA:'+                     
  'DES-CBC3-SHA:'+                           
  '!ADH:!EXP:!RC4:!eNULL@STRENGTH';