Ich benutze XAMPP für die Entwicklung. Kürzlich habe ich meine Installation von xampp von einer alten Version auf 1.7.3 aktualisiert.
Wenn ich jetzt HTTPS-fähige Sites locke, erhalte ich die folgende Ausnahme
Schwerwiegender Fehler: Nicht erfasste Ausnahme 'RequestCore_Exception' mit der Meldung 'cURL resource: Resource id # 55; cURL-Fehler: Problem mit dem SSL-Zertifikat. Überprüfen Sie, ob das CA-Zertifikat in Ordnung ist. Details: Fehler: 14090086: SSL-Routinen: SSL3_GET_SERVER_CERTIFICATE: Zertifikatüberprüfung fehlgeschlagen (60) '
Jeder schlägt vor, bestimmte Curl-Optionen aus PHP-Code zu verwenden, um dieses Problem zu beheben. Ich denke, das sollte nicht der Weg sein. Weil ich mit meiner alten Version von XAMPP kein Problem hatte und dies erst nach der Installation der neuen Version geschah.
Ich benötige Hilfe, um herauszufinden, welche Einstellungen sich in meiner PHP-Installation ändern. Apache usw. kann dieses Problem beheben.
CURLOPT_SSL_VERIFYPEER
-> false). Sie fügen entweder das CA-Zertifikat der Site hinzu, mit der Sie SSL ausführen möchten, oder Sie deaktivieren die CA-Überprüfung. Dies sind die einzigen zwei verfügbaren Optionen.CURLOPT_SSL_VERIFYPEER
umfalse
den Zweck der Verwendung von SSL zu vereiteln.Es ist ein ziemlich häufiges Problem in Windows. Sie müssen nur Satz
cacert.pem
zucurl.cainfo
.Seit PHP 5.3.7 können Sie:
php.ini
- add curl.cainfo = "PATH_TO / cacert.pem"Andernfalls müssen Sie für jede cURL-Ressource Folgendes ausführen:
quelle
2.
, müssen Sie die Variable zwei separatenphp.ini
Dateien hinzufügen . Siehe stackoverflow.com/a/25706713/1101095Warnung: Dies kann zu Sicherheitsproblemen führen, vor denen SSL schützen soll, wodurch Ihre gesamte Codebasis unsicher wird. Es widerspricht jeder empfohlenen Praxis.
Aber eine wirklich einfache Lösung, die für mich funktioniert hat, war anzurufen:
vor dem Anruf:
in der PHP-Datei.
Ich glaube, dass dies die Überprüfung von SSL-Zertifikaten deaktiviert.
quelle
Quelle: http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html
Informationen zu allen oben genannten Informationen finden Sie unter: http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html
quelle
Die oben genannten Lösungen sind großartig, aber wenn Sie WampServer verwenden, funktioniert das Einstellen der
curl.cainfo
Variablen möglicherweisephp.ini
nicht.Ich fand schließlich heraus, dass WampServer zwei
php.ini
Dateien hat:Die erste wird anscheinend verwendet, wenn PHP-Dateien über einen Webbrowser aufgerufen werden, während die zweite verwendet wird, wenn ein Befehl über die Befehlszeile oder aufgerufen wird
shell_exec()
.TL; DR
Wenn Sie WampServer verwenden, müssen Sie die
curl.cainfo
Zeile zu beidenphp.ini
Dateien hinzufügen .quelle
Für die Liebe von allem, was heilig ist ...
In meinem Fall musste ich die
openssl.cafile
PHP-Konfigurationsvariable auf den PEM-Dateipfad setzen.Ich vertraue darauf, dass es sehr viele Systeme gibt, in denen die Einstellung
curl.cainfo
in der PHP-Konfiguration genau das ist, was benötigt wird, aber in der Umgebung, mit der ich arbeite, ist dies der Docker-Container eboraas / laravel , der Debian 8 (jessie) und PHP verwendet 5.6, das Setzen dieser Variablen hat den Trick nicht getan.Ich bemerkte, dass die Ausgabe von
php -i
nichts über diese bestimmte Konfigurationseinstellung erwähnte, aber es gab ein paar Zeilen darüberopenssl
. Es gibt sowohl eineopenssl.capath
als auch eineopenssl.cafile
Option, aber nur das Einstellen der zweiten Option ermöglichte das Einrollen über PHP, damit HTTPS-URLs endlich in Ordnung sind.quelle
Manchmal, wenn die Anwendung, mit der Sie Kontakt aufnehmen möchten, selbstsignierte Zertifikate hat, löst das normale cacert.pem von http://curl.haxx.se/ca/cacert.pem das Problem nicht.
Wenn Sie sich über die Service-Endpunkt-URL sicher sind, rufen Sie sie über den Browser auf und speichern Sie das Zertifikat manuell im Format "X 509-Zertifikat mit Kette (PEM)". Zeigen Sie auf diese Zertifikatdatei mit dem
quelle
Ich habe den gleichen Fehler unter Amazon AMI Linux.
Ich habe gelöst, indem ich curl.cainfo auf /etc/php.d/curl.ini gesetzt habe
https://gist.github.com/reinaldomendes/97fb2ce8a606ec813c4b
Ergänzung Oktober 2018
Bearbeiten Sie diese Datei unter Amazon Linux v1
Diese Zeile hinzufügen
quelle
Denken Sie beim Festlegen der Curl-Optionen für CURLOPT_CAINFO daran, einfache Anführungszeichen zu verwenden. Die Verwendung von doppelten Anführungszeichen führt nur zu einem weiteren Fehler. Ihre Option sollte also folgendermaßen aussehen:
Außerdem sollte in Ihrer php.ini-Datei die Einstellung wie folgt geschrieben sein: (Beachten Sie meine doppelten Anführungszeichen)
Ich setze es direkt unter die Zeile, die dies sagt:
extension=php_curl.dll
(Nur zu Organisationszwecken können Sie es an einer beliebigen Stelle in Ihrem
php.ini
Bereich platzieren. Ich platziere es einfach in der Nähe einer anderen Curl-Referenz. Wenn ich also mit dem Schlüsselwort curl suche, kann ich beide Curl-Referenzen in einem Bereich finden.)quelle
Ich bin hier gelandet, als ich versucht habe, GuzzleHttp (PHP + Apache auf Mac) dazu zu bringen, eine Seite von www.googleapis.com zu erhalten.
Hier war meine endgültige Lösung für den Fall, dass es jemandem hilft.
Überprüfen Sie die Zertifikatkette auf die Domain, bei der dieser Fehler auftritt. Für mich war es googleapis.com
Sie erhalten so etwas zurück:
Hinweis: Ich habe dies erfasst, nachdem ich das Problem behoben habe. Ihre Kettenausgabe sieht möglicherweise anders aus.
Dann müssen Sie sich die in PHP erlaubten Zertifikate ansehen. Führen Sie phpinfo () auf einer Seite aus.
Suchen Sie dann nach der Zertifikatdatei, die aus der Seitenausgabe geladen wurde:
Dies ist die Datei, die Sie reparieren müssen, indem Sie die richtigen Zertifikate hinzufügen.
Grundsätzlich müssen Sie die richtigen Zertifikatsignaturen an das Ende dieser Datei anhängen.
Einige davon finden Sie hier: Möglicherweise müssen Sie andere in der Kette googeln / suchen, wenn Sie sie benötigen.
Sie sehen so aus:
( Hinweis: Dies ist ein Bild, damit Benutzer nicht einfach Zertifikate aus dem Stapelüberlauf kopieren / einfügen. )
Sobald sich die richtigen Zertifikate in dieser Datei befinden, starten Sie Apache neu und testen Sie.
quelle
Sie können versuchen, das
ca-certificates
Paket neu zu installieren , oder das betreffende Zertifikat explizit zulassen, wie hier beschrieben .quelle
Die Lösung ist sehr einfach! Setzen Sie diese Zeile vor
curl_exec
:Bei mir funktioniert es.
quelle