cURL 错误 60:SSL 证书 prblm:无法获取本地颁发者证书


cURL error 60: SSL certificate prblm: unable to get local issuer certificate

我想使用 YouTube 数据 API 收集在特定频道上传的视频列表。但是,在实现在线之前,我正在尝试让我的代码在离线环境(WAMPserver,PHP 5.5.12,Apache 2.4.9)上运行。我正在使用以下代码:

require_once 'google-api-php-client-2.0.0-RC5/vendor/autoload.php';
$client = new Google_Client();
$client->setApplicationName("SRC_Thor");
$client->setDeveloperKey("xxxxxxxxxxx");
$youtube = new Google_Service_YouTube($client);
$channelResponse = $youtube->channels->listChannels('contentDetails', []);
var_dump($channelResponse);

但是,它给出了以下错误:

致命错误:未捕获的异常"GuzzleHttp''Exception''RequestException",消息为"cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书(请参阅http://curl.haxx.se/libcurl/c/libcurl-errors.html)"

我尝试添加最新版本的cacert.pem,因为SO上的大多数主题都作为解决方案提供,但无济于事。

如果你在使用Xampp的Windows上,我从这里窃取了一个更好的答案,如果谷歌先向你展示这个问题会很有帮助。

  1. 在此处下载并提取cacert.pem(干净的文件格式/数据)

    https://curl.haxx.se/docs/caextract.html

  2. 把它放在:

    C:''xampp''php''extras''ssl''cacert.pem

  3. 将此行添加到您的 php 中.ini

    curl.cainfo = "C:''xampp''php''extras''ssl''cacert.pem"

  4. 重新启动您的网络服务器/Apache

看到我使用的是本地环境,我可以安全地禁用SSL,我使用以下方法执行此操作:

$guzzleClient = new 'GuzzleHttp'Client(array( 'curl' => array( CURLOPT_SSL_VERIFYPEER => false, ), ));
$client->setHttpClient($guzzleClient);

$client在哪里是我的Google_Client()。

$guzzleClient = new 'GuzzleHttp'Client(['verify' => false]);
咕噜

咕噜版本6

您可以参考Guzzle Docs

http://docs.guzzlephp.org/en/latest/request-options.html#verify

我使用 xamps 以上任何内容都对我不起作用

我试过这个,它有效

  1. 打开vendor'guzzlehttp'guzzle'src'Handler'CurlFactory.php

并改变这一点

$conf[CURLOPT_SSL_VERIFYHOST] = 2;
$conf[CURLOPT_SSL_VERIFYPEER] = true;

对此

$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;

这是一个临时解决方案,如果您更新了此文件,更改将丢失

对于开发和测试的本质,您有两种快速修复选项

$client = new GuzzleHttp'Client();
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address
  1. 按照上面的@Pham惠英的答案然后这样做
$client = new GuzzleHttp'Client();
$request = $client->request('GET',$url, ['verify' => 'C:'xampp'php'extras'ssl'cacert.pem']);

希望它对某人有所帮助。

PCI-DSS 3.1要求所有SSL只使用TLS 1.2,因此许多提供商只是关闭了除TLS 1.2之外的所有内容。我遇到了这种类型的问题,CURL 将降级握手失败视为验证 SSL 证书失败。尝试查找代码执行 CURL 调用的位置并添加此行(确保将$ch替换为代码使用的任何 CURL 句柄)

curl_setopt($ch, CURLOPT_SSLVERSION, 6);  // Force TLS 1.2
它也

通过从 链接 https://gist.github.com/VersatilityWerks/5719158/download然后将其保存在 C:''xampp''php''extras''ssl 中然后编辑 php.ini。要获取 Php.ini请快速查看下图在此处输入图像描述

然后停止并重新启动您的 apache。 它工作得很好!!

$guzzleClient = new 'GuzzleHttp'Client(['verify' => false]);