2012-07-30 65 views
0

我們使用標準的Java/SAAJ功能來創建SOAP消息並執行Web服務(WS)調用。到目前爲止,通信已跨unecrypted HTTP傳輸和調用端點上的WS已使用這種方法工作得很好:用於Java SOAP的Blowfish加密與SAAJ的SOAP調用

SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance(); 
SOAPConnection con = scf.createConnection(); 
URL endpoint = new URL(endpointUrl); // configured HTTP URL 

// "message" is passed as parameter (a SOAPMessage object) 
SOAPMessage response = con.call(message, endpoint); 
con.close(); 

現在,我們的客戶希望我們使用加密河豚的所有流量。我知道我可以用下面簡單的方法進行加密任意數據(這個例子只是使用一個隨機密鑰):

KeyGenerator kgen = KeyGenerator.getInstance("Blowfish"); 
SecretKey skey = kgen.generateKey(); 
byte[] raw = skey.getEncoded(); 
SecretKeySpec skeySpec = new SecretKeySpec(raw, "Blowfish"); 

Cipher cipher = Cipher.getInstance("Blowfish"); 
cipher.init(Cipher.ENCRYPT_MODE, skeySpec); 
String inputString = "This is just an example"; 
byte[] encrypted = cipher.doFinal(inputString.getBytes()); 

Cipher decCipher = Cipher.getInstance("Blowfish"); 
decCipher.init(Cipher.DECRYPT_MODE, skeySpec); 
byte[] decrypted = decCipher.doFinal(encrypted); 

assertEquals(inputString, new String(decrypted)); 

然而,缺少的環節是:我把這兩件在一起如何讓我可以使用Blowfish加密有效載荷並在接收到響應後對其進行解密?

Java提供的標準設施(SOAPMessage,SOAPConnection等)似乎根本不支持任何加密。我已經看到,春天的WebServiceTemplate支持ClientInterceptor實例,這可能有助於這一點。不過,我必須重寫我們的WS代碼才能使用spring-ws。我還沒有在their reference docs中找到一個例子,它解釋瞭如何使用spring-ws來完成這種加密。

我錯過了加密通信的一些簡單方法嗎?如果是,那是什麼?如果沒有,有哪些好的選擇來實現客戶的要求?

更新:使用HTTPS作爲安全傳輸不是一種選擇。

非常感謝您的幫助。

+0

如果您使用http傳輸層,則可以使用標準HTTPS SSL安全性。我認爲這與你想要做的事情稍有不同(物理加密消息),但很容易設置 - 即設置服務器證書,將請求重定向到此SOAP連接器以SSL端口。 – Davos555 2012-07-30 12:36:53

+0

謝謝你指出。不幸的是,將HTTPS作爲傳輸方式不是一種選擇。我已經相應地更新了這個問題。 – 2012-07-30 12:51:07

回答

1

這篇文章很長,所以在這裏很難總結,但是您可能想要使用Web服務安全性,IBM有一篇很棒的文章。

http://www.ibm.com/developerworks/java/library/j-jws5/index.html

但是,你們有幾個問題,一個是密鑰交換,爲河豚,因爲它需要在客戶端和服務器端的同一個按鍵上,這樣你可能有人攔截,除非你的關鍵例如,可以在跳躍驅動器上行走。

您可能需要查看數據並查看哪些部分需要加密,然後可以使用RSA加密對稱密鑰,將其作爲SOAP服務中的參數傳遞,然後使用該密鑰加密領域需要得到保護。

通過使用公鑰加密來完成此任務,您可以在每次調用時更改Blowfish密鑰,並且密鑰交換仍然安全,因爲需要私鑰(在服務器上)來恢復密鑰。

+0

該計劃是使用對稱密鑰加密的Blowfish,所以我們不會實現握手。把鑰匙放在雙方都不是問題(有一個問題就是讓它坐在那裏 - 在所有的備份中)。感謝您的鏈接,請仔細閱讀。 – 2012-07-30 12:22:28

+0

接受最好的答案,謝謝詹姆斯。 – 2012-08-06 12:16:58