2012-05-14 91 views
18

我需要實現一個jax-ws客戶端。簽名和加密政策

這裏是供應商文檔說有關安全

目前,我們使用SOAP消息安全1.0版規範的 http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf

本標準採用兩位來自W3C規範其他:
XMLENC( http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/
和XMLDSIG(http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/

對於簽名,使用指定X509的「URI」和「valueType」的直接 「引用」的「SecurityTokenReference」是強制性的。對於 的加密,我們也推薦它,但我們也支持 首選項對keyIdentifier,X509IssuerSerial或keyName的引用。

加密和簽名塊必須是「body」標籤。

我們推薦使用:「rsa-sha1」用於簽名,「rsa-1_5」用於 加密密鑰,「tripledes-cbc」用於加密主體。

所以我想出了以下策略(由netbeans生成)。但是......它看起來並不適合我。 Web服務尚未到達,但我不確定規格版本是否匹配。我在這個主題上讀了很多,但我仍然有些困惑。這個政策看起來好嗎?

<wsp1:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoapPolicy"> 
    <wsp1:ExactlyOne> 
     <wsp1:All> 
      <sp:TransportBinding> 
       <wsp1:Policy> 
        <sp:TransportToken> 
         <wsp1:Policy> 
          <sp:HttpsToken RequireClientCertificate="false"/> 
         </wsp1:Policy> 
        </sp:TransportToken> 
        <sp:Layout> 
         <wsp1:Policy> 
          <sp:Lax/> 
         </wsp1:Policy> 
        </sp:Layout> 
        <sp:AlgorithmSuite> 
         <wsp1:Policy> 
          <sp:TripleDesRsa15/> 
         </wsp1:Policy> 
        </sp:AlgorithmSuite> 
       </wsp1:Policy> 
      </sp:TransportBinding> 
      <sp:Wss10/> 
      <sp:EndorsingSupportingTokens> 
       <wsp1:Policy> 
        <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient"> 
         <wsp1:Policy> 
          <sp:WssX509V3Token10/> 
         </wsp1:Policy> 
        </sp:X509Token> 
       </wsp1:Policy> 
      </sp:EndorsingSupportingTokens> 

     </wsp1:All> 
    </wsp1:ExactlyOne> 
</wsp1:Policy> 
<wsp:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoap_perform_Input_Policy"> 
    <wsp:ExactlyOne> 
     <wsp:All> 
      <sp1:SignedEncryptedSupportingTokens> 
       <wsp:Policy> 
        <sp1:X509Token sp1:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient"> 
         <wsp:Policy> 
          <sp1:WssX509V3Token10/> 
         </wsp:Policy> 
        </sp1:X509Token> 
       </wsp:Policy> 
      </sp1:SignedEncryptedSupportingTokens> 
     </wsp:All> 
    </wsp:ExactlyOne> 

</wsp:Policy> 

編輯: 我無法得到它發送與預期的消息WSIT-呢。例如,使用Netbeans嚮導,如果不使用尋址,我無法獲得加密的標頭。它應該是可能的嗎?

我用舊軸1類和wss4j破解了一些東西,但它很有效,但它很醜,我寧願使用更多的面向未來的東西。

+0

更大的賞金會有幫助嗎? – ymajoros

+0

我無法用wsit發送預期的消息。例如,使用Netbeans嚮導,如果不使用尋址,我無法獲得加密的標頭。它應該是可能的嗎?我用老軸1類和wss4j攻擊了一些東西,它可以工作,但它很醜,我寧願使用更多的面向未來的東西。 – ymajoros

+0

這是更多的代碼審查網站上的代碼審查問題。 – user1378730

回答

1

也許你想試用CXF而不是WSIT? http://cxf.apache.org/docs/ws-security.html

+0

我可以。我用一個醜陋的黑客解決了我的問題。該提供商表示,它將在安全方面制定一個體面的wsdl,大概在明年左右。當他們會,我會用wsit,它應該工作。與此同時,我醜陋的黑客工程。 – ymajoros

+0

那麼你使用CXF進行醜陋的黑客嗎? – adosaiguas

+0

不,我改編了一些wss4j和metro 1類與地鐵一起工作,因爲我在metro/wss4j中有一個工作配置。我基本上覆制和改變了地鐵班,所以沒有依賴地鐵。我仍然相信地鐵是正確的選擇。由於我必須深入瞭解wss4j,所以我向你保證它很髒。 – ymajoros

1

你看起來確實很困惑。一般來說,你應該有一個單一的政策。在您的情況下,您可能會接受不安全的Web服務調用,因爲您有一個定義傳輸綁定(https)的策略,而另一個則不是。

此外,由於您有一個傳輸綁定,這意味着整個主體將通過傳輸協議(https)進行加密。您不需要明確指定主體加密。實際上,這個綁定會加密除了http頭之外的所有內容。

傳輸綁定確實是獲得安全Web服務的最簡單方法。如果您想要完全控制,您必須根據自己的需要編寫自己的對稱或非對稱綁定。不對稱更復雜,因爲它需要雙方的證書,而不對稱需要服務器證書(接受匿名客戶端)。不對稱和對稱綁定需要謹慎。它們的設計非常靈活,並且可以讓您設計任何策略,即使易受某些攻擊。

當不使用傳輸綁定時,則必須指定正文必須加密。正如規格說明:

sp:EncryptedParts/sp:Body 

或翻譯成XML:

<sp:EncryptedParts> 
    <sp:Body/> 
</sp:EncryptedParts> 

同樣,如果你想身體簽名:

<sp:SignedParts> 
    <sp:Body/> 
</sp:SignedParts> 

有更多的選項來指定簽名/加密順序,是否加密簽名等。

顧名思義,policie例如sp:EndorsingSupportingToken適用於支持令牌。我熟悉的類型是可以包含在Web服務請求中的用戶名令牌。

WS-SecurityPolicy specification是我閱讀了解政策的單一最有用的文檔。你應該花時間仔細閱讀。它詳細介紹了相關內容,幷包含有用的示例。閱讀不同版本的文檔是很好的,因爲某些方面會在更新的版本中得到更好的記錄。注意我鏈接了v1.3。

設置Web服務客戶端和服務器並編寫簡單的測試。特別是如果你是網絡服務新手。

一個工具,可以幫助你快速制定政策是SoapUI。它並不支持我所需要的,但它幫助我學習了一些東西。它有一個偉大的用戶界面,它不是很難使用。

獲取一些示例或構建一些示例,然後在規範的幫助下解構它們。

我發現政策相當複雜。準備好吸收很多概念!

+0

那麼,我沒有選擇。我是客戶端,對服務器沒有什麼可說的,被其他客戶端使用(無論我怎麼想)。我有一個沒有安全限制的wsdl。這是不可談判的。 – ymajoros

+0

你的合作伙伴不是很合作。也許他們並不是那麼感興趣,你稱他們的服務?如果他們進行客戶端身份驗證,您將永遠無法在沒有適當的客戶端證書的情況下調用該服務。如果他們需要用戶名+密碼令牌,則永遠無法調用該服務。也許他們通過https接受匿名客戶?測試一下。使用https安全編碼簡單的Web服務(即:一個單一的Hello World功能)。然後編碼相應的客戶端。一旦它工作,交叉手指,並嘗試與'真正'的服務。 –

+0

'我的合作伙伴'真的是我的客戶的合作伙伴,無論如何他們都有壟斷,所以我們需要撥打他們的網絡服務,因爲我們沒有選擇,而且我們如此沉迷於現狀,不會隨時改變不久。他們統治世界,你會爲他們所做的事(他們的業務而不是技術)感到驚訝。無論如何,我有一個上面提到的醜陋的黑客,它在幾個月後在生產中起作用。 – ymajoros