2010-12-07 27 views
5

我需要編寫一個Web服務客戶端來調用第三方Web服務(基於SOAP)。第三方發佈了一個wsdl和相關的xsd文件。在Java中調用安全的Web服務

第三方使用的.p12證書

我用的WSDL2Java生成我存根確保他們的網站和服務。我修改了端點並調用了服務。我收到以下錯誤:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header></SOAP-ENV:Header> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
     <faultcode xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">wsse:InvalidSecurity</faultcode> 
     <faultstring>SECU1075: An error was discovered processing the &lt;wsse:Security> header</faultstring> 
     <detail>SECU3510: Signature requirements validation failed: Element (/soapenv:Envelope/soapenv:Body) was not signed</detail> 
     </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

嗯,好的。有道理我應該簽署文件。

奇怪的部分(對我來說)在WSDL文件的任何地方都沒有安全定義。這是正常的嗎?我聯繫了第三方,他們給我發了一份關於SOAP消息需要的外觀的pdf。下面的代碼會顯示在標題: 包含:

<wsse:BinarySecurityToken> 

<dsig:SignedInfo> 

所以從我收集,它需要我的證書和一些數字簽名。

有人可以推薦如何在Java中生成這些文件嗎?我開始介紹Axis2/Rampart的路徑,但說實話,看起來這些預測是在WSDL文件中定義了安全需求(如果我錯了,請糾正我)。

回答

4

看起來您需要使用WS-Security標準爲您的消息簽名。 WS-security標準沒有指定任何到wsdl文件的安全映射。某些應用程序將WS-Security策略和WS-Policy Attachement與Ws-security結合使用。 WS-Policy Attachment確實指定了將策略映射到WSDL的方式。

您可以瞭解更多關於這些標準從W3.org網站

是的,你是在正確的道路上,可以使用WSS4J或軸壁壘它你的選擇。

+0

我看了你的評論後,我實際上已經與Rampart取得了一些進展。我認爲我需要某個人真正告訴我,服務本身並不需要安全定義來推進。這聽起來很奇怪。 – 2010-12-08 04:54:23