cURL error 60: certificat SSL prblm: impossible d'obtenir un certificat d'émetteur local [dupliquer]
Cette question a déjà une réponse ici:
- cURL erreur 60: certificat SSL: impossible d'obtenir locales certificat de l'émetteur 16 réponses
je veux recueillir une liste de vidéos téléchargées sur un canal spécifique en utilisant L'API de données YouTube. Cependant, avant de mettre en œuvre en ligne j'essaie de faire fonctionner mon code sur un environnement hors ligne (WAMPserver, PHP 5.5.12, Apache 2.4.9). Je suis en utilisant le code suivant:
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);
Toutefois, il donne l'erreur suivante:
Fatal error: Uncaught exception 'GuzzleHttpExceptionRequestException' with message 'erreur cURL 60: certificat SSL problème: impossible d'obtenir locales certificat de l'émetteur (voir la section
http://curl.haxx.se/libcurl/c/libcurl-errors.html
)'
j'ai essayé d'ajouter la dernière version de <!-Comme la plupart des sujets sur ainsi offrent une solution, cependant en vain.
8 réponses
Si vous êtes sur windows xampp. Je suis voler une meilleure réponse de ici, serait utile si Google vous montrer cette question 1er.
télécharger et extraire pour cacert.pem ici (propre format de fichier/données)
mettre dans :
C:\xampp\php\extras\ssl\cacert.pem
ajouter cette ligne à votre php.ini
curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"!--3-->
redémarrez votre serveur web / apache
voyant que j'utilise un environnement local, je peux désactiver SSL en toute sécurité, ce que j'ai fait en utilisant ce qui suit:
$guzzleClient = new \GuzzleHttp\Client(array( 'curl' => array( CURLOPT_SSL_VERIFYPEER => false, ), ));
$client->setHttpClient($guzzleClient);
Où $client
est mon Google_Client ().
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);
Bouffer la version 6
Vous pouvez vous référer à Guzzle Docs à
http://docs.guzzlephp.org/en/latest/request-options.html#verify
je travail avec xamps rien de ce qui précède n'a fonctionné pour moi
j'ai essayé et cela a fonctionné
- ouvrir
vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php
et modifier ce
$conf[CURLOPT_SSL_VERIFYHOST] = 2;
$conf[CURLOPT_SSL_VERIFYPEER] = true;
de cette
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
c'est une solution temporaire si vous avez mis à jour ce fichier les modifications seront perdues
PCI-DSS 3.1 exige que tous les SSL à seulement TLS 1.2 donc beaucoup de fournisseurs sont tout simplement tout désactiver sauf TLS 1.2. Je suis tombé sur ce type de problème où CURL a vu le défaut de déclassement des poignées de main comme un défaut de vérifier le certificat SSL. Essayez de trouver où votre code fait L'appel CURL et ajoutez cette ligne (assurez-vous de remplacer $ch
avec tout ce que CURL gérer votre code utilise)
curl_setopt($ch, CURLOPT_SSLVERSION, 6); // Force TLS 1.2
pour l'essence du développement et de l'essai, vous avez deux options à une solution rapide
- Utiliser
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address
- suivez @Pham Huy Anh réponse est au-dessus de l'
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => 'C:\xampp\php\extras\ssl\cacert.pem']);
j'Espère que ça aide quelqu'un.
il a également fonctionné pour moi en téléchargeant le cert à partir de la lien https://gist.github.com/VersatilityWerks/5719158/download puis garde ça pour toi. C:\xampp\php\extras\ssl puis éditer php.ini. Pour obtenir de Php.ini voir rapidement la figure ci-dessous entrez la description de l'image ici
puis arrêtez et redémarrez votre apache à nouveau. il a bien fonctionné !!!
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]);