添加SSL支持现有的TCP&UDP代码?(Adding SSL support to existin

2019-07-29 22:46发布

这里是我的问题。

现在我有一个Linux服务器应用程序(用C ++编写 - 海合会)(。Visual Studio的9,QT 4.5)与一个Windows的C ++客户端应用程序通信

什么是SSL支持添加到两边,以确保通信,而不完全古亭现有协议非常简单的方法?

这是一个使用UDP和TCP的组合VoIP应用最初建立连接,并做端口隧道的东西,然后使用UDP的数据流。

我有很多问题,在过去与从头开始创建这是必要的,得到这个东西,工作安全证书。

现有的工作示例代码将是理想的。

谢谢!

Answer 1:

SSL是非常复杂的 ,所以你会想使用图书馆。

有几种选择,如Keyczar , 牡丹 , cryptlib等。每个和(由其他人,如Boost.Asio的或建议的OpenSSL或文库)这些库中的每一个将具有用于此示例代码。


在回答你的第二个问题(如何将库到现有的代码集成,而不会造成太多的痛苦):这将取决于您的当前代码。 如果您已经有调用Winsock或插座的方法来发送/接收功能简单int S, strings ,等等,那么你只需要重写这些功能的胆量。 而且,当然,更改设置,开始与插座的代码。

在另一方面,如果你直接调用的Winsock / socket函数,那么你可能想编写具有类似语义的功能,但发送加密的数据,并更换您的Winsock与这些函数的调用。

但是,你可能要考虑切换到像谷歌协议缓冲器或阿帕奇节俭 (又名Facebook的节俭)。 谷歌的协议缓冲文件说,“在此之前协议的缓冲区,有请求和所使用的请求和响应的手编组/解组,并支持多项协议的版本的响应的格式。这导致了一些非常丑陋的代码。 ......”

目前在手编组/解组阶段你。 它可以工作,实际上是一个项目,我的工作确实使用此方法。 但它是一个要好很多,留下的是一个图书馆; 特别是已经给一些思考在未来更新软件库。

如果你走这条路线,你会设置你的网络连接与SSL库,然后你就会把你的节俭/协议缓冲区数据在这些连接。 而已。 它涉及广泛的重构,但你会用更少的代码维护结束。 当我们推出Protocol Buffers的转化项目认定我提到的代码库,我们能够摆脱约300编组/解组代码行。



Answer 2:

我建议使用的GnuTLS在客户端和服务器端都上,只为TCP连接。 忘掉UDP数据现在。 该文件的GnuTLS具有示例代码编写客户端和服务器。 请您理解,至少在服务器端(通常是TCP响应者)需要有一个证书; 客户端可以用匿名的鉴定工作(虽然有甚至没有如服务器证书,只用DH密钥交换 - 这将允许人在这方面的中间人攻击)。

在一般情况下,很可能你必须理解SSL的原则,不管你用什么库。 库替代品的OpenSSL(Unix和Windows)和SChannel中(仅适用于Windows)。



Answer 3:

您是否尝试过在SSL支持Boost.Asio的或ACE ? 两者都使用OpenSSL的下引擎罩,并为TCP,UDP和SSL类似的抽象。 示例代码中都Boost.Asio的和ACE发行版中提供。

有一件事你可能需要记住的是,SSL是不是面向流的(TCP和UDP两者)面向记录的。 这可能会影响你,因为你多重事件必须,例如,阅读完整的SSL记录,你可以调用一个读操作完成之前。



Answer 4:

为了帮助在不改变应用哟可能想看看在安全通道项目(处理这个http://www.stunnel.org/ )。 我不认为它会处理UDP你虽然。



Answer 5:

该yaSSL和CyaSSL嵌入式SSL / TLS图书馆已经在过去的工作很适合我。 被定位于嵌入式系统,它们是为速度和大小进行了优化。 yaSSL是用C ++和CyaSSL写入C.相比之下,CyaSSL可以比OpenSSL的小20倍。

两者都支持最新的行业标准(高达1.2 TLS),提供了一些很酷的功能,例如流密码,并且是双的GPLv2许可和商业许可协议授权(如果你需要商业支持)。

他们有一个SSL教程,倒是加入CyaSSL到你预先存在代码以及: http://www.yassl.com/yaSSL/Docs-cyassl-manual-11-ssl-tutorial.html

产品页面: http://yassl.com/yaSSL/Products.html

问候,
克里斯



文章来源: Adding SSL support to existing TCP & UDP code?