web-dev-qa-db-fra.com

erreur cURL 60: problème de certificat SSL: impossible d'obtenir le certificat de l'émetteur local

Je souhaite collecter une liste de vidéos téléchargées sur une chaîne spécifique à l'aide de l'API de données YouTube. Cependant, avant d'implémenter en ligne, j'essaie de faire fonctionner mon code dans un environnement hors ligne (WAMPserver, PHP 5.5.12, Apache 2.4.9). J'utilise 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);

Cependant, cela donne l'erreur suivante: 

Erreur fatale: exception non capturée 'GuzzleHttp\Exception\RequestException' avec le message 'erreur cURL 60: problème de certificat SSL: impossible d'obtenir le certificat de l'émetteur local (voir http://curl.haxx.se/libcurl/c/libcurl-errors.html)'

J'ai essayé d'ajouter la dernière version de cacert.pem car la plupart des sujets de SO sont une solution, mais en vain. 

21
Sjors Hijgenaar

Si vous êtes sur Windows xampp. Je vole une meilleure réponse de ici , serait utile si Google vous montre cette première question. 

  1. téléchargez et extrayez pour cacert.pem ici (un format de fichier propre)

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

    MISE À JOUR: https://curl.haxx.se/docs/caextract.html

  2. mettre dans : 

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

  3. Ajouter cette ligne à votre php.ini

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

  4. redémarrez votre serveur web/Apache

80
Phung D. An

Voyant que j'utilise un environnement local, je peux désactiver en toute sécurité SSL, ce que j'ai fait en utilisant les éléments suivants:

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

$client est mon Google_Client ().

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

Guzzle version 6

Vous pouvez vous référer à Guzzle Docs à

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

8
lijinma

Je travaille avec xamps rien de ce qui précède n'a fonctionné pour moi

Je l'ai essayé et ça marche

  1. ouvrir vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php

et changer cela

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

pour ça

$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

cela a également fonctionné pour moi en téléchargeant le certificat à partir du link https://Gist.github.com/VersatilityWerks/5719158/download puis sauvegardez-le dans C:\xampp\php\extras\ssl .__ puis éditez le fichier php.ini. Pour obtenir Php.ini rapidement, voyez la figure ci-dessous entrez la description de l'image ici

Puis, ARRETEZ et redémarrez votre Apache à nouveau. ça a bien fonctionné !!!

0
kimoduor

pour l'essentiel du développement et des tests, vous avez deux options pour une solution rapide

  1. Utilisation
$client = new GuzzleHttp\Client();
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address
  1. suivez la réponse de @Pham Huy Anh ci-dessus puis faites ceci
$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.

0
walecloud

PCI-DSS 3.1 requiert que tous les protocoles SSL ne concernent que TLS 1.2, de sorte que de nombreux fournisseurs désactivent simplement tout sauf TLS 1.2. J'ai rencontré ce type de problème où CURL considérait que l'échec de la rétrogradation de la poignée de main était un échec de la vérification du certificat SSL. Essayez de trouver où votre code effectue l'appel CURL et ajoutez cette ligne (assurez-vous de remplacer $ch par le type de CURL utilisé par votre code)

curl_setopt($ch, CURLOPT_SSLVERSION, 6);  // Force TLS 1.2
0
Machavity