【发布时间】:2017-08-07 15:03:27
【问题描述】:
我一直在使用:
德尔福 XE8
印地版 10.6.2.5263
预编译打开的 SSL dll 文件(Win 32bit)v1.0.2.l
TIdSSLIOHandlerSocketOpenSSLMethod设置为sslvSSLv23
向服务器提交 POST 请求。几个月来,它就像一种魅力。
突然,一个疯狂的错误弹出:
14094410 sslv3 警报握手失败。
一位同事正在使用 SOAP UI 通过强制 TLS 1.2 向同一服务器提交请求并且它可以工作。我尝试将TIdSSLIOHandlerSocketOpenSSL1方法设置为sslvTLSv1_2,并将Mode更改为sslmClient,但结果始终相同。
我认为通过将Method设置为sslvTLSv1_2,不可能收到与SSLv3相关的错误。
我已经查看了这些 stackoverflow 帖子:
和其他一些线程,但我无法找到此问题的根本原因。
也许我错过了什么。能不能给个提示?
【问题讨论】:
-
TLS 是 SSL 3.0 的扩展,OpenSSL 使用 SSLv3 功能来实现 TLS,这就是警报显示 SSLv3 的原因。但是如果没有关于警报实际内容的具体细节,尤其是警报编号,就无法知道 OpenSSL 失败的原因。还有,你的 Indy 有点老了,当前版本是 10.6.2.5432,你应该考虑升级一下,这样你就有最新的 OpenSSL 支持代码了。
-
你好 Remy,确切的错误是:error:14094410:SSLroutines:ssl3_read_bytes:sslv3 警报握手失败。我会尝试获取最新的 Indy 版本,然后再试一次。
-
您好,我已经更新了 Indy 组件,但是现在显示的版本是 10.6.2.0。
-
您是直接从 SVN 下载的,还是从 Fulgan 下载的 nightly zip? Zip 的版本号正确。
-
你好 Remy,我用 Wireshark 和一些 Java 代码做了一些测试。 Wireshark 透露,Indy 组件总是发送 TLSv1 请求——无论我通过 SSLOptions.Method 或 SSLOptions.SSLVersions 选择什么。 java代码请求使用TLSv1.2,请求成功。所以我的问题是,indy 组件总是发送 TLSv1