我今晚检查了很多SSL图书馆。 OpenSSL看起来不错,但缺乏文档,因为大多数都可以。当我找到NetSieben的SSL C ++库(http://www.netsieben.com/products/ssh/index.phtml)时,我以为我中了大奖,但是几小时后,我无法进行编译。它说它需要Botan的lib,但绝对没有关于如何将它与Botan或任何东西联系起来的信息。
所以我正在寻找一个相当容易使用的SSL库。我只是将它用于客户端应用程序以连接到现有服务器。
答案 0 :(得分:30)
提供更全面的答案:有许多SSL库比OpenSSL更好地记录,这是非常糟糕的。
如果你看一下大图,那么作为SSL库的真正选择是Botan,PolarSSL,Mozilla NSS,Wolf和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_handshake
和async_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下载。