php youtube-api wamp youtube-data-api

php - error 60 de cURL: Prblm del certificado SSL: no se puede obtener el certificado del emisor local



youtube-api wamp (8)

Esta pregunta ya tiene una respuesta aquí:

Quiero recopilar una lista de videos cargados en un canal específico utilizando la API de datos de YouTube. Sin embargo, antes de implementar en línea estoy intentando que mi código se ejecute en un entorno sin conexión (WAMPserver, PHP 5.5.12, Apache 2.4.9). Estoy usando el siguiente código:

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);

Sin embargo, da el siguiente error:

Error grave: excepción no detectada ''GuzzleHttp / Exception / RequestException'' con mensaje ''cURL error 60: Problema de certificado SSL: no se puede obtener el certificado del emisor local (consulte http://curl.haxx.se/libcurl/c/libcurl-errors.html ) ''

He intentado agregar la última versión de cacert.pem ya que la mayoría de los temas sobre SO ofrecen una solución, pero no ha servido de nada.


Al ver que estoy usando un entorno local, puedo deshabilitar de forma segura SSL, lo que hice usando lo siguiente:

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

Donde $client es mi Google_Client ().


PCI-DSS 3.1 requiere que todos los SSL sean solo TLS 1.2, por lo que muchos proveedores simplemente están desactivando todo menos TLS 1.2. Me encontré con este tipo de problema en el que CURL vio que la falla de degradación de los handshakes era una falla para verificar el certificado SSL. Intente encontrar dónde está haciendo su código la llamada CURL y agregue esta línea (asegúrese de reemplazar $ch con cualquier cosa que CURL maneje).

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


Para la esencia del desarrollo y las pruebas, tiene dos opciones para una solución rápida.

  1. Utilizar

$client = new GuzzleHttp/Client(); $request = $client->request(''GET'',$url, [''verify'' => false]); //where $url is your http address

  1. siga la respuesta de @Pham Huy Anh que se encuentra arriba y luego haga esto

$client = new GuzzleHttp/Client(); $request = $client->request(''GET'',$url, [''verify'' => ''C:/xampp/php/extras/ssl/cacert.pem'']);

Espero que ayude a alguien.


Si estás en windows xampp. Estoy robando una mejor respuesta desde here , sería útil si Google le muestra esta pregunta primero.

  1. descargue y extraiga aquí para cacert.pem (un formato de archivo / datos limpios)

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

    ACTUALIZACIÓN: https://curl.haxx.se/docs/caextract.html

  2. ponlo adentro :

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

  3. Añade esta linea a tu php.ini

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

  4. reinicie su servidor web / apache



Yo trabajo con xamps, nada de lo anterior funcionó para mí

Probé esto y funcionó

  1. vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php abierto vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php

y cambia esto

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

a esto

$conf[CURLOPT_SSL_VERIFYHOST] = 0; $conf[CURLOPT_SSL_VERIFYPEER] = FALSE;

Es una solución temporal si actualiza este archivo, los cambios se perderán.


$guzzleClient = new /GuzzleHttp/Client([''verify'' => false]);