2016-02-25 21 views
13

Desidero raccogliere un elenco di video caricati su un canale specifico utilizzando l'API dei dati di YouTube. Tuttavia, prima di implementare online sto cercando di far funzionare il mio codice su un ambiente offline (WAMPserver, PHP 5.5.12, Apache 2.4.9). Sto usando il seguente codice:errore CURL 60: prblm certificato SSL: impossibile ottenere il certificato emittente locale

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

Tuttavia dà il seguente errore:

Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException' with message 'cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)'

Ho provato ad aggiungere l'ultima versione di cacert.pem come la maggior parte gli argomenti su SO offrire come soluzione, tuttavia a nessuno inutilmente.

+1

Dato che ci si trova in un ambiente di sviluppo, perché non basta impostare '$ client-> setDefaultOption ('verify', false);' in modo che non tenti di eseguire la verifica? Ovviamente sul server live non sarà un problema dato che il server live avrà un certificato corretto (presumibilmente) – Ohgodwhy

+1

@Ohgodwhy ovviamente, sono stato scoraggiato da tutti i commenti del thread di sicurezza ovunque, ma questo è un non-problema. Grazie! –

+0

@Ohgodwhy Ricevo un errore: 'Chiama al metodo non definito Google_Client :: setDefaultOption()' qualche idea sul perché? –

risposta

56

Se si è su Windows xampp. Sto rubando una risposta migliore da here, sarebbe utile se Google ti mostrasse questa domanda prima.

  1. scaricare ed estrarre per cacert.pem qui (un file in formato/dati puliti)

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

  2. mise in:

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

  3. aggiungere questa linea al vostro php. ini

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

  4. ripartire il server web/apache

+0

questo funziona in un altro esempio :( – Kabkee

+1

funziona come un fascino – vishwakarma09

+0

Questa è una soluzione molto valida nel caso in cui Guzzle è stato chiamato da altre librerie PHP come API di Google e non posso cambiare quel codice. Correggere usando questo metodo funziona molto bene – vee

0

PCI-DSS 3.1 richiede tutto SSL solo per TLS 1.2, quindi molti provider stanno semplicemente disattivando tutto tranne TLS 1.2. Mi sono imbattuto in questo tipo di problema in cui CURL ha visto l'errore di downgrade degli handshake come errore di verifica del certificato SSL. Prova a trovare dove il vostro codice sta facendo la chiamata CURL e aggiungere questa linea (assicuratevi di sostituire $ch con qualunque CURL gestire il codice utilizza)

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

come faccio a trovare il manico CURL utilizzato dal mio codice? Corro localmente con un server WAMP –

+0

è curl_init() in modo corretto? L'impostazione di SSLVERSION su 6 non risolve il problema. Anche l'impostazione di SSL_VERIFYPEER su false non funziona. –

+0

Ci sarà una riga nel tuo codice usando 'curl_init();' per inizializzare la richiesta CURL. Se l'impostazione di TLS 1.2 non funziona, non sono sicuro di cos'altro potrebbe essere sbagliato. – Machavity

22

Vedendo Sto usando un ambiente locale è possibile disattivare in modo sicuro SSL, che i ha fatto usando la seguente:

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

Dove è la mia $client Google_Client().

+0

Sì, soluzione rapida per test locali. Grazie per avermi salvato ore! :-) –

+0

Grazie, mi ha aiutato molto !!! –

+0

questo funziona in un esempio. – Kabkee

-2
$guzzleClient = new \GuzzleHttp\Client(['verify' => false]); 
+0

Questo sembra essere identico al codice in [la risposta] (https://stackoverflow.com/a/40623254/1575353) di lijnma ... non sembra aggiungere altro oltre ... –

0

per l'essenza di sviluppo e test , Hai due opzioni per una soluzione rapida

  1. Use
$client = new GuzzleHttp\Client(); 
$request = $client->request('GET',$url, ['verify' => false]); //where $url is your http address 
  1. follow @Pham Huy Anh answer's above then do this
$client = new GuzzleHttp\Client(); 
$request = $client->request('GET',$url, ['verify' => 'C:\xampp\php\extras\ssl\cacert.pem']); 

Speranza che aiuta qualcuno.

0

Io lavoro con xamp nulla del lavoro di cui sopra ha fatto per me
Ho provato questo e ha funzionato vendor open \ guzzlehttp \ guzzle \ src \ Handler \ CurlFactory.php

e cambiare d'obbligo se si

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

a questo

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

si tratta di una soluzione temporanea, se si upated questo file le modifiche saranno los t

Problemi correlati