Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复PHP错误:无法获取本地颁发者证书?_Php_Ssl_Curl_Xampp_Certificate - Fatal编程技术网

如何修复PHP错误:无法获取本地颁发者证书?

如何修复PHP错误:无法获取本地颁发者证书?,php,ssl,curl,xampp,certificate,Php,Ssl,Curl,Xampp,Certificate,这是我的环境设置: Mac OS Sierra (10.12.2) XAMPP 5.6.23 PHP 5.6.23 我使用的是XAMPP附带的PHP版本: $ which php /Applications/XAMPP/bin/php $ php -v PHP 5.6.23 (cli) (built: Jun 24 2016 09:25:00) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 199

这是我的环境设置:

Mac OS Sierra (10.12.2)
XAMPP 5.6.23
PHP 5.6.23
我使用的是XAMPP附带的PHP版本:

$ which php
/Applications/XAMPP/bin/php
$ php -v
PHP 5.6.23 (cli) (built: Jun 24 2016 09:25:00)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
这是我的PHP代码:

  $postData = array('FORM_DATA' => 'data');
  $curl = curl_init();
  curl_setopt_array($curl, array(
      CURLOPT_URL => 'https://testhub.banregio.com/adq',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POST => true,
      CURLOPT_POSTFIELDS => $postData,
      CURLOPT_FOLLOWLOCATION => true
  ));

  $response = curl_exec($curl);
  $err = curl_error($curl);
  echo $response;
  echo $err;
  curl_close($curl);
我已经在
php.ini
文件中添加了以下行,当然,我还从以下站点下载了
cacert.pem
文件:

我的php.ini文件位于:

$ php --ini
Configuration File (php.ini) Path: /Applications/XAMPP/xamppfiles/etc
Loaded Configuration File:         /Applications/XAMPP/xamppfiles/etc/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)
不起作用。我无法将
CURLOPT\u SSL\u VERIFYPEER
设置为
false

接下来,我在上面的代码中为
cURL
添加了以下选项:

CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_CAINFO => '/path/to/my/exported/certificate.crt'
该网站具有以下证书:

当然,我必须从钥匙链访问导出它:

钥匙链访问可以导出
*.pem
*.cer
证书。我两个都试过了。实际上,我将
*.cer
证书重命名为
*.crt


也不起作用。

在本地,您可以简单地禁用SSL(请不要在生产服务器上尝试此操作。)


我不能使用这些选项。这通常是服务器没有在TLS握手中提供其中间证书的症状。使用Python请求甚至Postman都有效。这不是特别与PHP有关吗?请确认这些都没有帮助。如果指定正在使用的ssl库,可能会有所帮助。找到解决方案了吗?对你做了什么请帮忙
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_CAINFO => '/path/to/my/exported/certificate.crt'
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);