2010-12-07 6 views
3

J'implémente une connexion SSL client via Boost.ASIO. Selon le livre de référence que j'utilise, je dois appeler SSL_get_verify_result pour m'assurer que tout va bien avec le certificat de serveur. Malheureusement, il prend un pointeur vers une structure SSL, et je n'ai aucune idée de comment l'extraire d'ASIO.Comment obtenir un SSL * de Boost.ASIO?

J'ai essayé d'utiliser la fonction impl() sur mon objet boost::asio::ssl::stream<boost::asio::ip::tcp::socket>, mais le compilateur se plaint qu'il renvoie quelque chose d'autre.

Il doit être un moyen d'obtenir cette information. Est-ce que quelqu'un le sait?

Répondre

3

Problème résolu. La structure qu'il indique impl() renvoie boost::asio::ssl::detail::openssl_stream_service::impl_struct*. Je ne m'attendais pas à ce qu'il soit documenté, mais j'ai finalement cherché en désespoir de cause et j'ai découvert le contraire. Encore mieux, il contient un pointeur vers la structure SSL dont j'ai besoin, ainsi que la structure OpenSSL BIO et une sorte de tampon.

+0

impl_struct est défini ici: /usr/include/boost/asio/ssl/detail/openssl_stream_service.hpp –

0

ASIO a une méthode native pour ce faire: appelez set_verify_mode sur le contexte ssl.

La méthode impl() renvoie un SSL_CTX *, mais vous ne devriez pas en être dépendant.

+0

Oui, la méthode 'impl()' sur le contexte renvoie un 'SSL_CTX *'. Celui sur le flux ssl :: renvoie quelque chose d'autre. –

+0

Et 'set_verify_mode' est seulement bon pour les contrôles très basiques. Ce n'est pas suffisant pour la sécurité. –

Questions connexes