寻找高级C ++ SSL库

时间:2010-11-21 05:04:40

标签: c++ ssl

我今晚检查了很多SSL图书馆。 OpenSSL看起来不错,但缺乏文档,因为大多数都可以。当我找到NetSieben的SSL C ++库(http://www.netsieben.com/products/ssh/index.phtml)时,我以为我中了大奖,但是几小时后,我无法进行编译。它说它需要Botan的lib,但绝对没有关于如何将它与Botan或任何东西联系起来的信息。

所以我正在寻找一个相当容易使用的SSL库。我只是将它用于客户端应用程序以连接到现有服务器。

5 个答案:

答案 0 :(得分:30)

提供更全面的答案:有许多SSL库比OpenSSL更好地记录,这是非常糟糕的。

如果你看一下大图,那么作为SSL库的真正选择是BotanPolarSSLMozilla NSSWolf和GnuTLS。

除了Botan之外的所有内容都不是C ++特定的,所以他们没有很好的C ++对象和资源管理。

我对SSL库的个人偏好是PolarSSL,因为代码的可读性,标头内API文档以及一般的良好体验。它在一些大型FOSS项目中使用,它们有某种government accreditation

我不是像Boost.Asio这样的包装器的真正粉丝,因为他们仍然缺乏更深入的东西的适当文档。 Boost.Asio本身很安静,但是这些例子相当不错。如果您只需要一个简单的客户端,这可能就是您的选择。

Mozilla NSS是旧版本之一,但它不支持新的TLS 1.1和TLS 1.2标准,它们实际上应该这样做。

Botan和CyaSSL都是不错的选择。 Botan文档在某些方面是彻底的,也许在其他方面有点缺乏,但是一些大型开源项目包括Botan并且有很好的经验。

一般来说,你可以比OpenSSL做得更好。

希望这有帮助!

答案 1 :(得分:8)

Boost.Asio通过包装OpenSSL提供SSL功能。 examples非常简单,对于客户端代码,它看起来像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(...);

请注意,异步方法async_connect以及async_handshakeasync_write也是如此。

答案 2 :(得分:5)

对于一个记录良好的SSL库,您可以查看https://polarssl.org

PolarSSL在其API documentation上有完整的source page和示例客户端。

免责声明:我是PolarSSL的主要维护者

答案 3 :(得分:3)

Mozilla NSS是一套相对较好的文档库。

答案 4 :(得分:1)

您可能喜欢CyaSSL,这是另一种SSL实现。您可以在http://www.yassl.com下载。