Security 如何使用不受信任的主机代理防火墙之间的安全连接?

Security 如何使用不受信任的主机代理防火墙之间的安全连接?,security,networking,ssl,oauth,openssl,Security,Networking,Ssl,Oauth,Openssl,我有一个有趣的网络安全挑战,我无法找出最佳的攻击方式 我需要提供一种方法,允许防火墙后面的两台计算机(a和B)只使用internet上的一个公共“代理”不受信任的服务器(如RackSpace)彼此建立安全连接。(该服务器被视为不受信任,因为防火墙后面的客户不会信任它,因为它位于开放式服务器上)我无法调整防火墙设置以允许网络直接相互连接,因为连接事先不知道 这与远程桌面帮助工具(crossloop、copilot等)处理的NAT到NAT连接问题非常相似 我真正想找到的是一种在两台主机之间打开SSL

我有一个有趣的网络安全挑战,我无法找出最佳的攻击方式

我需要提供一种方法,允许防火墙后面的两台计算机(a和B)只使用internet上的一个公共“代理”不受信任的服务器(如RackSpace)彼此建立安全连接。(该服务器被视为不受信任,因为防火墙后面的客户不会信任它,因为它位于开放式服务器上)我无法调整防火墙设置以允许网络直接相互连接,因为连接事先不知道

这与远程桌面帮助工具(crossloop、copilot等)处理的NAT到NAT连接问题非常相似

我真正想找到的是一种在两台主机之间打开SSL连接并让公共服务器代理连接的方法。最好是当主机A尝试连接到主机B时,它必须提供一个令牌,代理可以在建立连接之前与主机B进行检查

为了增加另一个缺点,连接机制需要支持两种类型的通信。首先是对RESTWeb服务的HTTP请求/响应,第二个是允许实时消息传递的持久套接字连接

我已经研究了我所知道的一些技术,比如使用证书的OpenSSL、OAuth等,但是我没有看到任何能够满足我需要的技术


以前有其他人处理过类似的事情吗?任何指针?

通常,SSL是基于数据包的协议(用于解决您的任务)。如果您可以让主机来回转发数据包,就可以轻松地使用SSL安全通信通道。您需要的是类似我们的产品,它允许任何传输,而不仅仅是插座。也就是说,组件告诉您的代码“将此数据包发送到另一端”或“您有什么要我接收的吗?”并且您的代码与中间服务器进行通信

您可以使用普通SSL解决您的问题

只需让不受信任的服务器将客户端主机之间的连接转发为不透明的TCP连接即可。然后,客户端通过转发的TCP隧道建立端到端SSL连接-使用OpenSSL,一个客户端调用
SSL\u accept()
,另一个客户端调用
SSL\u connect()

使用证书(可能包括客户端证书)来验证SSL连接的另一端是否是您期望的对象


(这在概念上类似于HTTPS连接在web代理上的工作方式-浏览器只是说“将我连接到此目的地”,并与所需端点建立SSL连接。代理只是前后转发加密的SSL数据,并且由于它没有正确证书的私钥,因此无法模拟所需端点)。

您需要特别注意另一方的验证,由于不受信任的主机正在转发您的流量…某个地方,可能是您的预期目的地,也可能不是。我希望不必降低到数据包级别。我希望找到一个开源HTTP/HTTPS代理包,允许我用中间的授权步骤代理从一个主机到另一个主机的连接。@艾伦,当我理解您的任务时,您不需要一个常规代理,而是一些包代理,它将接受两个传入连接并在它们之间架起一个桥梁。这里的问题是,当您有一个传出套接字连接(在客户机上)时,大多数SSL/TLS实现都假定这也是SSL的客户机端,并且最终会有两个客户机。要在传出连接上拥有服务器,您需要一些定制的SSL实现(如我们的;)。总而言之:我怀疑你最终只会得到一个开源代理——任务太具体了。梅耶夫斯基:在OpenSSL下,在网络层传出连接上拥有一个SSL服务器相当容易——你只需在
connect()
之后调用
SSL\u accept()