2

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

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

众所周知,stunnel 应用程序可以在某些条件下提供 TCP/IP 流量的 HTTPS 封装,根据常见问题解答:

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

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

谢谢!

4

1 回答 1

2

是的,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,我猜。)

kj::AsyncIoStream另一种选择是直接基于 TLS 库(如 OpenSSL、GnuTLS 等)实现抽象接口。Cap'n Proto 的 RPC 层将允许您提供kj::AsyncIoStream其传输的任意实现(通过 中的接口capnp/rpc-twoparty.h)。不幸的是,许多 TLS 库的接口非常丑陋,因此可能很难做到这一点。但是,如果您确实写了一些东西,请将其回馈给项目,因为这是我希望在基础库中拥有的东西。

最终,我们计划为 Cap'n Proto 添加一个官方加密传输,旨在直接支持多方介绍(Cap'n Proto 实际上还没有这样做,但我希望它准备好后会成为一个杀手级功能)。我预计这种支持会在 2016 年的某个时间出现,但不能做出任何承诺。

于 2015-10-14T00:34:17.687 回答