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

Sjo*_*aar 29 php wamp youtube-api youtube-data-api

我想使用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);
Run Code Online (Sandbox Code Playgroud)

但是它会出现以下错误:

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

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

Phu*_* An 92

如果你在Windows xampp上.我从这里窃取了更好的答案,如果谷歌向您显示第一个问题,将会有所帮助.

  1. 在这里下载并解压缩cacert.pem(一个干净的文件格式/数据)

    https://gist.github.com/VersatilityWerks/5719158/download

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

  2. 把它放进去 :

    C:\ XAMPP\PHP \演员\ SSL\cacert.pem

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

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

  4. 重启你的webserver/apache

  • 而如果你使用的是Wamp,则需要修改phpForApache.ini (3认同)
  • 我用的是wamp服务器。`C:\wamp64\bin\php\php7.4.4\phpForApache.ini` 。重新启动电脑对我有用。谢谢。 (3认同)

Sjo*_*aar 27

看到我正在使用本地环境,我可以安全地禁用SSL,我使用以下方法:

$guzzleClient = new \GuzzleHttp\Client(array( 'curl' => array( CURLOPT_SSL_VERIFYPEER => false, ), ));
$client->setHttpClient($guzzleClient);
Run Code Online (Sandbox Code Playgroud)

$client我的Google_Client()在哪里?


lij*_*nma 13

$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);
Run Code Online (Sandbox Code Playgroud)

Guzzle版本6

你可以参考Guzzle Docs

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


Abd*_*him 6

我与xamps合作,以上都不对我有用

我尝试了这个并且有效

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

并改变这个

$conf[CURLOPT_SSL_VERIFYHOST] = 2;
$conf[CURLOPT_SSL_VERIFYPEER] = true;
Run Code Online (Sandbox Code Playgroud)

对此

$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
Run Code Online (Sandbox Code Playgroud)

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

  • 同样,这是一个临时解决方案。我们如何从代码中传递参数,以便它到达那里并禁用该参数? (2认同)

小智 5

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

  1. 使用
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address
Run Code Online (Sandbox Code Playgroud)
  1. 按照上面@Pham Huy Anh 的回答然后执行此操作
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => 'C:\xampp\php\extras\ssl\cacert.pem']);
Run Code Online (Sandbox Code Playgroud)

希望它能帮助某人。