加密在 Windows、C++ 和 Java 中传输中的数据
Encrypt data in transit in Windows, C++ and Java
我需要为我们的客户端/服务器应用程序加密"传输中的数据"。 我们的服务器是用在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。
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- QTcpSocket 在 RemoteHostClosedError 后重新连接到服务器时无法传输数据
- 从C++调用 Python 脚本以持续流式传输数据
- 无法从 C++ 中的类正确传输数据
- 如何使用C++通过xbee传输数据?
- 如何通过 UDP 传输数据 (XML)?
- QTcpSocket ready读取信号在传输数据时停止发出
- 如何在"mwArray *"和"mxArray *"之间传输数据?
- 从GPS向SIGFOX传输数据
- 如何在C 中连接两个对象以在它们之间传输数据
- 使用 Win32/WINAPI 通过内存映射文件传输数据
- 蓝牙可以接收数据,但不能传输数据(用C++进行套接字编程以与Matlab通信)
- 实时在语言之间流水线传输或以其他方式传输数据
- 在网络上传输数据
- 如何在TCP端口上实时传输数据期间减少CPU使用率
- 使用Emscripten Worker API传输数据而不进行复制
- 在单声道项目和 C++ 控制台应用之间传输数据
- 是指向在向函数返回值/参数和类请求传输数据期间复制的内存的指针
- 在列表小部件之间传输数据
- r语言 - 如何直接在数据库服务器上运行C++进程以避免传输数据集