使用Java调用安全的Web服务

时间:2010-12-07 17:42:32

标签: java web-services security soap ws-security

我需要编写一个Web服务客户端来调用第三方Web服务(基于SOAP)。第三方发布了wsdl和相关的xsd文件。

第三方使用.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文件中定义的安全要求(如果我错了,请纠正我)。

1 个答案:

答案 0 :(得分:4)

您似乎需要使用WS-Security标准为您签名。 WS-security标准未指定任何到wsdl文件的安全性映射。某些应用程序将WS-Security策略和WS-Policy Attachement与Ws-security结合使用。 WS-Policy Attachment确定了将策略映射到WSDL的方法。

您可以从w3.org

了解有关这些标准的更多信息

是的,你是在正确的道路上,可以使用WSS4J或轴壁垒你的选择。