it-swarm.com.ru

ошибка 60 cURL: проблема с сертификатом SSL: невозможно получить сертификат локального эмитента

Я хочу собрать список видео, загруженных на определенный канал, используя API данных YouTube. Однако перед реализацией в сети я пытаюсь запустить мой код в автономной среде (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 предлагают в качестве решения, но безрезультатно. 

21
Sjors Hijgenaar

Если вы находитесь на Windows XAMPP. Я краду лучший ответ от здесь , было бы полезно, если Google покажет вам этот вопрос 1-й. 

  1. скачайте и распакуйте cacert.pem здесь (чистый формат файла/данные)

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

    ОБНОВЛЕНИЕ: 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

80
Phung D. An

Видя, что я использую локальную среду, я могу безопасно отключить SSL, что я сделал, используя следующее:

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

Где $client - это мой Google_Client ().

25
Sjors Hijgenaar
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);

Жрут версия 6

Вы можете сослаться на Документы Guzzle на

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

8
lijinma

Я работаю с 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;

это временное решение, если вы обновили этот файл, изменения будут потеряны

4
Abdalla Mohamed Aly Ibrahim

это также работало для меня, загружая свидетельство от link https://Gist.github.com/VersatilityWerks/5719158/download затем сохраните его в C:\xampp\php\extras\ssl затем отредактируйте php.ini. Чтобы быстро получить Php.ini, см. Рисунок ниже введите описание изображения здесь

Затем остановитесь и перезапустите ваш Apache снова. это сработало хорошо !!!

0
kimoduor

для сущности разработки и тестирования, у вас есть два варианта быстрого исправления

  1. Использование
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address
  1. следуйте @Pham Huy Anh ответ выше, затем сделайте это
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => 'C:\xampp\php\extras\ssl\cacert.pem']);

Надеюсь, это поможет кому-то.

0
walecloud

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
0
Machavity