2010-04-28 6 views
6

Kann mir jemand sagen, was der Unterschied zwischen SSL_CTX_set_cert_verify_callback und SSL_CTX_set_verify ist? Von OpenSSL docs:SSL_CTX_set_cert_verify_callback vs. SSL_CTX_set_verify

SSL_CTX_set_cert_verify_callback() setzt die Überprüfung Callback-Funktion für ctx. SSL-Objekte, die von ctx erstellt werden, erben die Einstellung, die zum Zeitpunkt des Aufrufs von SSL_new (3) gültig ist.

und:

SSL_CTX_set_verify() setzt die Verifikations Flags für ctx-Modus zu sein, und gibt die verify_callback Funktion verwendet werden. Wenn keine Callback-Funktion angegeben werden soll, kann der NULL-Zeiger für verify_callback verwendet werden.

Also versuche ich zu verstehen, welche Callback für jeden (von Client-Seite) zu senden.

Dank Experten.

Antwort

7

SSL_CTX_set_cert_verify_callback() bedeutet, dass Sie eine Funktion sind die Angabe des gesamten Validierungsprozess zu tun (zu Fuß die Zertifikatskette jedes cert wiederum Validierung). [Sie möchten dies wahrscheinlich nicht tun, siehe unten]

SSL_CTX_set_verify() dagegen gibt eine Funktion an, die aufgerufen wird, wenn der Standardvalidator jedes Zertifikat prüft, wobei preverify_ok auf 0 oder 1 gesetzt ist um anzuzeigen, ob die Überprüfung des fraglichen Zertifikats funktioniert hat.

Vom doc für SSL_CTX_set_cert_verify_callback()

WARNHINWEISE

Sie den Bestätigungs Rückruf nicht mischen in dieser Funktion mit der Funktion verify_callback während der Überprüfungsprozess aufgerufen beschrieben. Letzterer wird mit der Funktionsfamilie SSL_CTX_set_verify (3) festgelegt.

Bereitstellung einer vollständigen Überprüfung Verfahren einschließlich Zertifikat Zweck Einstellungen usw. ist eine komplexe Aufgabe . Die integrierte Prozedur ist ziemlich leistungsstark und in den meisten Fällen sollte ausreichend sein, um das Verhalten mithilfe der verify_callback-Funktion zu ändern.

+0

SSL_CTX_set_verify() wird nur aufgerufen, wenn der Standardvalidator feststellt, dass ein bestimmtes Zertifikat nicht validiert werden konnte? Es wird also nur aufgerufen, wenn etwas mit dem Zertifikat nicht in Ordnung ist? – BreakPoint

+0

Siehe meine Antwort. Es wird unabhängig vom Validierungsergebnis für das Client-Zertifikat aufgerufen. OpenSSL übergibt das Ergebnis an den Callback im Argument preverify_ok. –

+0

@ZZ richtig, ich werde diese Correction machen –

2

SSL_CTX_set_cert_verify_callback() ändert die standardmäßige Zertifikatüberprüfungsfunktion. Du solltest das wahrscheinlich nicht tun. Es ist ziemlich kompliziert, Sie müssen die Signatur für jedes Zertifikat überprüfen, die Kette überprüfen, möglicherweise CRL überprüfen. Es ist der komplizierteste Teil des SSL.

Die SSL_CTX_set_verify() wird verwendet, um den Modus von SSL festzulegen. Wenn der Modus SSL_VERIFY_PEER (2-Wege-SSL) ist, sollten Sie in dieser Funktion auch einen Rückruf festlegen, um das Client-Zertifikat weiter zu überprüfen (Überprüfung von CN anhand einer Whitelist usw.). Für andere Modi wird dieser CB nicht verwendet. Da Sie gesagt haben, dass Sie sich im Client-Modus befinden, müssen Sie sich wahrscheinlich nicht um diesen Anruf kümmern.

+0

Danke für die Antwort. Wird bei der Standardvalidierung überprüft, ob der Betreffname nicht übereinstimmt? Ich habe eine Beispielimplementierung, die SSL_CTX_set_verify() verwendet, um diese Überprüfung durchzuführen. Auf der Client-Seite. – BreakPoint