在Java中调用安全Web服务

在Java中调用安全Web服务,java,web-services,security,soap,ws-security,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>

我需要编写一个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>

wsse:无效安全
SECU1075:处理wsse:Security>标头时发现错误
SECU3510:签名要求验证失败:元素(/soapenv:Envelope/soapenv:Body)未签名
嗯,好的。我应该在文件上签字,这是有道理的

奇怪的是(对我来说)WSDL文件中没有安全定义。这正常吗?我联系了第三方,他们向我发送了一份关于SOAP消息的pdf格式。标题中显示以下标记: 包含:

<wsse:BinarySecurityToken>


所以从我收集的资料来看,它需要我的证书和一些数字签名


有人能推荐如何在Java中生成这些吗?我是从Axis2/Rampart路径开始的,但老实说,这些都是基于WSDL文件中定义的安全性要求(如果我错了,请纠正我)。

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

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


是的,您走的是正确的道路,可以选择使用WSS4J或axis rampart

在读了你的评论后,我在Rampart上取得了一些进展。我想我需要有人告诉我,服务本身不需要安全定义,这样才能向前发展。听起来很奇怪。
<dsig:SignedInfo>