我如何仅支持TLS 1.1和1.2(在我的网络服务中)?

时间:2016-05-04 08:35:59

标签: delphi ssl openssl indy delphi-10-seattle

this question中,我询问是否在Delphi XE2下为我的网络服务限制了可用的SSL / TLS协议。
通过使用TIdServerIOHandlerSSLOpenSSL组件并将其SSLOptions.SSLVersions属性设置为[sslvSSLv23,sslvTLSv1],我能够将可用协议限制为TLS 1.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]

1 个答案:

答案 0 :(得分:4)

我个人只是将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,除非在编译期间明确激活它。