zeromq如何与SSL协同工作?

new*_*git 18 sockets ssl zeromq

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

是否有一些标准方法如何启用ssl-enable zeromq?据我所知,它不支持开箱即用.

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

有任何想法吗?

Jas*_*son 6

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

如果缺乏一个在我选择的平台上进行全面测试和实施的更加集成的加密方法,那就是我要去的地方.0mq刚刚发布了版本4,它已经加密了,但它仍然被认为是实验性的,并且语言绑定不完全支持.

加密消息而不是连接似乎提供了最简单的升级路径,而我们目的的差异几乎只是语义,因为我们当前必须实​​现加密.

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

简而言之,在纳入ZMQ 4的Elliptic Curve加密被认为是可靠的并且成为标准之前,"接受的解决方案"将是通过手动连接实现SSL/TLS,并且失败,使用AES 128或256与安全密钥共享机制(密钥共享是适当使用RSA的地方).

  • 由于这只是一个upvote,我更新了我的答案,以反映自我最初编写以来我学到的东西. (2认同)

Jim*_*ler 5

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

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

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

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

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

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


Jef*_*eff 3

据 Zeromq.org 称,尚不支持它,但他们正在研究它。看起来它被建议作为Google Summer of Code 的项目。