2011-12-23 46 views
10

如果我对运行OpenSSL的1.0.0e例如机器运行curl:对OpenSSL 1.0.0服务器运行OpenSSL 0.9.8 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版本之间的某些不兼容。

任何想法如何解决这个问题?

回答

6

这是一个仍然打开的(OpenSSL)错误。详细信息已张贴在此curl bug report

进一步的细节是“mancha”的posted to OpenSSL-dev

+0

我能得到阿帕奇通过使用OpenSSL的0.9.8使用指向OpenSSL 0.9.8的mod_ssl模块构建。做出这一改变照顾到了这个问题。任何想法,当OpenSSL 1.0.0错误将被修复? – rogiller 2011-12-30 15:27:08

0

这不是一个好解决,但它比轮毂旋压好,所以我要在这里添加它作为一个答案:

使用的GnuTLS模块,而不是mod_ssl的,如果你能。它并不局限于OpenSSL,所以这个可怕的日子浪费的问题被整齐地回避了。

14

如果您在协议中设定的OpenSSL的版本,它的工作原理:

对于命令行:

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

如果在PHP中:

curl_setopt($ch, CURLOPT_SSLVERSION,3); 
+0

我有OP提到的这个openssl错误错误。 @ jbaylina的解决方案解决了我的问题。谢谢! – ThinkBonobo 2013-11-18 03:26:07

0

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

您应该使用TLS这样的:

curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1)

如果仍然有错误(Apache)的检查,如果你vhost得到正确的设置ServerName

+0

POODLE在2011年并不存在。我们知道填充错误早在2005年就已存在,但大多数人选择忽略它。浏览器是问题的一部分,因为它们保持SSLv3很长时间。请参阅Loren Weith的[SSLv2,SSLv3和TLS之间的差异](http://www.yaksman.org/~lweith/ssl.pdf)。 – jww 2015-05-21 21:18:27

0

我对OS X这个问题上使用某些HTTPS服务器酿造,brew在内部使用卷曲。请注意,这仅在OS X 10.7.5上存在,该版本卡住了OpenSSL/0.9.8r。我会升级,但苹果不支持这个iMac> 10.7!

我的修复是卷曲与酿造,其跌宕的版本升级到1.0.2f,幸运的是BREW安装卷曲的不

brew install curl