2010-11-21 67 views
20

我今晚檢查了很多SSL librarys。 OpenSSL看起來很不錯,但缺少文檔,因爲它們大部分都是。當我發現NetSieben的SSL C++庫(http://www.netsieben.com/products/ssh/index.phtml)時,我認爲我遇到了困境,但幾個小時後,我無法獲得它進行編譯。它說它需要Botan的自由度,但絕對沒有信息如何將其鏈接到Botan或任何東西。尋找一個高水平的C++ SSL庫

所以我正在尋找一個相當好用的SSL庫。我只是將它用於客戶端應用程序來連接到已經存在的服務器。

+0

對於C++,我相信你的兩個選擇是Crypto ++和Botan。 Crypto ++和Botan類似。 Botan有TLS(Crypto ++缺少),Botan是C++ 11。我認爲Botan比Crypto ++清潔一點,但Crypto ++更好記錄。 Crypto ++支持更多的平臺,但Botan是強大的平臺。我切入了對Crypto ++的Solaris支持,並幫助了Botan。我還幫助切入了對ARM的支持。兩者都是非常好的圖書館。 – jww 2017-01-26 11:58:28

回答

1

您可能會喜歡CyaSSL,這是另一個SSL實現。你可以在http://www.yassl.com下載它。

+1

他要求提供C++庫,而不是嵌入式C庫。 – jww 2017-01-26 11:58:53

3

Mozilla NSS是一個相對較好的文檔庫集。

+0

也跨平臺和良好的支持。它不是一個C++庫,儘管如此,除非你編寫自己的包裝類,否則你必須忍受醜陋的容易出錯的C風格資源管理。 – 2010-11-21 13:01:56

6

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_connectasync_handshakeasync_write了。

28

要給出一個更完整的答案:有一些SSL庫是比OpenSSL的,這是出了名的壞更好地記錄。

如果你看看大畫面,真正的替代品作爲SSL庫是BotanPolarSSLMozilla NSSWolf和的GnuTLS。

除了Botan以外的所有程序都不是C++特有的,所以它們沒有很好的C++對象和資源管理。

我的個人由於代碼的可讀性,頭文件API文檔和一般的良好體驗,SSL庫的首選是PolarSSL。它用於一些大的FOSS項目中,它們有一些government accreditation

我並不是像Boost.Asio這樣的包裝紙的忠實粉絲,因爲他們仍然缺乏深度文章。 Boost.Asio本身很安靜,但是這些例子相當不錯。如果你只需要一個簡單的客戶端,這可能是一條路。

Mozilla NSS是較老的之一,但它不支持他們實際上應該使用的較新的TLS 1.1和TLS 1.2標準。

Botan和CyaSSL都是很好的選擇。 Botan文檔在某些部分是全面的,可能在其他部分有所欠缺,但一些大型的開源項目包括Botan,並且具有良好的體驗。

一般來說,你可以比OpenSSL做得更好。

希望這會有所幫助!

+0

+爲Botan圖書館 – PeeS 2015-09-24 20:47:53