PHP CURL CURLOPT_SSL_VERIFYPEER wird ignoriert

117

Aus irgendeinem Grund kann ich CURL nicht mit HTTPS verwenden. Alles funktionierte einwandfrei, bis ich ein Upgrade der Curl-Bibliotheken durchführte. Jetzt tritt diese Antwort auf, wenn ich versuche, CURL-Anforderungen auszuführen: Problem mit dem SSL-CA-Zertifikat (Pfad? Zugriffsrechte?)

Nach den hier veröffentlichten Vorschlägen zu verwandten Themen habe ich Folgendes versucht:

  • Deaktivieren Sie die Überprüfung für Host und Peer

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
  • Aktivieren CURLOPT_SSL_VERIFYPEERund zeigen Sie auf cacert.pem heruntergeladen von http://curl.haxx.se/docs/caextract.html

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
  • Ich habe auch versucht, dasselbe mit dem positivenSSL.ca-Bundle zu tun, das als Bundle-CA-Zertifikat für den Server bereitgestellt wurde, zu dem ich eine Verbindung herstellen möchte.

  • Bearbeiten Sie die PHP-INI-Einstellungen mit curl.cainfo=cacert.pem(Datei im selben Verzeichnis und für Apache zugänglich)

  • Umbenennen /etc/pki/nssdbin/etc/pki/nssdb.old

Leider kann keines der oben genannten Probleme mein Problem lösen, und ich erhalte ständig ein Problem mit der SSL-CA-Zertifizierungsnachricht (Pfad? Zugriffsrechte?).

Und ich brauche diese Überprüfung überhaupt nicht (mir sind Sicherheitsprobleme bekannt).

Hat jemand andere Vorschläge?

AKTUALISIEREN

Nach dem Update auf die neuesten Bibliotheken und dem Neustart der gesamten Box scheint nicht nur Apache, was ich getan habe, jetzt wieder zu funktionieren !!!

Greg
quelle
1
Haben Sie die Curl-Bibliothek aktualisiert, die für einen anderen SSL-Stack kompiliert wurde (GnuTLS vs OpenSSL vielleicht)?
Bruno
Das würde ich nicht glauben. Das System ist Fedora 16 und es war wirklich der Fall von Yum Update. Das nervigste ist, dass ich diese ganze Validierung nicht brauche / will und sie scheinbar nicht einfach deaktivieren kann.
Greg
Wenn Sie HTTPS aus Sicherheitsgründen verwenden möchten, sollten Sie diesen Validierungsprozess immer einrichten.
Bruno
Ich bin mir dessen bewusst, aber mein Anwendungsfall hier macht alles ein bisschen überflüssig. Außerdem habe ich Curl auf den neuesten Stand gebracht und PHP auf 5.4. Jetzt ist die Fehlermeldung weg, aber ich bekomme auch keinen Cotnent von Curl :)
Greg
Ha, jetzt bekomme ich irgendwo die Funktion curl_errno, die den Status 77 meldet, der laut Handbuch CURLE_SSL_CACERT_BADFILE ist.
Greg

Antworten:

240

Gemäß Dokumentation: Um das Host- oder Peer-Zertifikat zu überprüfen, müssen Sie alternative Zertifikate mit der CURLOPT_CAINFOOption angeben, oder es kann ein Zertifikatverzeichnis mit der CURLOPT_CAPATHOption angegeben werden.

Schauen Sie sich auch an CURLOPT_SSL_VERIFYHOST:

  • 1, um das Vorhandensein eines allgemeinen Namens im SSL-Peer-Zertifikat zu überprüfen.
  • 2, um das Vorhandensein eines allgemeinen Namens zu überprüfen und um sicherzustellen, dass er mit dem angegebenen Hostnamen übereinstimmt.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Kleeblatt
quelle
5
Durch Deaktivieren der SSL-Überprüfung wird ohnehin die gesamte Sicherheit von SSL aufgehoben. Sie sollten stattdessen Ihre PHP-Konfiguration korrigieren.
Scopey
7
@Scopey, aber manchmal benötigen Sie es in lokalen Entwicklungsumgebungen mit selbstsignierten Zertifikaten. Wahrscheinlich macht es in nicht öffentlichen Umgebungen keinen Sinn, aber zur Erinnerung ist es immer besser, eine Warnung im Protokoll zu haben (z. B. SSL verification disabled)
Ivan Borshchov
2

Wir hatten das gleiche Problem auf einem CentOS7-Computer. Durch Deaktivieren von wurde das VERIFYHOST VERIFYPEERProblem nicht gelöst. Wir hatten keinen cURL-Fehler mehr, aber die Antwort war immer noch ungültig. Das Ausführen eines wgetLinks zu demselben Link wie die cURL führte ebenfalls zu einem Zertifikatfehler.

-> Unsere Lösung bestand auch darin, den VPS neu zu starten. Dies löste ihn und wir konnten die Anforderung erneut abschließen.

Für uns schien dies ein Problem der Speicherbeschädigung zu sein. Durch einen Neustart des VPS wurde die Bibliothek erneut in den Speicher geladen und jetzt funktioniert es. Wenn die obige Lösung von @clovernicht funktioniert, versuchen Sie, Ihren Computer neu zu starten.

Rvanlaak
quelle
Stellen Sie sicher, dass es nicht intermittierend ist. Ich hatte ein Problem mit der Paypal- und Peer-Überprüfung, bei dem es manchmal funktionierte, manchmal nicht. Es schien zufällig. Explizite Einrichtung des Cafile-Pfads und Angabe der Locke, wo das Problem gelöst wurde.
Neil Davis