简单的客户端/服务器,使用TCP/IP加密消息流,SSL (C++)

4

我的问题基本上与这个相同:

简单的客户端/服务器,TCP/IP加密消息流,SSL

不同之处在于我需要用纯C++实现,而不是.NET。我不能使用第三方库,所以除非它是Windows系统组件(如上所述),否则我需要一些源代码,以便我可以理解并自己构建。

谢谢:)

以下是引用其他问题的内容:

"编写一个小型TCP/IP客户端服务器应用程序。基本上它创建了一个服务器,然后您可以创建几个不同的客户端并设置一些聊天会话。我想知道是否有任何方法可以使用标准的.NET库来合并某种形式的加密?

m_mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

有没有办法使用RSA指定tcp?

或者你(也就是我)必须编写一些自定义库来进行密钥交换,然后加密随后的聊天消息?我以前在大学里做过这个,但那是用Java做的,但我知道将其转换为C++并不难。只是试图不要重复造轮子......

或者利用ssl呢?

谢谢,Ron."


嗨,感谢您的回答。当我说“自己实现”时,我是指使用SSPI。看起来很容易,但我怀疑这可能会误导我,我不想犯任何愚蠢的错误,使解决方案变得脆弱。实际上,这是5-10年前的代码,现在有了这个新的安全要求,供您参考。 - Rabbit
3个回答

2

1

你可以随时查看OpenSSL,它是开源的,但这就像是自己实现SSL。我建议封装OpenSSL并使用它。或者使用OpenSSL中提供的SSL隧道应用程序。


0

编写自己的加密代码是“不推荐”的。即使在使用这些库时,犯一个简单的错误也很容易,更不用说自己编写了。

你真正想要使用的是OpenSSL和Boost.ASIO。如果你不能这样做,那么你的下一个最佳选择是使用Internet Explorer COM对象。这不太灵活,但根据你的确切需求可能会很好用。你还可以探索Win32 API。我上次查看时,并没有足够广泛的加密API可供使用。处理这个问题的最后一种方法是包装.NET API,以便你可以从本地C++中使用它们。

只有在所有这些都行不通的情况下,你才应该考虑自己编写。你会犯错误,结果你的应用程序将不太安全。因此,在尝试编写自己的加密代码之前,你也可以尝试查看通过SSH隧道传输SOCKS并使用其他人的SSH实现。接下来我会看看购买代码而不是自己编写它。代码不会像开源提供的那样好,因为它使用较少,所以会有更多的安全问题,但它仍然比你第一次尝试编写的任何东西都要好。

只有在尝试了所有这些选项后,才应该考虑自己编写。一旦你考虑了这一点,你应该再次尝试所有其他选项,以确保你没有错过其中之一适用于你的第一次尝试。
如果你仍然写自己的实现,然后在投入生产使用之前将其丢弃并使用其他选项,因为会有错误会损害安全性,以至于你可能真的不需要费心去处理。
很抱歉听起来这样消极,但是要做好这些事情真的很难,不是通过简单地看别人的实现就能做到的。

谢谢。我还在努力寻找最佳解决方案,但你所说的听起来很合理。也感谢其他两位贡献者。 - Rabbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接