5

我需要编写一个 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 文件中定义的安全要求(如果我错了,请纠正我)。

4

1 回答 1

4

看起来您需要使用 WS-Security 标准对消息进行签名。WS-security 标准没有指定到 wsdl 文件的任何安全映射。一些应用程序将 WS-Security 策略和 WS-Policy Attachement 与 Ws-security 结合使用。WS-Policy Attachment 确实指定了将策略映射到 WSDL 的方式。

您可以从 w3.org 了解有关这些标准的更多信息

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

于 2010-12-07T18:22:34.107 回答