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.
- Utilizar
$client = new GuzzleHttp/Client();
$request = $client->request(''GET'',$url, [''verify'' => false]); //where $url is your http address
- 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.
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
ponlo adentro :
C: / xampp / php / extras / ssl / cacert.pem
Añade esta linea a tu php.ini
curl.cainfo = "C: / xampp / php / extras / ssl / cacert.pem"
reinicie su servidor web / apache
También me funcionó descargando el certificado desde el enlace https://gist.github.com/VersatilityWerks/5719158/download luego guárdelo en C: / xampp / php / extras / ssl y luego edite php.ini. Para obtener Php.ini, vea rápidamente la figura a continuación, ingrese la descripción de la imagen aquí
Luego PARE y reinicie su apache de nuevo. funcionó bien !!!
Yo trabajo con xamps, nada de lo anterior funcionó para mí
Probé esto y funcionó
-
vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php
abiertovendor/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]);
$guzzleClient = new /GuzzleHttp/Client([''verify'' => false]);
Guzzle version 6
Podría referirse a Guzzle Docs en
http://docs.guzzlephp.org/en/latest/request-options.html#verify