3

我已经获得了一个 Web 服务的 WSDL。我现在需要对该请求进行数字签名。以前的开发人员利用 Eclipse 特性来生成代理类。将 WSDL 添加到项目中,然后右键单击它,单击“Web Service”,然后单击“Generate Client”。

在我们被要求对请求进行数字签名之前,这一直很好。我做了一些挖掘,看起来 Axis 1.4 不允许您签署请求。您可以使用 WSS4J 来做到这一点。我在 WSS4j 1.5 中加入了我的项目。

我不知道如何对请求进行数字签名。这是我现有的使用代理类的代码:

XiSecureWSServiceLocator service = new XiSecureWSServiceLocator();
service.setXiSecureWSServicePortEndpointAddress(paymetricPortAddress);
XiSecureWSPortType proxy = service.getXiSecureWSServicePort();
((Stub) proxy).setTimeout(paymetricTimeOutinMillisec);

SDecrypt_InputType sdi = new SDecrypt_InputType();
sdi.setStrToken(ccNumber);
sdi.setStrUserID(user);

SDecrypt_OutputType sdo = null;
sdo = proxy.pm_SingleDecrypt(sdi);

我想做的是类似于这篇文章的事情。这是他们使用的一个函数:

public Message signSOAPEnvelope(SOAPEnvelope
unsignedEnvelope) throws Exception
{
  WSSignEnvelope signer = new WSSignEnvelope();
  String alias = "16c73ab6-b892-458f-abf5-2f875f74882e";
  String password = "security";
  signer.setUserInfo(alias, password);
  Document doc = unsignedEnvelope.getAsDocument();
  Document signedDoc = signer.build(doc, crypto);
  // Convert the signed document into a SOAP message.
  Message signedSOAPMsg =
  (org.apache.axis.Message)AxisUtil.toSOAPMessage(signedDoc);
  return signedSOAPMsg;
}

当创建它的所有代码都隐藏在生成的代理类中时,我如何才能对 Soap Envelope 进行签名?

4

2 回答 2

3

这个 JavaRanch 线程解释了使用 Axis 处理程序使用 WSS4J 实现安全性和加密。

看起来你必须做很多事情:

  1. 配置/编写 wsdd
  2. 使用指向您的 wsdd 文件的 EngineConfiguration 调用 Web 服务
  3. 编写密码回调类
  4. 编写一个 crypto.properties 文件
  5. 确保 crypto.properties 文件和包含证书的密钥库位于应用程序的类路径中。

在 JavaRanch 论坛上向 John Farrel 表示支持,以解决所有这些问题。

总而言之,有点蛋疼。如果有办法从 Axis 代理类获取底层 SOAP 消息本身,那可能是一种更快的方法,但我对 Axis 1 没有太多经验。

顺便说一下,来自 /r/java 的您好!

于 2012-05-09T17:21:09.880 回答
0

发现这个:

任何人都可以向我推荐或指出我在某个地方描述了一种简单、直接的方式来使用 Axis 框架内的数字签名对 SOAP 请求进行签名吗?

“看看 WSS4J 项目。它们提供 Axis 处理程序用于签名和加密,如 WS 安全中所述。”

http://mail-archives.apache.org/mod_mbox/axis-java-user/200403.mbox/%3CCGEOIPKACAGJDDPKCDIHEEKACCAA.abhinavm@contata.co.in%3E -

这有帮助吗?

于 2012-05-08T19:04:19.307 回答