zeromq 如何与 SSL 一起工作?

Posted

技术标签:

【中文标题】zeromq 如何与 SSL 一起工作?【英文标题】:How does zeromq work together with SSL? 【发布时间】:2011-07-20 11:18:46 【问题描述】:

我正在考虑使用 zeromq 作为我的应用程序之间的消息传递层。至少在某些情况下,我希望通信是安全的,并且我正在考虑 SSL。

是否有一些标准的方法来启用 ssl 的 zeromq?据我了解,它不支持开箱即用。

如果我在连接到套接字时只有一个参数会很好 (bool: useSsl) :)

有什么想法吗?

【问题讨论】:

【参考方案1】:

了解这并不是您问题的真正答案,我将使用 RSA 直接加密消息,然后使用 0mq 发送它们。

在我选择的平台中没有经过全面测试和实施的更集成的加密方法,这就是我要采用的方法。 0mq 刚刚发布了第 4 版,其中包含了加密功能,但仍被认为是实验性的,语言绑定并不完全支持。

加密消息而不是加密连接似乎提供了最简单的升级路径,考虑到我们目前必须如何实施加密,我们的目的差异几乎只是语义。

编辑:我现在比写这篇文章时更了解加密,RSA 不是加密消息数据的合适选择。使用 AES,手动共享密钥(这是我们的短期方法)或实施密钥共享方案,如 Jim Miller 的回答......但请注意,如果您采用后一种方法,设计和实施密钥共享方案 安全地很难。远比你想象的要难。您可以直接实现 SSL/TLS(使用消息 BIO),其他人已经这样做了,这也不简单,但至少知道 SSL 方案是行业标准,因此满足最低安全要求。

简而言之,在 ZMQ 4 中的椭圆曲线加密被认为是可靠的并成为标准之前,“公认的解决方案”是在连接上手动实施 SSL/TLS,如果失败,请使用 AES 128 或 256安全密钥共享机制(密钥共享是适当使用 RSA 的地方)。

【讨论】:

由于这刚刚得到了赞成,我更新了我的答案,以反映我从最初写它以来所学到的东西。【参考方案2】:

我们目前正在使用 0mq 实施预共享密钥解决方案,该解决方案实施松散地基于 TLS/SSL 的密钥交换协议。

本质上,我们有一个数据聚合器服务,它通过多播 0mq 发布者发布加密的健康状态数据。使用对称密钥 (AES128) 来加密数据,并且可以从作为 0mq 上更简单的请求/响应模型运行的第二个服务中检索。

为了检索对称密钥 (PSK),我们正在实施以下协议:

客户端连接 服务器发送其证书 客户端根据 CA 信任链验证服务器证书 客户端发送其证书 服务器根据其 CA 链验证客户端证书 服务器使用客户端公钥加密 PSK 服务器向客户端发送加密的 PSK 客户端解密 PSK

一旦客户端拥有 PSK,它就可以解密通过多播检索到的消息。

我们还在研究实现会话过期算法,该算法在多播服务中使用两个封装密钥。一个密钥是当前会话密钥,第二个是旧的、即将到期的密钥。这样一来,客户端就有更多的时间来检索新密钥,而无需在检索新密钥之前缓冲加密消息。

【讨论】:

【参考方案3】:

根据 zeromq.org,它是 not supported,但他们正在调查它。似乎建议将其作为 Google Summer of Code 的项目。

【讨论】:

以上是关于zeromq 如何与 SSL 一起工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 URL 重写与 web.Release.config 转换一起工作?

zeromq:如何防止无限等待?

ZeroMQ PUB/SUB 绑定订阅者

ZeroMQ:如何实现客户端通知?

SSL/TLS 握手中出现问题

idou老师教你学Istio 17 : 通过HTTPS进行双向TLS传输