寻找一个高级的C++ SSL库

24

今晚我查看了很多SSL库。OpenSSL看起来不错,但缺乏文档,这和大多数库一样。当我找到NetSieben的SSL C ++库(http://www.netsieben.com/products/ssh/index.phtml)时,我以为我中了头彩,但经过几个小时的尝试,我无法将其编译。它说需要Botan的lib库,但没有任何关于如何链接到Botan或其他内容的信息。

因此,我正在寻找一个相当易于使用的SSL库。我只是用它来连接到已经存在的服务器的客户端应用程序。


1
对于C++,我认为你的两个选择是Crypto++和Botan。Crypto++和Botan相似。Botan有TLS(Crypto++缺少),而且Botan是C++11。我认为Botan比Crypto++更加简洁,但是Crypto++文档更好。Crypto++支持更多平台,但Botan是强大的第二选择。我为Crypto++插入了Solaris支持,并帮助了Botan。我还帮助插入了ARM支持。两个库都非常好。 - jww
5个回答

33

为了给出更全面的答案:有许多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好得多。

希望这可以帮到你!


  • 用于Botan库
- PeeS
Mozilla的NSS仍在积极更新,目前支持TLS v1.1、v1.2和v1.3。 - Adrian B.

9

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_connectasync_handshakeasync_write


我们使用Asio;MbedTLS本身是一个很棒的库;不知道是否有人对Asio进行了移植,以便使用除OpenSSL之外的TLS库(有一个WolfSSL移植版)https://www.wolfssl.com/wolfssl-support-asio-boost-asio-c-libraries/ - Pedro Vicente
@PedroVicente 这是一个GnuTLS端口的Boost Asio SSL:https://github.com/paullouisageneau/boost-asio-gnutls - ruben2020

7

如果您需要一个简单易懂的SSL库,您可以看看https://polarssl.org

PolarSSL拥有完整的API文档和示例客户端,可以在其源代码页面上找到。

免责声明:我是PolarSSL的首席维护者。


3

同时支持跨平台且拥有良好的支持。但它并不是一个 C++ 库,因此您必须使用丑陋、容易出错的 C 风格资源管理,除非您自己编写包装类。 - President James K. Polk

0

2
他要求的是 C++ 库,而不是嵌入式 C 库。 - jww

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接