如何通过SSH保护两个C++程序之间的通信

7
这可能不是一个编程问题。
说明:
1)我正在使用Linux。
2)我有两个C++程序,“client”和“server”;它们在不同的机器上运行,目前通过tcpip通信。我拥有这两个程序的源代码。
3)没有一个程序进行缓冲区溢出检查/防御中间人攻击/ mac /加密。
4)我不想给我的程序增加这个额外的复杂性。
5)我想让这两个程序只通过ssh通道交流(但客户端和服务器都在多用户的机器上运行;因此,如果我打开端口,其他用户也可以访问它们)。
问题:
什么是最不侵入式的方法,让客户端和服务器之间通过安全通道交流?
谢谢!
3个回答

9
就编程解决方案而言,您需要使用 OpenSSLGNU TLS。其中后者编写得更加清晰(OpenSSL 存在许多陷阱)。
对于一个真正优雅的解决方案,人们会使用 OpenSSL via boost::asio,但这个解决方案可能只适用于您正在启动一个新项目的情况。
就用户空间解决方案而言,如果您可以设置两个程序以指定用户身份运行,那么您可能可以为它们设置 SSL 隧道,但这高度取决于您希望如何建立连接。

7

你可以使用ssh的隧道代理模式。你从一台机器连接到另一台机器并设置代理端口,然后客户端连接到其机器上的本地端口,ssh会将TCP连接代理到远程机器。

ssh命令需要的选项是-L

有评论指出,这至少在理论上存在一些风险,即客户端机器上的某个程序可能会攀升到该端口。

但是,SSL需要很多机制。如果我必须这样做,并且我真的不想使用-L,我会深入研究ssh的源代码,并提出一个方案来完成-L所做的事情。


1
OP需要来自本地主机上其他用户的安全保护。SSH端口转发并不能防止另一个用户窥探相同套接字,因为只有主机之间的连接是加密的。 - P-Nuts
我想不出一个真正实用的多用户机器攻击,尽管我承认这在理论上是可能的。如果你选择一个随机端口,fork和exec ssh,然后连接到它... - bmargulies

1
你基本上有两个选择,而且都不是SSH。第一种是使用SSL/TLS,为了防止本地用户攻击,需要将其构建到程序中。第二种是使用IPSEC或OpenVPN,并在每个端点的防火墙中设置一些本地用户规则,以限制隧道仅供运行相关任务的用户使用。

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