PHP-curl无法获得本地颁发者证书

时间:2017-10-05 08:47:31

标签: php ssl curl

我收到经典的php curl错误“无法获得本地颁发者证书”。 以下是curl调试的更多信息:

  

尝试133.7.42.21 ...

     

TCP_NODELAY设置

     

连接到example.adress.com(133.7.42.21)端口443(#0)

     
      
  • ALPN,提供http / 1.1
  •   
  • 密码选择:ALL:!导出:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
  •   
  • 成功设置证书验证位置:
  •   
  • CAfile:C:\ some_absolute_path \ cacert.pem
  •   
  • CApath:无
  •   
  • SSL证书问题:无法获得本地颁发者证书

         

    Curl_http_done:调用premature == 1 \ n *关闭连接0 \ n

  •   

正如您所见,我试图使用Mozilla.中的“cacert.pem”文件 我尝试了所有这些,但没有一个工作。

PHP代码:

        $curl = curl_init($location);
        //set verifier from interface host
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);

        //set host global certificate
        curl_setopt($curl, CURLOPT_CAINFO, $globla_cert);

        //set certificate
        curl_setopt($curl, CURLOPT_SSLCERT, $ssl_cert);
        //set private key
        curl_setopt($curl, CURLOPT_SSLKEY, $ssl_cert_key);
        //set private key password
        curl_setopt($curl, CURLOPT_SSLKEYPASSWD, $ssl_cert_password);

        //set curl debug output
        curl_setopt($curl, CURLOPT_VERBOSE, true);
        $verbose = fopen('php://temp', 'w+');
        curl_setopt($curl, CURLOPT_STDERR, $verbose);
        //curl_setopt($curl, CURLINFO_HEADER_OUT, true);
        //set ssl version
        curl_setopt($curl, CURLOPT_SSLVERSION, 6);


        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($curl, CURLOPT_POST, TRUE);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
        curl_setopt($curl, CURLOPT_HEADER, FALSE);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
        curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT_MS, $connecttimeout);
        $response = curl_exec($curl);

当我停用CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST时,它将在没有全局证书的情况下工作,但这是 NOGO

我目前正在使用XAMPP和PHP版本7.0.15。 Apache已启用mod_ssl。 PHP启用了openssl和curl扩展。

我尝试的事情:

  • 设置php.ini中的路径:

    openssl.cainfo= "C:\some_absolute_path\cacert.pem" openssl.cafile= "C:\some_absolute_path\cacert.pem"

  • 将证书放在var_dump(openssl_get_cert_locations());的默认路径中 那对我来说是“C:\ openssl-1.0.2j-win32 \ ssl”。

  • 将证书放入“C:\ xampp \ php”

现在我找不到任何可以尝试的“修复”,有人知道它可能是什么吗?

1 个答案:

答案 0 :(得分:0)

问题得到解决。

这不是一个技术问题。我收到的服务证书不再有效,新证书不在" cacert.pem"来自Mozilla,就像旧的一样。