使用Indy 10的IdHTTP与TLS 1.2

12

我使用Delphi XE2和Indy 10.5.8.0。

目前,我需要将与我们其中一个服务器的连接更改为仅使用TLS 1.2,当前我们正在使用TLS 1.0。

作为 IdHTTP 的处理程序,正在使用 IdSSLIOHandlerSocketOpenSSL。

我尝试将方法更改为 sslvTLSv1_2,但它不起作用,因为连接会出现以下错误:

"Error connecting with SSL. error:1409442E:SSL routine:SSL3_READ_BYTES:tlsv 1 alert protocol version"

我正在使用默认密码列表,不确定是否需要任何特定密码(目前正在向服务器提供程序询问他们使用的密码)。

这是处理程序的配置:

SSLIOHandler Config

我以前没有使用SSL连接,因为在使用默认设置时一切都很好。

我尝试检查WireShark,在ssl vTLSv1或 sslvTLSv1_2 方法下,我都收到指向tls版本1.0的相同错误。

sslvTLSv1 方法:

Method sslvTLSv1

sslvTLSv1_2 方法:

enter image description here

如果我遗漏了什么,请指出正确的方向。

非常感谢您提供的所有帮助。

P.S:刚刚收到服务器提供商的回复,他们正在使用AES_128_GCM作为密码,它是否在默认密码列表中?

WireShark>客户端问候包:

enter image description here enter image description here


2
你的屏幕截图显示致命的TLS警报,但客户端Hello数据包看起来如何?服务器正在拒绝客户端请求的TLS版本。至于密码,缺省密码列表定义在IdSSLOpenSSLHeaders模块中的SSL_DEFAULT_CIPHER_LIST常量中。 - Remy Lebeau
5
无论如何,10.5.8 是一个已过时的 Indy 版本。当前版本是 10.6.2(在撰写本文时为 rev 5361)。如果您计划使用最新版本的 OpenSSL,则应认真考虑升级,因为由于 OpenSSL API 的最近变化,10.5.8 无法再使用它,这可能导致其无法加载 OpenSSL DLLs。另外,新版本的 Indy 对 TLS 1.1 和 1.2 的支持更好。 - Remy Lebeau
@RemyLebeau 感谢您的回复,我已经添加了客户端hello包,将考虑升级indy并查看是否有任何帮助,再次感谢提示。 - vexen
1个回答

14

以防万一有类似错误的人出现,我的情况是使用的SSL库(libeay32,ssleay32)已经过时了(年份为2010年)。更新SSL后,它就可以正确地工作而没有任何错误。

感谢@RemyLebeau指出这是一个更新问题=)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接