2016-10-04 5 views
0

Ich möchte diesen Fehler loswerden. Ich las eine similar question wo eine Antwort schlug vor, dass ich die Prüfung deaktivieren kann mit:cURL Fehler 60 während der Verwendung der GuzzleHttp

$client->setDefaultOption('verify', false); 

Mein genaue Fehler ist:

abgefangene Ausnahme 'GuzzleHttp \ Exception \ RequestException' mit der Meldung ‚cURL Fehler 60: Problem mit dem SSL-Zertifikat: Das Zertifikat des lokalen Ausstellers konnte nicht bezogen werden (siehe http://curl.haxx.se/libcurl/c/libcurl-errors.html) 'in C: \ Pfad \ guzzle \ src \ Handler \ CurlFactory.php: 187 Stack-Trace: # 0 C: \ Pfad \ guzzle \ src \ Handler \ CurlFactory. php (150): GuzzleHttp \ Handler \ CurlFactory :: createRejection (Objekt (GuzzleHttp \ Handler \ EasyHandle), Array) # 1

C: \ Pfad \ guzzle \ src \ Handler \ CurlFactory.php (103): GuzzleHttp \ Handler \ CurlFactory :: finishError (Objekt (GuzzleHttp \ Handler \ CurlHandler), Objekt (GuzzleHttp \ Handler \ EasyHandle), Objekt (GuzzleHttp \ Handler \ CurlFactory)) # 2

C: \ Pfad \ guzzle \ src \ Handler \ CurlHandler.php (43): GuzzleHttp \ Handler \ CurlFactory :: Finish (Object (GuzzleHttp \ Handler \ CurlHandler), Objekt (GuzzleHttp \ Handler \ EasyHandle), Objekt (GuzzleHttp \ Hand in C: \ Pfad \ guzzle \ src \ Handler \ CurlFactory.php on line 187

ich den Code aller dieser Zeilen zu lesen und es gibt keine Variable wie $client dort aber ich fand diese Funktion innerhalb CurlFactory.php. Bitte beachten Sie, dass die Datei CurlFactory.php nicht von mir erstellt wurde.

public function release(EasyHandle $easy) 
{ 
    $resource = $easy->handle; 
    unset($easy->handle); 

    if (count($this->handles) >= $this->maxHandles) { 
     curl_close($resource); 
    } else { 
     // Remove all callback functions as they can hold onto references 
     // and are not cleaned up by curl_reset. Using curl_setopt_array 
     // does not work for some reason, so removing each one 
     // individually. 
     curl_setopt($resource, CURLOPT_HEADERFUNCTION, null); 
     curl_setopt($resource, CURLOPT_READFUNCTION, null); 
     curl_setopt($resource, CURLOPT_WRITEFUNCTION, null); 
     curl_setopt($resource, CURLOPT_PROGRESSFUNCTION, null); 
     curl_reset($resource); 
     $this->handles[] = $resource; 
    } 
} 

Kann ich die Option zum Deaktivieren der Verifizierung hier einstellen?

Ich weiß, es ist keine gute Idee, die Überprüfung zu deaktivieren, aber der Code ist für den persönlichen Gebrauch und etwas zu testen. Es ist kein Problem, wenn ich die Überprüfung deaktiviere. Hier ist der Code in meiner eigentlichen PHP-Datei.

require('vendor/autoload.php'); 
use JonathanTorres\MediumSdk\Medium; 

$medium = new Medium('my-key'); 

$user = $medium->getAuthenticatedUser(); 
echo 'Authenticated user name is: ' . $user->name; 

Wie Sie sehen können, verwende ich cURL nirgends in meinem Code. Die Optionen müssen irgendwo in der Bibliothek eingestellt werden. Ist es möglich, die Verifizierung in meiner eigenen Datei zu deaktivieren, anstatt den Quellcode der Bibliothek zu ändern?

Antwort

1

Sie suchen wahrscheinlich nach der Option CURLOPT_SSL_VERIFYHOST. Wenn nicht angegeben, wird für diese Einstellung standardmäßig Option 2 verwendet. Dies bedeutet, dass die Verbindung fehlschlägt, wenn der Zertifikatsname nicht mit dem Namen des Servers übereinstimmt, mit dem eine Verbindung hergestellt wurde. Wenn Sie dies auf 0 setzen, wird der Hostname ignoriert und das Zertifikat wird unabhängig von der Namenskonfliktübereinstimmung akzeptiert. Normalerweise reicht dies aus, um Probleme mit selbstsignierten Zertifikaten zu beheben.

Option 1 ist eine Legacy-Option, die früher zum Debuggen verwendet wurde, aber veraltet ist und nicht verwendet werden sollte.

Dies könnte auch daran liegen, dass curl das Wurzelzertifikatbündel nicht finden kann. Sie können download the bundle from the curl site und es an einem Speicherort auf dem Server speichern, dann einen Verweis auf sie in der php.ini hinzufügen wie folgt: curl.cainfo = FOLDER_PATH \ cacert.pem

Es ist auch auf die Version von zusammenhängen könnte Guzzle, ich fand Hinweise darauf, dass dies ein Problem mit Guzzle versions later than 4 ist. Nicht sicher, ob das für Sie praktisch ist.

+0

Dank Barbecue.:) Ich habe versucht, diese Option zu setzen, indem ich sie unter anderen Optionen unterhalb von 'curl_reset ($ resource);' like this 'curl_setopt ($ resource, CURLOPT_SSL_VERIFYHOST, 0);' setze, aber der Fehler ist nicht verschwunden. –

+0

Ich weiß nicht, guzzle, aber die meisten Probleme mit dem Zertifikat mit curl werden entweder durch Deaktivieren der Hostverifizierung oder durch Installieren des Root-Zertifikatsbündels behoben. Wenn keine dieser Optionen hilft, ist es wahrscheinlich ein guzzelspezifisches Problem. . – barbecue

+0

Danke für den Link, der mir geholfen hat, das Problem zu lösen. :) –

Verwandte Themen