如何仅支持 TLS 1.1 和 1.2(在我的网络服务中)?
How do I support TLS 1.1 and 1.2 only (in my webservice)?
在 中,我询问了有关在 Delphi XE2 下限制我的网络服务可用 SSL/TLS 协议的问题。
通过使用 TIdServerIOHandlerSSLOpenSSL
组件并将其 SSLOptions.SSLVersions
属性设置为 [sslvSSLv23,sslvTLSv1]
我能够将可用协议限制为 TLS 1.x.
现在,升级到 Delphi 西雅图升级 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 进行测试
- 设置 'old' 组合
[sslvSSLv23,sslvTLSv1]
有效
- 包括 TLS 1.0 也有效:
[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]
我个人只是将 SSLVersion 保持为默认值并使用 SSLOptions.CipherList
来限制仅使用已知的 SSL secure ciphers:
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,除非在编译期间明确激活它。
在
通过使用 TIdServerIOHandlerSSLOpenSSL
组件并将其 SSLOptions.SSLVersions
属性设置为 [sslvSSLv23,sslvTLSv1]
我能够将可用协议限制为 TLS 1.x.
现在,升级到 Delphi 西雅图升级 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 进行测试
- 设置 'old' 组合
[sslvSSLv23,sslvTLSv1]
有效 - 包括 TLS 1.0 也有效:
[sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2]
我个人只是将 SSLVersion 保持为默认值并使用 SSLOptions.CipherList
来限制仅使用已知的 SSL secure ciphers:
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,除非在编译期间明确激活它。