【问题标题】:PHP- curl unable to get local issuer certificatePHP- curl 无法获取本地颁发者证书
【发布时间】:2018-03-16 19:47:30
【问题描述】:

我收到经典的 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
  • 成功设置证书验证位置:
  • CA 文件:C:\some_absolute_path\cacert.pem
  • CApath:无
  • SSL 证书问题:无法获取本地颁发者证书

    Curl_http_done: 过早调用 == 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”

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

【问题讨论】:

标签: php ssl curl


【解决方案1】:

问题已解决。

这不是技术问题。我收到的服务证书不再有效,并且新证书不像旧证书那样位于 Mozilla 的“cacert.pem”中。

猜你喜欢
  • 2019-09-03
  • 2013-03-20
  • 2016-04-20
  • 2017-09-17
  • 2018-05-06
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多