代码之家  ›  专栏  ›  技术社区  ›  Steve E.

PHPCurl可以与本机库一起使用,但不能与ZF2一起使用

  •  1
  • Steve E.  · 技术社区  · 8 年前

    我正在使用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);
    

    返回页面内容。

    所以PHP可以工作,但ZF2不能工作,除非VerifyPeer=false。有什么问题?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Community Romance    7 年前

    这可能是因为您缺少一个参数:

     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)