问题:如何让Indy 10与强制执行最新TLS1.2SSL最佳实践的web服务器协同工作?
--最佳实践是由微软记录的: https://technet.microsoft.com/library/security/ms12-006本质上来说,跨多个TLS版本使用的一大块密码被认为是不安全的。请注意,这个kb是从2013年年中,远早于贵宾犬。
作为一种最佳实践,德尔福社区有一些关于猛兽攻击的文章,这些文章还建议禁用基于CBC的密码(http://www.atozedsoftware.com/Intraweb/Blog/20120905.EN.aspx)。
最佳实践摘要:的主要漏洞包括猛兽和贵宾犬攻击。这里的场景既不尖锐,也不狭窄。这是“如何使一个真正现代化的、可靠的、基于Indy10+OpenSSL的SSL客户端”主题。简而言之,这些漏洞表明要避免SSL 2/3,在许多情况下,TLS 1.0也被认为是易受攻击的。许多基于CBC的密码被认为是不安全的。
我要补充一点:这不是假设性的。2014年早些时候,我们有一位渗透测试顾问(Poodle)在他的报告中提到,我们的应用服务器(针对我们的web应用程序)仅被设置为TLS 1.2,所有其他SSL协议都将被禁用。这位顾问是一家大型网络安全公司的一部分,他们在每一次审查中都建议这样做。我相信他们所做的是行业标准。
Indy 10 build: gsIdVersion =10.6.0.5213;
在代码中,indy被设置为: SSLOptions.SSLVersions := sslvSSLv23
和openssl库: 1.0.1.10 / 1.0.1J
使用with 2012-R2服务器进行测试,使用ssl证书。我们正在逐步降低web服务器上的SSL,以符合最新的SSL最佳实践。
我们发现了一个问题: Indy 10在执行最佳实践和TLS 1.2时无法连接。
浏览器连接得很好。
我们测试的方式:
结果:
这里是implements:(下面的“最佳实践”按钮在一次单击中实现了Microsoft在这里推荐的内容:https://technet.microsoft.com/library/security/ms12-006 )



发布于 2014-12-07 06:26:56
正如雷米在对OP的注释中指出的那样,解决方案是使用Indy 10 SSLIOHandler的CipherList属性来设置密码列表。
可用密码:
https://www.openssl.org/docs/apps/ciphers.html
一些注意事项:
1)我们无法让上面openssl文档页面上的通配符示例正常工作。例句:所有的东西:@力量之类的东西,我们都做不到。
2)正确的格式是带有冒号分隔符的密码列表。例如AES128-SHA256:AES128-GCM-SHA256:ECDH-RSA-NULL-SHA
3)我们发现,提供一个长长的密码列表(40个或更多)实际上降低了与各种ssl服务器的连接性。(看起来在同一个列表中有些可能不兼容,或者openssl在与远程服务器协商方面做得不完美。)列表的子集给出了更好的结果。
4)到目前为止,我们还没有找到一份可靠的、推荐的清单。
5)有人告诉我们,由于某些密码的代价很高(cpu密集),其中一些密码很可能应该避免。我们目前还没有进一步调查这一地区。
6)为了将来验证您的应用程序,允许配置或注册表条目修改字段中的密码列表。(谁知道接下来会有什么被利用和残废.今天SSL v3,明天TLS 1.1.)
https://stackoverflow.com/questions/27302773
复制相似问题