2011-03-31 34 views
1

我们在被促进客户端应用程序和服务器应用程序之间的通信的应用程序使用消息收发队列(JMS/ActiveMQ的)。尝试调用服务器应用程序的用户的用户名和密码是作为发送到队列的每条消息的一部分从客户端发送的。我们要保护用户凭据(至少密码)在以下几个方面:如何保护作为消息负载一部分的凭证?

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

简单地掩盖在客户端的密码,并揭露它在服务器端是不够的,因为有人可以拦截从日志文件或管理控制台蒙面的密码,创建恶意数据的新信息,然后发送在服务器端将被解除屏蔽并执行的恶意邮件。同样的问题会存在使用客户端和消息队列之间的安全通道中,由于在管理控制台将仍然暴露的密码(掩蔽或没有)。

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

+0

你需要使用用户名/密码?你可以使用证书签署消息吗? – Dave 2011-03-31 02:24:08

+0

是的,向每个用户/机器颁发证书远远超出了我们所能做的范围。这是一个内部企业网站应用程序,用户凭据是他们用来从任何给定机器登录到我们系统的凭据。 – 2011-03-31 03:17:53

回答

1

一个解决办法是有一个共享密钥,然后加密密码。 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 
+0

我认为这是一个固溶体,我会接受它作为回答。不幸的是,根据我们系统中的当前设计,我们无法使用它。去搞清楚.. – 2011-04-15 13:20:51