2010-12-07 6 views
3

Ich implementiere eine Client-SSL-Verbindung über Boost.ASIO. Nach dem Referenzbuch, das ich verwende, muss ich SSL_get_verify_result anrufen, um sicherzustellen, dass alles in Ordnung mit dem Serverzertifikat ist. Leider braucht es einen Zeiger auf eine SSL Struktur, und ich habe keine Ahnung, wie man das aus ASIO herausholt.Wie bekomme ich eine SSL * von Boost.ASIO?

Ich habe versucht mit der impl() Funktion auf meinem boost::asio::ssl::stream<boost::asio::ip::tcp::socket> Objekt, aber der Compiler beklagt sich, dass es etwas anderes zurückgibt.

Dort muss eine Möglichkeit sein, diese Informationen zu erhalten. Weiß jemand das?

Antwort

3

Problem gelöst. Die Struktur, die es impl() zurückgibt, ist boost::asio::ssl::detail::openssl_stream_service::impl_struct*. Ich habe nicht erwartet, dass es dokumentiert wird, aber ich habe schließlich verzweifelt danach gesucht und etwas anderes entdeckt. Noch besser, es enthält einen Zeiger auf die SSL Struktur, die ich brauche, sowie die OpenSSL BIO Struktur und eine Art Puffer.

+0

impl_struct ist hier definiert: /usr/include/boost/asio/ssl/detail/openssl_stream_service.hpp –

0

ASIO hat dafür eine native Methode: Rufen Sie set_verify_mode im ssl-Kontext auf.

Die impl() -Methode gibt eine SSL_CTX * zurück, aber Sie sollten nicht davon abhängig sein.

+0

Ja, die 'impl()' Methode für den Kontext gibt ein 'SSL_CTX *' zurück. Der auf dem ssl :: stream gibt etwas anderes zurück. –

+0

Und 'set_verify_mode' ist nur gut für sehr grundlegende Prüfungen. Es ist nicht ausreichend für die Sicherheit. –