1

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

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

我查看了 libssh2 API 和 OpenSSL API,它们看起来都可能是合适的......但是 openssl 似乎需要生成和分发公钥,我不确定如何在安全的情况下执行和用户友好的方式;另一方面,libssh2 有点高级,但它看起来可能只面向客户端,对于我的系统,我需要在服务器端和客户端添加支持。

我找对地方了吗?或者我正在尝试做的事情甚至可能不经过从 VeriSign 等购买证书的正式流程?任何指针将不胜感激,因为我现在很困惑...... :)

4

1 回答 1

2

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

它的实施相当简单,例如。子类您当前的套接字类并更改 Connect()、Disconnect()、Read() 和 Write()。

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

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

于 2013-10-02T16:48:56.630 回答