2011-01-11 10 views
11

Ich habe kürzlich ein Problem beim Posten von Daten auf einem Server festgestellt, dessen SSL-Zertifikat aktualisiert wurde. Ich habe etwas recherchiert und festgestellt, dass, wenn CURLOPT_SSL_VERIFYPEER auf "false" gesetzt ist, das Post-Date erfolgreich durchlaufen wird. Kann jemand die Beziehung zwischen CURLOPT_SSL_VERIFYPEER und _VERIFYHOST erklären? Wenn ich VERIFYPEER auf false setze, übertrage ich die Daten nicht mehr über eine sichere Verbindung?Wenn CURLOPT_SSL_VERIFYPEER false ist, ist die Datenübertragung nicht mehr sicher?

Vielen Dank für jede Hilfe, die jeder geben kann.

Antwort

19

Die Verbindung wird weiterhin SSL-verschlüsselt sein. Sie werden es nicht auf einem Link tun, der validierte Zertifikate verwendet. Jeder kann sich ein SSL-Zertifikat erstellen, das auf jedem Level, den Ihr Browser und der Webserver unterstützen, eine vollkommen akzeptable Verschlüsselung durchführt.

Sie erhalten jedoch viele Beschwerden darüber, dass Sie die Authentizität des Zertifikats nicht überprüfen können. Dies soll verhindern, dass Joe M. Alicious ein Zertifikat erstellt, das behauptet, "microsoft.com" zu sein und einen eigenen Windows Update-Host einzurichten. Das cert wird sagen, es ist microsoft.com, aber es kann nicht authentifiziert werden als tatsächlich microsoft.com, als Verisign (oder wer auch immer) nicht tatsächlich ausgestellt haben dieses Zertifikat und legte ihren eigenen Stempel der Authentizität (Unterzeichnung des Cert) auf sie.

_VERIFYHOST überprüft, ob der Hostname der URL, mit der Sie eine Verbindung herstellen (z. B. "microsoft.com"), im SSL-Zertifikat aufgeführt ist. Wenn diese Option auf "false" gesetzt ist, werden URL/Cert-Hostnamen-Mismatchs ignoriert (z. B. haben Sie eine Entwicklungsbox auf testbox.develhost.com, verwenden aber das wirklich gültige "example.com" -Cert Ihres Clients).

_VERIFYPEER deaktiviert die Validierung des gesamten Zertifikats. Dadurch können selbstsignierte Zertifikate funktionieren. Andernfalls wird die SSL-Bibliothek nicht angeben, dass der Aussteller des Zertifikats ungültig ist.

Aber unabhängig von beiden Einstellungen, wenn Sie eine Verbindung erzwingen, wird es ssl verschlüsselt werden.

+0

Ausgezeichnet, vielen Dank für eine kurze Antwort. –

+1

aber [schalten Sie es nicht aus, es sei denn, Sie nur auf einen privaten Server zugreifen!] (Http://snippets.webaware.com.au/howto/stop-turning-off-curlopt_ssl_verifypeer-and-fix-your-php -config /) – webaware

1

Ich möchte über die Beziehung zwischen _VERIFYHOST und _VERIFYPEER aus meinen Tests klären.

_VERIFYHOST überprüfen gemeinsamen Namen (CN) als Handbuch sagte, dass abhängig von Option 1 oder 2. Diese Überprüfung überprüft nur und generiert Fehlermeldung Fall fehlgeschlagen. Die Verifizierung selbst hat keinerlei Auswirkungen auf die Verbindung, selbst ein Verifizierungsfehler tritt auf. Dieses Ergebnis wird von _VERIFYPEER verwendet, um die Verbindung zu verringern oder fortzusetzen.

_VERIFYPEER (1) überprüfen Sie 2 Dinge. Zuerst prüft es das Zertifikat mit CAINFO. Wenn CAINFO in der curl-Option spezifiziert, dann wird es mit diesem Wert überprüft, andernfalls wird es mit dem in php.ini angegebenen Wert überprüft. Zweitens, es überprüft das Ergebnis von _VERIFYHOST (Fall setzt _VERIFYHOST auf 1 oder 2). Wenn die Überprüfung beide Bedingungen erfüllt, wird die Verbindung fortgesetzt. Andernfalls wird die Verbindung gekappt.

0

Wenn Sie CURLOPT_SSL_VERIFYPEER deaktivieren, wird keine Überprüfung des Zertifikats durchgeführt (und der Wert von CURLOPT_SSL_VERIFYHOST wird ignoriert). Dadurch sind Sie gegenüber Man-in-the-Middle-Angriffen unsicher. Dies bedeutet, dass Sie die Daten nicht mehr über eine sichere Verbindung übertragen.

Ja, die Daten sind verschlüsselt, aber immer noch nicht sicher. Sie wissen, dass Sie senden an jemand, aber Sie haben keine Ahnung wer; Sie könnten es dem Erzfeind des Benutzers senden (sorgfältig verschlüsseln, damit niemand anders als der Angreifer die Daten lesen kann). Das ist schlecht. Die gesamte Verschlüsselung in der Welt ist nicht sehr gut, wenn Sie sie mit dem öffentlichen Schlüssel des Angreifers verschlüsseln.

Fazit: Deaktivieren Sie CURLOPT_SSL_VERIFYPEER nicht. Es macht dich unsicher.

Weitere Informationen dazu, was Sie tun müssen, um die cURL SSL-Unterstützung sicher zu verwenden, finden Sie unter Security consequences of disabling CURLOPT_SSL_VERIFYHOST (libcurl/openssl).

Verwandte Themen