2012-12-06 4 views

Antwort

24
  • CURLOPT_SSL_VERIFYPEER überprüft, ob der Remote-Zertifikat gültig ist, das heißt, dass Sie darauf vertrauen, dass sie von einer Zertifizierungsstelle ausgestellt wurde, denen Sie vertrauen, und dass es echt ist.

  • CURLOPT_SSL_VERIFYHOST überprüft, ob das Zertifikat an die Entität ausgegeben wurde, mit der Sie sprechen möchten.

Um es zu einem realen Szenario zu vergleichen, ist VERIFYPEER wie die Überprüfung, dass die Form von ID ist eine, die Sie (zB Pass aus einem Land, den Sie vertrauen, Personal-Karte von einem Unternehmen, wissen Sie erkennen .. .). VERIFYHOST ist so, als würde man den tatsächlichen Namen auf der Karte überprüfen, der mit dem übereinstimmt, mit dem man sprechen möchte.

Wenn Sie VERIFYHOST nicht verwenden (der korrekte Wert ist 2, nicht 1, BTW), deaktivieren Sie die Überprüfung des Hostnamens und öffnen Sie die Tür zu MITM-Angriffen: Jeder mit einer Form von ID, die Sie vertrauen, kann sich als jemand ausgeben eine Reihe von IDs, denen Sie vertrauen, z Jeder mit einem gültigen Pass könnte so tun, als wäre er jemand mit einem gültigen Pass.

+1

Vielen Dank für die ausgearbeitete Antwort. Dies führte mich zu einer anderen schnellen Fragen: Ich habe eine Website mit einem gültigen SSL-Zertifikat https: //www.example.com (cn = www.example.com wie es sollte). Wenn ich die Website über ihre IP-Adresse besuche, werden mir Cert-Fehler angezeigt (weil die cn nicht übereinstimmen), das Entfernen von SSL_VERIFYHOST löst es, öffnet es aber für MiTM-Attacken. Was ist die richtige Lösung, um damit umzugehen? (Verbindung über IP-Adresse erlauben OHNE Fehler anzuzeigen). Ersetzen Sie die gesamte Validierungsmethode mit CURLOPT_SSL_CTX_FUNCTION, um zu überprüfen, ob eine bestimmte IP-Adresse mit einem CN übereinstimmt. – user1782427

+0

Warum möchten Sie eine Verbindung mit der IP-Adresse herstellen? Ist es ein Zertifikat von Ihrer eigenen CA (oder selbstsigniert)? – Bruno

+0

Ich habe 2 Server (1.1.1.1 und 2.2.2.2), die DNS für example.com enthält 2 A Datensätze (von diesen IP-Adressen). Der Client wählt nach dem Zufallsprinzip eine davon aus und verbindet sich mit der IP-Adresse und nicht mit dem Hostnamen. Ich möchte, dass openSSL mich anruft, wenn es das allgemeine Namensfeld überprüft, also kann ich den allgemeinen Namen des Zertifikats mit example.com vergleichen, wenn es okay ist, werde ich das Zertifikat annehmen. Ich habe nicht gesehen, dass libcurl dies unterstützt, also nehme ich an, dass ich meine eigene Implementierung schreiben muss. Das Zertifikat für example.com ist ein vertrauenswürdiges Verisign-Zertifikat. – user1782427

Verwandte Themen