Curl一直说" SSL23_GET_SERVER_HELLO:sslv3警报握手失败"但它应该是TLS

时间:2016-01-17 01:02:08

标签: ssl curl https libcurl tls1.2

我的网络服务器上的PHP版本最近更新了。现在我注意到,当使用Curl下载外部https URL时,对于一个特定的服务器,它失败了,这给了我这个错误:

SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

从此服务器下载https内容虽然Curl之前工作正常。

现在奇怪的是:它似乎是一个SSL3错误,但正如我从其他关于此错误的案例中所理解的那样(此处也是SO),由于SSL3不再支持更新版本的PHP或卷曲。这是正确的,因为SSL3是不安全的。

但是,这个特定的网络服务器使用的是TLS1.2,而不是SSL3。

因此,如果我的Curl没有使用SSL3,也不是网络服务器,为什么我仍然会收到与SSL3相关的错误?

我已经尝试将CURLOPT_SSLVERSION设置为4,5或6,并将CURLOPT_SSL_CIPHER_LIST设置为TLSv1,但都无济于事,错误不断出现。

1 个答案:

答案 0 :(得分:0)

虽然此错误消息看起来像是使用SSL 3.0,但可能不是。由于TLS1.0实际上是SSL3.1等,因此您会在OpenSSL的TLS代码路径中找到许多具有SSLv3字符串的函数和错误消息。此特定服务器的问题可能是其他问题,需要知道服务器主机名和安装的OpenSSL版本才能找到有关该问题的更多信息。

编辑:根据评论,与curl一起使用的OpenSSL版本为0.9.8b。由于服务器只能执行TLS 1.2,因此握手将失败,因为自OpenSSL 1.0.1起仅支持TLS 1.2。除了0.9.8b是多年没有支持,并有几个安全问题,在以后的版本中得到修复。