首页 文章

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

提问于
浏览
1

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

尝试133.7.42.21 ... TCP_NODELAY设置已连接到example.adress.com(133.7.42.21)端口443(#0)ALPN,提供http / 1.1密码选择:ALL:!EXPORT:!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

我目前正在使用PHP版本7.0.15的XAMPP . 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

    问题得到解决 .

    它不再有效,而且新证书不像旧版本那样Mozilla .

相关问题