SSL-Zertifikate und Boost asio

8

Hallo Ich versuche, Inhalt von der Webseite herunterzuladen, die HTTPS über C ++ verwendet. Mein sehr einfaches Client-Programm aus den Boost asio-Beispielen kompiliert und läuft gut, aber wenn ich es zB mit Google teste: www.google.co.uk/?gws_rd=ssl, gibt es mir den Fehler "Handshake: Zertifikatsüberprüfung fehlgeschlagen" .

Ich denke, das liegt daran, dass ctx.set_default_verify_paths () keinen Pfad mit einem Zertifikat für Google enthält (ich bin unter Windows).

Ich bin sehr neu bei SSL, bitte helfen Sie mir bei den folgenden Fragen:

1) Habe ich bei der Installation von openSSL eine Liste vertrauenswürdiger Zertifizierungsstellen auf meinem Computer gespeichert? Falls ja, was würde dazu führen, dass das Google-Zertifikat nicht verifiziert wird?

2) Gibt es überhaupt eine Aussage darüber, dass ich mich nicht um eine Verifizierung kümmere, fahre trotzdem mit der Verbindung fort, wie wenn du manuell eine Exception in Firefox hinzufügst? Ich bin nicht besonders daran interessiert, ob die Verbindung vertrauenswürdig ist, da ich nichts übermittele, was sicher sein muss.

Antworten zu beiden würden sehr geschätzt!

%Vor%     
Jez 01.02.2015, 15:24
quelle

1 Antwort

8

Vertrauenswürdige Zertifikate werden oft über das Betriebssystem, Browser oder einzelne Pakete installiert oder aktualisiert. Zum Beispiel sind in der Welt von * nix die Zertifikate oft über das Paket ca-certificates verfügbar, und die Zertifikate werden an Orten installiert, die boost::asio::ssl::context::set_default_verify_paths() wird finden.

Die Zertifizierungsbestätigung schlägt fehl, da der Client versucht, die Peerzertifikate mit der Überprüfung des Hostnamens zu verifizieren ( rfc2818 ). und überprüft, ob das Literal "host.name" im Zertifikat enthalten ist, und die Zertifikate des Servers führen "host.name" nicht als Namen auf. Versuchen Sie es zu ändern:

%Vor%

zu:

%Vor%

Um die Peer-Bestätigung zu deaktivieren, stellen Sie boost::asio::ssl::verify_none bereit zum boost::asio::ssl::stream::set_verify_mode() :

%Vor%

Boost.Asio stellt anderen Peer verify_mode zur Verfügung s.

Wenn die Peer-Verifizierung fehlschlägt, kann es hilfreich sein, einen benutzerdefinierten Rückruf an boost::asio::ssl::stream::set_verify_callback , das Diagnoseinformationen bereitstellt. Wie in der Dokumentation erwähnt, muss die Handler-Signatur lauten:

%Vor%

Hier ist ein benutzerdefinierter Funktor, der den Betreff des Zertifikats druckt:

%Vor%

Und seine Verwendung:

%Vor%

Auf meinem Rechner, wenn ich ihn benutze und set_default_verify_paths() nicht aufgerufen wird, bekomme ich folgende Ausgabe:

%Vor%

Und wenn set_default_verify_paths() aufgerufen wird:

%Vor%

Und wenn rfc2818_verification("host.name") verwendet wird:

%Vor%     
Tanner Sansbury 01.02.2015, 18:53
quelle

Tags und Links