加密在 Windows、C++ 和 Java 中传输中的数据

Encrypt data in transit in Windows, C++ and Java

本文关键字:传输 数据 Java Windows C++ 加密      更新时间:2023-10-16

我需要为我们的客户端/服务器应用程序加密"传输中的数据"。 我们的服务器是用在Windows上运行的C++编写的。 我们的客户C++在Windows和Java上。 我们使用TCP/IP进行通信,直接调用通常的Winsock API,如连接,发送,绑定等,并且我们使用自己的端口号(没有80或443(。 当然,Java 客户端代码会进行标准的 Java TCP/IP 网络调用来与 Windows 服务器进行通信。 我仍然处于调查的早期阶段,我试图了解所有混乱的技术、协议、密码等。 我发现这篇文章看起来很棒:[https://www.codeproject.com/Articles/1000189/A-Working-TCP-Client-and-Server-with-SSL][1] 本文的标题是SSL,但它实际上使用TLS 1.2。 TLS 1.2 对我们来说似乎是一个非常好的解决方案,看起来将这些加密调用添加到我们的代码中应该相当容易。

所以,我的问题是:TLS是要走的路吗? 或者,是否有其他技术更适合? 我不想忽略任何更容易的事情,例如:"哦,只需打开此设置,您的所有通信都将被加密"。 意思是:让Windows为我们完成所有工作会很好。 我认为第三方VPN不适合我们b/c,我们想要完全控制,客户不希望信任第三方的敏感数据。 该解决方案还需要与用 Java 编写的客户端一起使用。 做一些快速的谷歌搜索:Java支持TLS,它应该能够与我们的C++Windows服务器协商通信,对吗? 我知道有HTTPS,但由于我们使用自己的端口号直接调用Winsock API,因此HTTPS似乎不适合我们,对吗? 我也读过OpenSSL,但由于它是一个C库,它似乎不适合Java,对吗?

身份验证:由于我们本质上是一个封闭的系统(我们拥有客户端和服务器(,我认为我们只会在服务器上放置证书,只有客户端会对服务器进行身份验证。我宁愿不在客户端上添加证书。

我最关心的问题之一是正确处理这个问题。 我的理解是,安全性可能非常棘手,你不想重新发明轮子。 因此,我倾向于使用一些在C++和Java中工作的成熟技术,这些技术很容易添加到我们的代码中,并提供必要的加密。

如果确保应用程序的所有网络通信都使用 TLS,特别是使用数字证书(可用但通常不使用(,则满足加密要求。 应用程序不必进一步加密其通信,因为隧道本身是安全的。

我强烈建议在端使用证书。 证书允许双方安全地相互识别,可以单独吊销证书,并且不能欺骗证书。

另一个需要考虑的强烈可能性是VPN,尤其是OpenVPN。