0

我有一个肥皂客户端和一个使用 CXF 的肥皂服务器。我的消息签名工作正常。当我使用 IBM SOAP 设备将我的 SOAP 客户端指向不同的 SOAP 服务器时,回复消息包含元素 SignatureConfirmation。我想确保我的基于 CXF 的 SOAP 服务器提供与第三方 SOAP 服务器相同的结果,那么如何配置我的服务器以启用该元素?

这是我设置服务器的方式:

signingProps.put(WSHandlerConstants.ACTION, "Timestamp Signature"); 
signingProps.put(WSHandlerConstants.SIGNATURE_PARTS, "{}{http://schemas.xmlsoap.org/soap/envelope/}Body ;" 
      + "{}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}" 
      + "Timestamp"); 
signingProps.put(WSHandlerConstants.SIG_KEY_ID, "IssuerSerial"); 

Properties keyStoreProps = new Properties(); 
keyStoreProps.put(LocalCryptoProvider.WS_CRYPTO_PROVIDER, 
    LocalCryptoProvider.class.getName()); 
keyStoreProps.put(LocalCryptoProvider.KEYSTORE_OBJECT, keyStore); 

WSS4JOutInterceptor outSigner = new WSS4JOutInterceptor(signingProps); 
cxfFactory.getOutInterceptors().add(new SAAJOutInterceptor()); 
cxfFactory.getOutInterceptors().add(outSigner); 
4

2 回答 2

1

该操作应该是“enableSignatureConfirmation”,它将负责将签名确认元素添加到响应中。

signingProps.put(WSHandlerConstants.ACTION, "enableSignatureConfirmation");
于 2011-02-12T01:45:10.347 回答
0

我找到了正确的答案。

在传递给 WSS4JOutInterceptor 和 WSS4JInInterceptor 的属性映射中添加 ENABLE_SIGNATURE_CONFIRMATION,即

signingProps.put(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, "true" );

这需要在客户端和服务器上都设置,否则它将不起作用。此外,如果您在客户端启用签名确认,但未在服务器上启用,则客户端将引发异常。

于 2011-09-19T22:40:04.047 回答