如果我对运行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版本之间的某些不兼容。
知道如何解决这个问题吗?
答案 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