这是 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天前已更新。
然而,没有旧版浏览器支持,也没有前向保密。我错过了什么?
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