如何通过ssh保护两个c ++程序之间的通信

时间:2010-01-16 23:29:11

标签: c++ ssh security

这可能是一个非编程问题。

博览会:

1)我正在使用Linux。

2)我有两个C ++程序,“客户端”和“服务器”;他们在不同的机器上运行,目前正在谈论tcpip。我有两个程序的源代码。

3)两个程序都没有在中间atacks / mac / encryption中缓冲人流检查/防御。

4)我不想在我的程序中添加这个额外的复杂层。

5)我想让两个程序只通过ssh通道进行通信(但客户端和服务器都在多用户机器上运行;所以如果我只是打开端口,其他用途也可以访问它们)

问题:

让客户端和服务器通过安全通道相互通信的最少侵入性方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:8)

就编程解决方案而言,您需要OpenSSLGNU TLS。在这两个中,后者写得更清晰(OpenSSL有很多陷阱)。

对于一个非常优雅的解决方案,可以使用OpenSSL via boost::asio,但该解决方案可能仅适用于您正在开始新项目。

就用户空间解决方案而言,如果您可以将两个程序设置为以指定用户身份运行,则可以为它们设置SSL隧道,但这在很大程度上取决于您希望如何建立连接。

答案 1 :(得分:7)

好吧,您可以在隧道代理模式下使用ssh。您从一台计算机连接到另一台计算机并设置代理端口,然后客户端连接到其计算机上的本地端口,ssh代理与远程计算机的TCP连接。

ssh命令需要的选项是-L

评论指出,至少在理论上,这是客户端机器上某些程序爬到港口的风险。

但是,SSL需要很多机制。如果我不得不这样做,而且我真的不想使用-L,那么我会深入研究ssh的来源并提出一个方案来做-L所做的事。

答案 2 :(得分:1)

你基本上有两种选择,它们都不是SSH。一,使用SSL / TLS,为了给本地用户提供安全性,需要将其构建到您的程序中。二,在每端的防火墙中使用IPSEC或OpenVPN以及一些本地用户规则,将隧道的使用限制为仅运行任务的用户。