存储在 RabbitMQ 持久存储中时加密消息

Posted

技术标签:

【中文标题】存储在 RabbitMQ 持久存储中时加密消息【英文标题】:Encrypting messages when storing in RabbitMQ persistence storage 【发布时间】:2018-07-29 12:24:09 【问题描述】:

我使用 RabbitMQ 作为我的应用程序的消息代理,并使用持久存储作为消息存储机制。我发送给 RabbitMQ 的一些消息包含不需要以纯文本形式存储的敏感数据。看来我可以遵循两个选项来确保消息不会以纯文本形式存储在 RabbitMQ 中。

选项 1 - 在将消息发送到 RabbitMQ 之前对其进行加密,因此无论如何消息内容都不会是纯文本形式。这引入了一个瓶颈,我将无法让某些授权的第三方使用我的消息,因为它需要第三方知道解密密钥

选项 2 - 配置 RabbitMQ,使其在存储和读取持久存储时加密和解密消息。

我更喜欢选项 2。以下是我的问题。

    RabbitMQ 是否将消息以纯文本形式存储在持久存储中,以便任何有权访问文件系统并访问文件并读取消息内容的人? 我们能否将 RabbitMQ 持久存储配置为以加密方式存储数据?

【问题讨论】:

请注意,它不仅仅是存储。另一个威胁是对手通过其正常接口(即可以连接)并获取和/或放置消息来访问 RabbitMQ。在许多情况下,这可能比访问其存储更容易。 @GaborLengyel 感谢您的回复。我没有将它用作存储,但我为消息设置了 TTL 时间,以确保它们等到消费者消费消息。在那之前,我想保护他们的安全。 我的意思是即使你保护了存储,你仍然有攻击者能够访问队列的问题,所以这当然取决于你的用例,但可能值得添加消息加密在发送东西之前,根据选项 1。换句话说,选项 1 和 2 解决不同的威胁,这两者都可能是相关的。 @GaborLengyel 是的,选项 1 看起来更好。 【参考方案1】:

我相信this answer in the RabbitMQ mailing list 解决了你的问题:

RabbitMQ 不会加密静态数据。使用提供加密的文件系统。

【讨论】:

以上是关于存储在 RabbitMQ 持久存储中时加密消息的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ存储模型

RocketMQ源码学习--消息存储篇

菜鸟刷面试题(RabbitMQ篇)

RabbitMQ常见问题

.Net Core&RabbitMQ死信队列

(转)RocketMQ源码学习--消息存储篇