客户端之间的JMS / MQ机密性

时间:2010-08-07 05:21:47

标签: jms activemq privacy confidentiality

我正在设计一个系统,其中一台服务器必须向许多独立客户端发送消息。客户不了解彼此,不应该消费,偷看或以任何其他方式获取有关彼此消息的知识。

因此,我想知道JMS / ActiveMq是否能够控制哪些客户端获取哪些消息?

我希望所有客户端都连接到同一个JSM提供程序(“目标”),只使用针对它们的消息。从服务器的角度来看,这将是一个简单的设置。

另一种方法是从所有客户端获取Web服务端点,并在每次服务器为客户端发送消息时执行ws-calls。我认为这种替代声音“错误”,因为我认为这些声音很臃肿。每个ws呼叫都有很大的开销,这个服务器每天必须拨打1000个电话。在我看来,这对于服务器而言并不是最理想的......

1 个答案:

答案 0 :(得分:1)

简答:使用Message selector

详细答案: 问题没有提到如何启动对话。所以这里是我对这两种情况的答案。

a)如果客户端发起对话(即客户端向服务器发送消息并等待回复)。

这是请求/回复方案。 Messaging / JMS是一个解耦的通信系统。但是request/reply是JMS中的常见模式。它可以使用相关模式实现。

  • 发送一个唯一标识符(相关ID)作为请求消息的一部分。
  • 服务器接收消息并在回复消息中设置相关ID。
  • 客户端使用消息选择器接收具有正确相关ID的消息。

b)如果服务器启动对话(即服务器在没有客户端请求的情况下向客户端发送消息)。

在这种情况下,可以使用类似的方法。

  • 为每个客户分配固定的客户端ID。
  • 服务器维护所有客户端ID,并将收件人的客户端ID设置为消息的相关ID。
  • 客户端使用消息选择器接收相关ID等于其客户端ID的消息。

有关机密性的更新。

摘自从this link中提取的信息,对您有用,了解JMS security

  

JMS未指定安全性   合同或控制API   消息机密性和完整性。   安全被认为是一种安全   JMS提供程序特定的功能。它是   由系统管理员控制   而不是实施   以编程方式或由J2EE服务器   运行时。

JMS安全性的两个主要功能是身份验证和授权。据我所知,客户端访问的JMS安全性侧重于保护JMS目标(而不是单个消息)。只要客户端可以访问目标,分配给客户端的安全角色就适用于属于目标的所有消息。

基于此,

解决方案1:如果客户端代码由受信任方控制。

在原始答案中按照我的解决方案。 这将确保将消息传递给合适的人。但如果故意修改客户端代码以接收所有消息,则不会保护任何内容。

解决方案2:为每个客户端分配私人目标和用户帐户,并配置安全性,使客户端的用户帐户只能访问其目的地。

注意:找到关于"Restrictions for message selectors to provide message level authorization"的链接。但我认为这是供应商特定的自定义功能。

希望这会有所帮助。