Curl总是说“SSL23_GET_SERVER_HELLO:sslv3警报握手失败”,但它应该是TLS

问题描述:

我的网络服务器上的PHP版本最近更新了。现在我注意到,在下载外部https网址时,卷曲,为一个特定服务器失败,给我这个错误:Curl总是说“SSL23_GET_SERVER_HELLO:sslv3警报握手失败”,但它应该是TLS

SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

下载HTTPS的东西从该服务器虽然卷曲之前工作的罚款。

现在奇怪的是:它似乎是一个SSL3错误,但正如我从其他情况了解这个错误(也在这里),这是由于SSL3不再支持更新版本的PHP或Curl。正确的是,SSL3是不安全的。

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

所以,如果我的卷曲不使用SSL3,也不是Web服务器,为什么我仍然得到SSL3相关的错误?

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

+0

什么doest http://ssllabs.com/ssltest/说那个服务器? – Tom

+0

@Tom它只在服务器上表示TLS1.2,没有旧的TLS或SSL版本([results](https://www.ssllabs.com/ssltest/analyze.html?d=btc.blockr.io)) – RocketNuts

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

编辑:基于评论,与卷曲使用的OpenSSL的版本是0.9.8b。由于服务器只能执行TLS 1.2,因此握手将失败,因为自OpenSSL 1.0.1以后仅支持TLS 1.2。除了0.9.8b已经过了几年的支持,还有几个安全问题在后来的版本中得到了修复。

+0

在phpinfo的Curl下,它说:'cURL Information'是'7.15.5','SSL Version'是'OpenSSL/0.9.8b'。在OpenSSL中,它表示'OpenSSL Library Version'和'OpenSSL Header Version'都是'OpenSSL 0.9.8e-fips-rhel5 2008年7月1日'。很明显,这些已经很久没有更新,会要求主机提供商这样做(我自己无法控制这个)。 – RocketNuts

+0

@RocketNuts:请参阅编辑后的回复 - 您使用的软件过于简单,无法访问服务器。 –

+0

谢谢@Steffen,是的,我真的很惊讶地发现这个古老的OpenSSL。我以某种方式认为它会与最近的PHP升级一样相当新,但显然不是。我希望他们很快能够更新OpenSSL。 – RocketNuts