it-swarm.com.de

cURL-Fehler 60: SSL-Zertifikat in Laravel 5.4

Voller Fehler

RequestException in CurlFactory.php line 187: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

Szenario

Bevor mich jemand auf diese beiden Antworten verweist: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer- Zertifikat

https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate/replies/52954

Ich habe sie schon angeschaut und deswegen bin ich hier,

Das Problem, das ich habe, ist, dass ich jetzt die cacert.pem-Datei habe, aber es macht keinen Sinn, wo ich sie ablegen soll. Die Antworten geben an, die Datei in meinem xampp-Verzeichnis abzulegen und meine php.ini-Datei zu ändern, aber ich verwende xampp für nichts. Ich benutze Laravel's Artisan Server, um mein Projekt auszuführen. Wenn xampp nicht verwendet wird, wo soll ich diese Datei ablegen und warum sollte eine akzeptierte Antwort sein, sie in meinem xampp-Verzeichnis abzulegen, das ich nicht verstehe

Meine genaue Frage

Wo platziere ich die cacert.pem-Datei, um diesen Fehler in laravel 5.4 zu stoppen?

10
Yasmin French

Ändern Sie niemals Dateien im Ordner vendor/. Je. Sie können und werden beim nächsten Composer-Update, das Sie ausführen, überschrieben.

Hier ist meine Lösung für WampServer

Ich verwende PHP 7.1.9 für meinen WampServer. Ändern Sie daher 7.1.9 im folgenden Beispiel in die Versionsnummer, die Sie gerade verwenden.

  1. Laden Sie diese Datei herunter: http://curl.haxx.se/ca/cacert.pem
  2. Legen Sie diese Datei im Ordner C:\wamp64\bin\php\php7.1.9 ab
  3. php.ini öffnen und diese Zeile finden:

;curl.cainfo

Ändern Sie es in:

curl.cainfo = "C:\wamp64\bin\php\php7.1.9\cacert.pem"

Entfernen Sie unbedingt das Semikolon am Anfang der Zeile.

Speichern Sie die Änderungen in php.ini, starten Sie WampServer neu und Sie können loslegen!

42
kjdion84

Dies war stressig, um herauszufinden, aber hier ist die genaue Antwort für Menschen, die Laravel verwenden und dieses Problem haben.

Meine genauen Anwendungsversionen sind ...

Laravel: 5.4

Leitfaden: 6.2

Laravel Socialite: 3,0

Laden Sie eine neue Kopie dieses Curl-Zertifikats von diesem Link herunter: https://Gist.github.com/VersatilityWerks/5719158/download

Speichern Sie die Datei in diesem Pfad ab der Basiswurzel Ihrer Laravel-Anwendung vendor/guzzlehttp/guzzle/src/cacert.pem 

Öffnen Sie dann in demselben Verzeichnis RequestOptions.php und scrollen Sie zur Konstante CERT, und ändern Sie sie in const CERT = 'cacert.pem';, und dies sollte alles beheben.

EDIT

Wie die Leute darauf hinweisen, sollten Sie niemals den Herstellerordner bearbeiten. Dies war nur eine schnelle Lösung für eine Anwendung, die ich in meiner Freizeit erstellt habe. Es war nicht so wichtig wie eine Bewerbung für mein Unternehmen oder irgendetwas. Verwenden Sie diese Methode auf eigenes Risiko! Bitte überprüfen Sie die Antworten unten

6
Yasmin French

Eine schnelle Lösung, aber unsicher (nicht empfohlen).

CURL verwenden:

Setzen Sie CURLOPT_SSL_VERIYPEER auf false

Verwenden von Guzzle:

Stellen Sie Verify auf false ein

beispiel $ client-> request ('GET', ' https://somewebsite.com ', ['verify' => false])

2
Jeffrey

Ein anderer hat kürzlich nach demselben Problem gefragt und es scheint, als wäre meine Antwort die Lösung für ihn .. Hier war der Beitrag, den ich erwähne: URL Post

Das ist, was ich gesagt habe :

Ich bin absolut ehrlich, ich weiß nichts über Laravel. Aber ich hatte das gleiche Problem, so wie viele andere auch, auf Symfony. Und so wie Sie es versucht haben viele Dinge ohne Erfolg. 

Schließlich hat diese Lösung für mich funktioniert: URL-Lösung

Es zeigt an, dass anstelle von Zertifikatproblem es kommen konnte aus einer -Umweltkompatibilität. Ich habe XAMPP anstelle von .__ verwendet. WAMP und es hat funktioniert.

0
Doshibu
  • Die von einigen Benutzern vorgeschlagene Lösung, um Änderungen an der \vendor\guzzlehttp\guzzle\src\Client.php-Datei vorzunehmen, ist der schlechteste Hinweis, da manuelle Änderungen am Herstellerordner überschrieben werden, wenn Sie den Befehl composer update ausführen.
  • Von Jeffrey vorgeschlagene Lösung ist ein fehlerhafter Kurzbefehl, der jedoch nicht für Produktionsanwendungen empfohlen wird.
  • Die von kjdion84 vorgeschlagene Lösung ist perfekt, wenn Sie auf die php.ini-Datei auf dem Webserver zugreifen können. Falls Sie Shared Hosting verwenden, kann die php.ini-Datei möglicherweise nicht bearbeitet werden.

Wenn Sie keinen Zugriff auf php.ini-Datei haben (z. B. Shared Hosting)

  1. Laden Sie diese Datei herunter: http://curl.haxx.se/ca/cacert.pem
  2. Legen Sie diese Datei im Stammverzeichnis Ihres Laravel-Projekts ab.
  3. Fügen Sie den verify-Schlüssel zu GuzzleHttp\Client-Konstruktor hinzu, dessen Wert als Pfad zur cacert.pem-Datei steht.

Mit Laravel 5.7 und GuzzleHttp 6.0

// https://example.com/v1/current.json?key1=value1&key2=value2

$guzzleClient = new GuzzleHttp\Client([
    'base_uri' => 'https://example.com',
    'verify' => base_path('cacert.pem'),
]);

$response = $guzzleClient->get('v1/current.json', [
    'query' => [
        'key1' => 'value1',
        'key2' => 'value2',
    ]
]);

$response = json_decode($response->getBody()->getContents(), true);
0
Hamza Rashid

Ich hatte dieses Problem beim Ausführen von Valet und beim Versuch, eine API von einer Site in Valet zu einer anderen zu erstellen. Beachten Sie, dass ich in OSX arbeite. Ich habe die Lösung hier gefunden: https://github.com/laravel/valet/issues/46 Kurz gesagt, Sie müssen den Valet-Pem in das System-CA-Bundle kopieren. Führen Sie einfach Folgendes aus:

cp /usr/local/etc/openssl/cert.pem /usr/local/etc/openssl/cert.pem.bak && cat ~/.config/valet/CA/LaravelValetCASelfSigned.pem >> /usr/local/etc/openssl/cert.pem
0
omarjebari