保护 Cap'n Proto RPC 网络流量的好方法是什么?

what is a good way to secure Cap'n Proto RPC network traffic?

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

我看到有些人一直在关注直接进入应用程序的 nanomsg 和其他传输 link,但我想知道 Stunnel 或类似的东西是否令人满意。

大多数人都知道,stunnel 应用程序可以在特定条件下提供 TCP/IP 流量的 HTTPS 封装,如常见问题解答所述:

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

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

谢谢!

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

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

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