Delphi Indy SSL参数

3

这是 Indy服务器支持SSL2但不应该支持 的续篇。

使用Delphi XE Berlin 10.1,我发现了两个CipherList字符串,满足等级A加密强度的基本要求:

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

使用Qualys SSLlabs进行测试,结果显示,它们的安全性很强,但存在以下问题:

  • 不支持前向保密。

  • 一些老旧的浏览器(特别是XP和Win7上的IE8)无法连接(我的一些用户——政府、医院——可能仍在使用这些浏览器。你可能会认为这些用户有更大的问题需要解决,而不是担心RC4和DES,但本文讨论的不是这个问题)。

当我使用Qualys检查我的银行服务时,我注意到他们支持所有旧的浏览器。我的问题是:如何配置Indy的TIdServerIOHandlerSSLOpenSSL以便我的服务器也能如此?

在当前的配置中,我有:

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

我注意到 Qualys 报告显示我的服务器仅支持 TLS 1.2,但我的银行似乎还支持 TLS 1.1 和 TLS 1.0。他们使用 RSA2048 密钥和 SHA256withRSA 签名,而我也是这样做的。我使用最新的 OpenSSL DLLs,cipherList 是来自 Hynek Sclawack 的(hynek.me/articles),10天前已更新。
然而,没有旧版浏览器支持,也没有前向保密。我错过了什么?

Qualys有一篇关于前向保密的博客文章:为前向保密配置Apache、Nginx和OpenSSL - Remy Lebeau
1
OpenSSL服务器支持多个TLS版本的唯一方法是使用OpenSSL的SSLv23通配协议,该协议根据客户端握手和服务器配置动态执行TLS版本协商。当您设置Method=sslvSSLv23时,Indy使用SSLv23。将Method=sslvTLSv1_2设置为仅强制使用TLS 1.2(并设置SSLVersions=[sslvTLSv1_2]),但将SSLVersions=[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]设置为将Method=sslvSSLv23,然后禁用SSLv2和SSLv3,同时保留启用TLS 1.x。 - Remy Lebeau
当我将method=sslvSSLv23与versions=[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]组合使用时,SSLlabs测试显示支持TLS 1.x协议。但是同时也支持SSL 3。 如果我理解正确的话,这不应该是这种情况。所以我的代码肯定出了问题。我将进一步搜索。当我只使用method=sslvTLSv1_2时,仅支持TLS1.2协议-正如预期的那样。 - user3212191
请注意,Qualys博客以“此博客已过时”开头。 - user3212191
让我们在聊天中继续这个讨论 - user3212191
显示剩余2条评论
1个回答

1
几个月前,我在Qualys Labs上的测试得到了A级评分,包括前向保密。以下是使用的CipherList(Cipher List太长无法作为评论,因此作为答案提供):
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';

我尝试了那些密码。和之前我展示的列表一样的结果。 有趣的是,SSLlabs显示了它可以使用的密码套件。对于我的服务器,它只显示TLS_RSA_WITH_AES_...,即使您的列表包括ECDHE密码。而这些密码是需要用于前向安全的。但是对于我的银行网站(我的参考),列出了TLS_ECDHE_RSA_WITH_AES_...密码。 现在我想知道我是否正在使用正确的DLL文件。 我从http://indy.fulgan.com/SSL/下载了libeay32.dll和ssleay32.dll,测试了1.0.2k版本。只有386个想要绑定(独立于32/64位exe)。 - user3212191

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接