2011-03-31 61 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