php - 如何修复 PHP 错误 : Unable to get local issuer 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) 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 文件中添加了以下行,当然,我还从 https://curl.haxx.se/ca/cacert.pem 下载了 cacert.pem 文件。 :

curl.cainfo=/Applications/XAMPP/xamppfiles/etc/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_SSL_VERIFYPEER 设置为 false

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

CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_CAINFO => '/path/to/my/exported/certificate.crt'

该网站有以下证书:

enter image description here

当然,我必须从 Keychain Access 导出它:

enter image description here

Keychain Access 可以导出*.pem*.cer 证书。我试过两者。实际上,我将*.cer 证书重命名为*.crt

也没用。

最佳答案

在本地你可以简单地禁用 SSL(请不要在生产服务器上尝试这个。)

curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);

关于php - 如何修复 PHP 错误 : Unable to get local issuer certificate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41757556/

相关文章:

php - 有什么方法可以将 Highcharts 与 mPDF 转换器一起使用?

javascript - 使用 AJAX 发布数组时没有表单数据

php - file_get_contents() 连接超时问题

node.js - 如何使用 Nginx 在 MEAN 堆栈应用程序上正确设置 HTTPS/SSL

c - POSTFIELD 应该是什么样子的?

php - 将数据库中的用户计数到相同的用户级别

http - SSL/TLS 调试 : How to view messaging until encryption keys are exchanged?

ssl - 如何在 erlang 的 http 客户端(httpc)中禁用 SSL 对等验证

bash - 如何在具有多个参数的 bash curl 命令中使用 --data-binary

curl - 从 Graylog 中删除特定日志消息