【问题标题】:How can I protect credentials that are part of a message payload?如何保护作为消息有效负载一部分的凭据?
【发布时间】:2011-04-10 11:22:40
【问题描述】:

我们在应用程序中使用消息队列 (JMS / ActiveMQ),以促进客户端应用程序和服务器应用程序之间的通信。尝试调用服务器应用程序的用户的用户名和密码作为发送到队列的每条消息的一部分从客户端发送。我们希望通过以下方式保护用户凭据(至少是密码):

  • 当消息负载打印到日志文件时,它们不可见
  • 当管理员在管理控制台中查看消息时它们不可见,让他们查看队列的内容
  • 没有人可以使用截获消息中的凭据创建新消息(即使它被屏蔽/散列/加密)。

仅在客户端屏蔽密码并在服务器端取消屏蔽是不够的,因为有人可能会从日志文件或管理控制台中截取屏蔽密码,创建带有恶意数据的新消息,然后发送恶意消息将被取消屏蔽并在服务器端执行。使用客户端和消息队列之间的安全通道也会存在同样的问题,因为管理控制台仍会公开密码(无论是否屏蔽)。

是否有任何模式可以管理这种从客户端一直到服务器的数据隐藏/屏蔽,而没有任何人(甚至是消息代理管理员)看到数据?

【问题讨论】:

  • 您必须使用用户名/密码吗?您可以使用证书对消息进行签名吗?
  • 是的,向每个用户/机器颁发证书远远超出了我们的能力范围。这是一个内部公司网络应用程序,用户凭据是他们用来从任何给定机器登录到我们系统的凭据。

标签: security jms message-queue activemq middleware


【解决方案1】:

一种解决方案是拥有一个共享密钥,然后加密密码。为了防止重放攻击,请阅读什么是 Nonce:http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.doc/info/exp/ae/cwbs_noncev6.html

Example 1:

Client Sends:
      Encrypt(username + password + timestamp)
      Timestamp

Server:

Decrypt to get username, password, timestamp
      compare timestamp in encrypted data == unencrypted timestamp
      if timestamp older than N, then reject

This disallows replay attacks outside of the timestamp +- N window.

Example 2:

Client Sends:
       Encrypt( username + password + Nonce )

Server:
       Decrypt to get usernmae, password, Nonce
       check if Nonce was used before (for this username )
       if it was, then reject 

【讨论】:

  • 我认为这是一个可靠的解决方案,我会接受它作为答案。不幸的是,根据我们系统中的当前设计,我们无法使用它。去图..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2015-07-14
  • 1970-01-01
  • 2013-08-21
相关资源
最近更新 更多