gpt4 book ai didi

c++ - 如何使用 winsock 在 C++ 应用程序中实现安全套接字通信?

转载 作者:行者123 更新时间:2023-11-28 04:36:24 25 4
gpt4 key购买 nike

我正在尝试用 C++ 在服务器和客户端之间实现安全通信。限制是客户端和服务器都必须在 Windows 上运行并且必须在 C++ 中。这是我在大学从事的研究项目。

到目前为止,我发现 SChannel 是最好的选择,但文档非常困惑,我找不到任何关于如何使用它的指南/教程。我已经看过这个链接 https://learn.microsoft.com/en-us/windows/desktop/secauthn/creating-a-secure-connection-using-schannel但仍然不明白如何让它工作。如果这是最好的方法,有人可以指导我解决这个问题吗?

我还研究了通过 CLR 使用 SSLStream 让 .net 在 C++ 应用程序中运行。但是我不能使用它,因为客户端应用程序是线程化的,线程不能与 CLR 一起使用。

我已经在两者之间设置了一个虚拟客户端和服务器,我只是想保护和加密该通信。

非常感谢任何帮助!

最佳答案

无论您选择使用哪个 SSL 库,作为该领域的初学者,您都需要了解以下几点:

服务器和客户端的实现最终会在某些地方看起来完全不同。

您的服务器绝对需要带有私钥的证书。在开发过程中,您显然不想从 Verisign 或其他公司获得证书,因此您需要创建一个自签名证书。您可以使用 openssl 或其他工具执行此操作。

证书由私有(private)部分和公共(public)部分组成。公共(public)部分需要转到客户端,并将用于验证连接。当您使用 SChannel 之类的东西时,需要将证书(私有(private)和公共(public))分别安装在服务器和客户端的证书存储中。

SChannel 不会为您发送或接收数据。所以你实现的核心将是:当网络有数据时:从套接字读取密文并写入 SChannel。从 SChannel(如果有)读取明文并传递给应用程序。当应用程序有数据要发送时,从应用程序获取明文并传递给 SChannel。从 SChannel 获取生成的密文缓冲区并写入套接字。

来自互联网的缓冲区可能是部分的,协商和重新协商意味着没有 1:1 将数据传递到 SChannel 和从中取出数据的映射。

因此,您无法通过调用 SChannel 一次以传入数据并再次获取未加密/加密数据的天真的实现。在您获得任何应用程序字节之前,可能没有任何可用信息,或者在客户端和服务器之间发送大量数据包。也就是说,您需要某种状态机来跟踪这一点。

显然,不要同时编写客户端和服务器:从针对 https 服务器的客户端开始。

这是该过程的一般概要 - 当我第一次遇到 SSL 时让我感到困惑的事情以及为什么没有一个样本几乎像我希望的那样简单。

关于c++ - 如何使用 winsock 在 C++ 应用程序中实现安全套接字通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51328785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com