PHP Curl 适用于本机库但不适用于 ZF2

PHP Curl works with native library but not with ZF2

我正在 PHP 5.3 上使用 TLS1.1 连接到远程服务器。

使用 Zend Framework 2 时出现错误:

$client = new Client('https://www.example.com/');  
$curlAdapter = new Client\Adapter\Curl();
$curlAdapter->setCurlOption(CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_1);
$client->setAdapter($curlAdapter);
$client->send();

结果:cURL 请求出错:SSL 连接错误

添加这个可以解决问题,但显然不够安全

$curlAdapter->setCurlOption(CURLOPT_SSL_VERIFYHOST, 2);
$curlAdapter->setCurlOption(CURLOPT_SSL_VERIFYPEER,false);

结果:有效

使用本机 PHP 命令发出请求工作正常:

$c = curl_init('https://www.example.com/');

$options = array(
    CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1_1,
);

curl_setopt_array ($c ,$options );
curl_exec($c);

Returns页面内容。

所以 PHP 有效,但 ZF2 无效,除非 VerifyPeer = false。有什么问题?

可能是因为你少了一个参数:

 CURLOPT_CAINFO => '/etc/ssl/certs/ca-bundle.pem' // replace with your cert.

您也可能使用不同的 php 配置(web / cli),这些配置指向不同的 ssl 证书位置。此处还提供了一些详细信息:Security consequences of disabling CURLOPT_SSL_VERIFYPEER (libcurl/openssl)