今晚我查看了很多SSL库。OpenSSL看起来不错,但缺乏文档,这和大多数库一样。当我找到NetSieben的SSL C ++库(http://www.netsieben.com/products/ssh/index.phtml)时,我以为我中了头彩,但经过几个小时的尝试,我无法将其编译。它说需要Botan的lib库,但没有任何关于如何链接到Botan或其他内容的信息。
因此,我正在寻找一个相当易于使用的SSL库。我只是用它来连接到已经存在的服务器的客户端应用程序。
今晚我查看了很多SSL库。OpenSSL看起来不错,但缺乏文档,这和大多数库一样。当我找到NetSieben的SSL C ++库(http://www.netsieben.com/products/ssh/index.phtml)时,我以为我中了头彩,但经过几个小时的尝试,我无法将其编译。它说需要Botan的lib库,但没有任何关于如何链接到Botan或其他内容的信息。
因此,我正在寻找一个相当易于使用的SSL库。我只是用它来连接到已经存在的服务器的客户端应用程序。
为了给出更全面的答案:有许多SSL库比OpenSSL文档更好,后者是出了名的糟糕。
如果你从整体上看,真正的SSL库备选项是Botan, PolarSSL, Mozilla NSS, Wolf和GnuTLS。
除了Botan以外,其他都不是C++特定的,因此它们没有漂亮的C++对象和资源管理。
我个人偏好的SSL库是PolarSSL,因为它的代码可读性高,在头文件中有API文档,并且总体上使用感受良好。它被用于一些大型FOSS项目中并获得了某种政府认证。
我不太喜欢像Boost.Asio这样的包装器,因为它们仍然缺乏更深层次的正确文档说明。Boost.Asio本身还不错,示例也相当不错。如果你只需要一个简单的客户端,那么这可能是可行的方法。
Mozilla NSS是较老的库之一,但它不支持较新的TLS 1.1和TLS 1.2标准,而实际上它们应该支持。
Botan和CyaSSL都是不错的选择。Botan的文档在某些部分非常详细,但在其他部分可能有些缺乏,但是一些大型开源项目包括Botan并且对它有良好的经验。
总的来说,使用任何其中之一都比OpenSSL好得多。
希望这可以帮到你!
Boost.Asio 通过包装 OpenSSL 提供了 SSL 功能。这些示例很简单,对于客户端代码来说,它看起来像这样。
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
。
如果您需要一个简单易懂的SSL库,您可以看看https://polarssl.org。
PolarSSL拥有完整的API文档和示例客户端,可以在其源代码页面上找到。
免责声明:我是PolarSSL的首席维护者。
Mozilla NSS是一组文档相对较好的库。