cURL error 60: SSL-сертификат prblm: невозможно получить сертификат локального эмитента
Я хочу собрать список видео, загруженных по определенному каналу, используя 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 предлагают в качестве решения, однако безрезультатно.
Ответы
Ответ 1
Если вы работаете в Windows и используете Xampp, я украду лучший ответ из здесь, было бы полезно, если бы Google сначала показал вам этот вопрос.
Загрузите и извлеките файл cacert.pem здесь (чистый формат файла/данные)
https://curl.haxx.se/docs/caextract.html
Поместите это в:
C:\xampp\php\extras\ssl\cacert.pem
Добавьте эту строку в ваш php.ini
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
перезагрузите ваш веб-сервер/Apache
Ответ 2
Видя, что я использую локальную среду, я могу безопасно отключить SSL, который я использовал, используя следующее:
$guzzleClient = new \GuzzleHttp\Client(array( 'curl' => array( CURLOPT_SSL_VERIFYPEER => false, ), ));
$client->setHttpClient($guzzleClient);
Где $client
- мой Google_Client().
Ответ 3
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);
Guzzle версия 6
Вы можете сослаться на документы Guzzle Docs на
http://docs.guzzlephp.org/en/latest/request-options.html#verify
Ответ 4
Я работаю с xamps. Ничто из вышеперечисленного не помогло мне
Я попробовал это, и это сработало
- открыть
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;
это временное решение, если вы обновили этот файл, изменения будут потеряны
Ответ 5
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
Ответ 6
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);
Ответ 7
для сущности разработки и тестирования, у вас есть два варианта быстрого решения
- использование
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address
- следуйте @Pham Huy Anh ответ выше, тогда сделайте это
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => 'C:\xampp\php\extras\ssl\cacert.pem']);
Надеюсь, это поможет кому-то.
Ответ 8
он также работал для меня, загрузив сертификат по ссылке https://gist.github.com/VersatilityWerks/5719158/download, затем сохраните его в C:\xampp\php\extras\ssl, затем отредактируйте php.ini. Чтобы получить Php.ini быстро, см. Рисунок ниже, введите описание изображения здесь
Затем STOP и снова запустите свой apache. он работал хорошо !!!