this question中,我询问了有关在Delphi XE2下限制Web服务的可用SSL / TLS协议的问题。
通过使用TIdServerIOHandlerSSLOpenSSL组件并将其SSLOptions.SSLVersions属性设置为[sslvSSLv23,sslvTLSv1],我可以将其可用协议限制为TLS1.x。

现在,在升级到Delphi Seattle Upgrade 1之后,我想进一步将其限制为仅TLS 1.1和1.2:

LIOHandleSSL.SSLOptions.SSLVersions := [sslvTLSv1_1,sslvTLSv1_2];


但这根本不起作用。当尝试连接时,我得到一个

exception class EidOSSLUnderlying CryptoError with message
'Error accepting connection with SSL. error: 140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol'




Error connecting with SSL
EOF was observed that violates the protocol


这里发生了什么?如何解决?

笔记:


经过OpenSSL 1.02f和1.02h测试
设置“旧”组合[sslvSSLv23,sslvTLSv1]有效
包括TLS 1.0也可以:[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]

最佳答案

我个人只是将SSLVersion保留为其默认值,而是使用SSLOptions.CipherList来仅使用已知的secure ciphers来限制SSL:

LIOHandleSSL.SSLOptions.CipherList := 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';


这应该隐式禁用较旧的SSL版本,因为这些版本不支持指定的密码AFAIK。

请注意,默认情况下,OpenSSL 1.0.2g +禁用SSLv3,除非在编译过程中明确将其激活。

07-24 16:30