使用OpenSSL 0.9.8针对OpenSSL 1.0.0服务器运行curl会导致握手错误?

时间:2011-12-23 18:59:13

标签: curl openssl handshake

如果我对运行OpenSSL 1.0.0e的机器运行curl,例如:

curl -v https://shumaker.flexrentalsolutions.com

在运行OpenSSL 0.9.8r的计算机上我收到以下错误:

About to connect() to shumaker.flexrentalsolutions.com port 443 (#0)
*   Trying 50.112.122.15... connected
* Connected to shumaker.flexrentalsolutions.com (50.112.122.15) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
* error:14077458:SSL routines:SSL23_GET_SERVER_HELLO:reason(1112)
* Closing connection #0

如果我在运行OpenSSL 1.0.0e的计算机上运行相同的curl命令,则命令完成没有任何问题。

看来握手没有正确完成,显然是由于两个OpenSSL版本之间的某些不兼容。

知道如何解决这个问题吗?

5 个答案:

答案 0 :(得分:14)

如果在协议中设置openssl版本,则可以:

对于命令行:

curl -v -3 https://shumaker.flexrentalsolutions.com

如果在php:

curl_setopt($ch, CURLOPT_SSLVERSION,3);

答案 1 :(得分:6)

这是一个仍然开放的(OpenSSL)错误。详细信息已发布在此curl bug report中。

“mancha”的更多细节是posted to OpenSSL-dev

答案 2 :(得分:0)

这不是一个好的解决方案,但它比轮子旋转更好,所以我将在这里添加它作为答案:

如果可以,请使用GnuTLS模块而不是mod_ssl。它不受OpenSSL的束缚,所以这个可怕的日常浪费问题已被巧妙地回避了。

答案 3 :(得分:0)

现在由于POODLE vulnerability许多网站现已停用SSL 3.0

你应该像这样使用TLS

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1)

如果您仍然有错误(对于Apache),请检查您的vhost是否获得了正确的设置ServerName

答案 4 :(得分:0)

我在OS X上使用brew在某些https服务器上遇到此问题,brew在内部使用curl。请注意,这仅适用于OS X 10.7.5,它停留在OpenSSL / 0.9.8r上。我会升级,但苹果不支持>关于这款iMac的10.7!

我的解决方法是使用brew升级curl,将版本升级到1.0.2f,幸运的是curl的brew安装不会

brew install curl