2016-07-28 4 views
0

In OpenSSL versuche ich die Zertifikatkette während des Handshakes zu überprüfen.
Wenn der Client eine Verbindung schaffen I che SSL_CTX* und SSL* dann stelle ich die Überprüfung Rückruf upOpenSSL kill sich bei Zertifikatvalidierungsfehler

SSL_set_verify(_ssl, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, verify_callback); 

Und dann in der Funktion habe ich

int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) { 
    bool ok = false; 
    [...] 
    return ok ? 1 : 0; 
} 

(ich den Code aus dem Beispiel in GitHub kopiert)
Wenn ich es ausführe, wenn die Funktion 1 zurückgibt, ist alles in Ordnung, aber wenn es 0 zurückgibt (alias fail), stoppt der gesamte Prozess (Exitcode 0)

Ich kompiliere gerade unter cygwin64 auf Win10 x64, die aktuell sind

Was ist los mit dem, was ich mache?

+0

Siehe auch [TLS-Client] (http://wiki.openssl.org/index.php/SSL/TLS_Client) im OpenSSL-Wiki. Der Beispielcode verfügt über einen Rückruf, der das Zertifikat ausgibt. – jww

Antwort

0

Die Dokumentation hat die Antwort:

The return value of verify_callback controls the strategy of the further verification process. If verify_callback returns 0, the verification process is immediately stopped with "verification failed" state. If SSL_VERIFY_PEER is set, a verification failure alert is sent to the peer and the TLS/SSL handshake is terminated.

Entnommen: https://www.openssl.org/docs/manmaster/ssl/SSL_CTX_set_verify.html

Vielleicht sind Sie eine Ausnahme oder etwas fehlt.

+0

Die Dokumentation spricht nicht über etwas wie den Prozess zu töten. Ich füge an, was das Programm schreibt in stdout/stderr (aus Netbeans Ausgabefenster) '4294956672: Fehler: 14089086: SSL Routinen: ssl3_get_client_certificate: Zertifikat überprüfen fehlgeschlagen: s3_srvr.c: 3270:' – full98

+0

Haben Sie versucht, durch den Code in ein Debugger? Überprüfen Sie auch, ob Ausnahmen ausgelöst wurden. –

+0

Ops ... ich dachte, ich hätte in einer try ... catch-Anweisung Code geschrieben, aber eigentlich nicht. Mein Fehler! Vielen Dank trotzdem – full98