向我的TCP客户端/服务器应用程序添加加密层的最简单方法是什么?

时间:2013-10-02 07:02:17

标签: c++ encryption tcp openssl libssh2

我编写了一个通过TCP运行的客户端/服务器应用程序。服务器以众所周知的IP地址运行,客户端从Internet上的不同位置连接到服务器。与服务器的TCP连接是持久且全双工的;也就是说,只要TCP连接保持打开,客户端和服务器就可以随时自由地向对方发送数据“消息”。服务器是用C ++编写的,围绕select()和非阻塞I / O设计。

这一切都运行良好,但目前所有数据都以明文形式发送,这意味着路由中任何关心运行数据包嗅探器的人都可以轻松读取客户端< - >服务器TCP流量。我想添加一些加密,以便我的客户端和服务器发送的数据不太容易被窥探,但我不确定用于此目的的适当API是什么。

我查看了libssh2 API和OpenSSL API,它们看起来都很合适......但是openssl似乎需要生成和分发公钥,我不知道该怎么做以安全和用户友好的方式;另一方面,libssh2有点高级,但看起来它可能只面向客户端,对于我的系统,我需要在服务器端和客户端添加支持。

我在正确的地方寻找吗?或者,如果不经过从VeriSign购买证书等的正式流程,我是否正在努力做到这一点?任何指针都会非常感激,因为我现在很困惑......:)

1 个答案:

答案 0 :(得分:1)

您可以使用OpenSSL API添加TLS加密。

它非常直接地实施,例如。继承当前套接字类并更改Connect(),Disconnect(),Read()和Write()。

根据您的应用程序类型,您必须微调证书检查。有时候(比如Web服务器)只有客户端可以检查服务器的证书,但是只要有可能,双方都应该验证另一方的证书。

如果您只能检查服务器密钥,请获取由知名CA签名的证书,以便所有客户端都可以检查它。如果您的服务器还检查客户端,他们还需要获取由公共CA签署的证书,或者您配置自己的CA并将证书连同用户注册一起发送给每个客户端。