2015-10-13 140 views
1

我想使用Cap'n Proto RPC与办公室桌面盒中的云服务器进行通信。 Cap'n Proto不通过防火墙提供安全的网络连接。我更喜欢C++,因为我有其他组件需要这个。什么是保护Cap'n Proto RPC网络流量的好方法?

我看到一些人一直在寻找nanomsg和其他直接链接到应用程序的传输,但我想知道stunnel或类似的东西是否令人满意。

的安全通道的应用,因为大多数知道,可以在某些条件下提供TCP/IP通信的HTTPS封装,具体根据FAQ:

  1. 的协议是TCP,UDP不。
  2. 该协议不使用多个连接,如ftp。
  3. 该协议不依赖带外(OOB)数据,
  4. 远程站点不能使用特定于应用程序的协议,如ssltelnet,其中SSL是协商选项,除了那些已支持的协议stunnel的协议参数。

看起来像Cap'n Proto RPC可能会满足这些条件。我不认为客户会反对在这种情况下安装stunnel。有没有人试过这个或类似的东西?如果是这样,你的经验将不胜感激。如果有人知道更快/更轻的替代方案,它也会有所帮助。

谢谢!

+0

所以,基本上问题是“如果程序不能做到这一点,我的网络连接如何安全”?除此之外,你使用防火墙这样的词很奇怪。你确定你知道它是什么吗? – deviantfan

+0

如果两个终端都在你的/客户的控制之下,甚至不需要为特定的程序开发一些半解决方案,而是为所有的东西做一个合适的VPN。 – deviantfan

+0

啊..这只是Trolls出现之前的一个时间问题:)。 –

回答

1

是的,Cap'n Proto的两方协议(目前唯一提供的协议)应该与stunnel一起使用,因为它是一个简单的基于TCP的传输。当然,你需要运行一个stunnel客户端和一个服务器,否则这应该是直接设置的。您也可以使用SSH端口转发或VPN来获得类似的结果。 (注意,stunnel本身与HTTPS本身无关,但通常用于实现HTTPS,因为HTTP也是一个简单的TCP协议,HTTPS除了在TLS上是相同的协议。在Cap'n Proto案例中,Cap'n Proto取代了HTTP,所以你想创建Cap'nProto-S)

另一种选择是直接基于TLS库(如OpenSSL,GnuTLS等)实现kj::AsyncIoStream抽象接口。Cap Proto的RPC层将允许您提供kj::AsyncIoStream作为其传输的任意实现(通过capnp/rpc-twoparty.h中的接口)。不幸的是,许多TLS库有非常丑陋的界面,所以这可能很难得到正确的。但是如果你写了一些东西,请将它回馈给项目,因为这是我想在基本库中找到的东西。

最终,我们计划添加一个官方加密运输Cap'n Proto旨在直接支持多方介绍(Cap'n Proto实际上还没有做,但我认为这将是一个杀手级功能,当它是准备)。我预计这种支持将在2016年出现一段时间,但不能做出任何承诺。

+1

谢谢!很高兴我问 - 希望它可以帮助其他开发者。 在所有TLS库中,BoringSSL似乎是可能通过安全审查的更为重要的项目之一。一些基准测试显示,在某些常见使用情况下,它比OpenSSL快得多。不幸的是,OpenSSL,瑕疵等等,都是公司所熟悉的。我不认为这是什么新鲜事物,当你的团队接近它时,它可能会发生变化,但也许会有所帮助。我现在可能不得不满足于stunnel,但会留意。 –