2010-11-21 10 views
20

J'ai consulté quelques bibliothèques SSL ce soir. OpenSSL semble bien mais manque de documentation, comme la plupart d'entre eux le font. Je pensais que j'ai atteint le jackpot quand j'ai trouvé la bibliothèque SSL C++ de NetSieben (http://www.netsieben.com/products/ssh/index.phtml) mais après des heures, je suis incapable de la compiler. Il dit qu'il a besoin de la librairie de Botan, mais absolument aucune information sur la façon de lier Botan ou quoi que ce soit. Donc, je cherche une bibliothèque SSL assez facile à utiliser. Je l'utilise juste pour une application client pour se connecter à un serveur déjà existant.À la recherche d'une bibliothèque SSL C++ de haut niveau

+0

Pour C++, je crois que vos deux choix sont Crypto ++ et Botan. Crypto ++ et Botan sont similaires. Botan a TLS (dont Crypto ++ manque), et Botan est C++ 11. Je pense que Botan est un peu plus propre que Crypto ++, mais Crypto ++ est mieux documenté. Crypto ++ prend en charge plus de plates-formes, mais Botan est une seconde forte. J'ai intégré le support de Solaris pour Crypto ++ et aidé avec Botan. J'ai également contribué à la prise en charge ARM pour les deux. Les deux sont de très bonnes bibliothèques. – jww

Répondre

1

Vous pourriez aimer CyaSSL, qui est une autre implémentation SSL. Vous pouvez le télécharger au http://www.yassl.com.

+1

Il a demandé une bibliothèque C++, pas une bibliothèque C intégrée. – jww

3

Mozilla NSS est un ensemble de bibliothèques relativement mieux documenté.

+0

Également multiplate-forme et bien supporté. Il ne s'agit pas d'une bibliothèque C++, donc vous devrez vivre avec une gestion des ressources C-style à risque d'erreur, à moins que vous n'écriviez vos propres classes wrapper. –

6

Boost.Asio fournit des fonctionnalités SSL en encapsulant OpenSSL. Les examples sont assez simples, pour code client, il ressemble à this

ssl::context ctx(my_io_service, ssl::context::sslv23); 
ctx.set_verify_mode(ssl::context::verify_peer); 
ctx.load_verify_file("ca.pem"); 

ssl::stream<ip::tcp::socket> ssl_sock(my_io_service, ctx); 
ip::tcp::socket::lowest_layer_type& sock = ssl_sock.lowest_layer(); 
sock.connect(my_endpoint); 
sock.handshake(); 
sock.write(...); 

note qu'il existe des méthodes asynchrones async_connect et async_handshake et async_write aussi.

4

Pour une bibliothèque SSL simple et bien documentée, vous pouvez consulter https://polarssl.org.

PolarSSL a complet API documentation et des clients d'exemple sur son.

Avertissement: Je suis le responsable principal pour PolarSSL

28

Pour donner une réponse plus approfondie: Il y a un certain nombre de bibliothèques SSL qui sont mieux documentés que OpenSSL, ce qui est notoirement mauvais.

Si vous regardez le grand tableau, les véritables alternatives en tant que bibliothèque SSL sont Botan, PolarSSL, Mozilla NSS, Wolf et GnuTLS.

Tous sauf Botan ne sont pas spécifiques à C++, ils ne possèdent donc pas de bons objets C++ et la gestion des ressources. La préférence pour la bibliothèque SSL est PolarSSL, en raison de la lisibilité du code, de la documentation de l'API dans l'en-tête et de bonnes expériences générales avec celle-ci. Il est utilisé dans certains grands projets FOSS et ils ont une sorte de government accreditation.

Je ne suis pas un vrai fan des wrappers comme Boost.Asio car ils manquent encore de la documentation appropriée pour les choses plus en profondeur. Boost.Asio lui-même est calme ok et les exemples sont assez décents. Si vous avez seulement besoin d'un client simple, cela pourrait être le chemin à parcourir. Mozilla NSS est l'un des plus anciens, mais il ne supporte pas les nouvelles normes TLS 1.1 et TLS 1.2, ce qu'ils devraient faire.

Botan et CyaSSL sont aussi de bonnes alternatives. La documentation de Botan est approfondie sur certaines parties et peut-être un peu manquante sur d'autres parties, mais certains grands projets open source incluent Botan et ont de bonnes expériences avec.

En général, vous pouvez faire beaucoup mieux qu'OpenSSL avec n'importe lequel d'entre eux.

Espérons que cela aide!

+0

+ pour la bibliothèque Botan – PeeS