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

标签 c++ stunnel capnproto

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

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

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

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

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

谢谢!

最佳答案

是的,Cap'n Proto 的两方协议(protocol)(当前唯一提供的协议(protocol))应该可以很好地与 stunnel 配合使用,因为它是一种简单的基于 TCP 的传输。当然,您需要运行 stunnel 客户端和服务器,但否则设置起来应该很简单。您还可以使用 SSH 端口转发或 VPN 来实现类似的结果。

(请注意,stunnel 本身与 HTTPS 本身无关,但通常用于实现 HTTPS,因为 HTTP 也是一个简单的 TCP 协议(protocol),除了 TLS 之外,HTTPS 是相同的协议(protocol)。在 Cap'n Proto 的情况下, Cap'n Proto 取代了 HTTP。所以我猜你正在创建 Cap'nProto-S。)

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

最终,我们计划向 Cap'n Proto 添加官方加密传输,旨在直接支持多方引入(Cap'n Proto 实际上还没有做到这一点,但我预计,当它准备好时,这将是一个 killer 级功能)。我预计这种支持会在 2016 年的某个时候出现,但无法做出任何 promise 。

关于c++ - 保护 Cap'n Proto RPC 网络流量的好方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33113199/

相关文章:

c++ - glDrawArrays(GL_TRIANGLES, 0, model.indicesCount) 上的 openGL 未处理异常;称呼

c++ - Cap'n Proto - 将结构反序列化/序列化为 std::string 以存储在 LevelDB 中

rust - capnpc::compile 不写入文件

ssl - Stunnel 是否支持非加密连接?

django - 升级到 Yosemite 后 Stunnel 不再有效

c++ - 在 Cap'n Proto 中读写字节数组的正确语法?

c++ - opencv Apple Mach-O 链接器

c++ - 线程上的 Boost.Asio 并发问题

c++ - c++中的while和for循环

ssl - 带隧道的扭曲 Ratchet