我的网络服务器上的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
,但都无济于事,错误不断出现。
答案 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是多年没有支持,并有几个安全问题,在以后的版本中得到修复。