2014-11-03 38 views
3

我想连接使用PHP中的curl到Pronto Cycle Share(使用PHP 5.6.2)。此网站在浏览器和命令行卷曲中工作。根据SSL Labs,它只接受TLS 1.2。如何让PHP连接到TLSv1.2只有网站

在PHP中,使用curl(版本7.28.1)PHP未能协商并给了我Curl error: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

使用的file_get_contents,代码:

$ctx = stream_context_create([ 
'ssl' => [ 
    'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT 
    ], 
]); 
$html = file_get_contents($url, false, $ctx); 

返回:

Message: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure 

print_r(OPENSSL_VERSION_TEXT) OpenSSL 0.9.8r 2011年2月8日,所以这是相当古老的。我在Mac上使用MAMP PRO。

有什么办法可以使用简单的PHP方法连接到这个服务器?

+0

的可能的复制[TLS 1.2卷曲不工作(http://stackoverflow.com/questions/30145089/tls-1-2-not-working-in-curl) – miken32 2016-01-21 22:22:19

+0

根据为了回答这个问题,你的OpenSSL需要1.0.1或者更高才能支持TLS 1.2。 – miken32 2016-01-21 22:23:45

回答

1

您的cURL版本不支持TLS 1.2,您需要升级。

CURL_SSLVERSION_TLSv1_0(4),CURL_SSLVERSION_TLSv1_1(5)或CURL_SSLVERSION_TLSv1_2(6)只使用卷曲7.34或较新的PHP版本。

Source

+0

只引用用于定义特定版本的常量。 [CURL_SSLVERSION_TLSv1一直可用](http://curl.haxx.se/libcurl/c/CURLOPT_SSLVERSION.html),并指示TLS v 1.x – miken32 2016-01-21 22:24:40