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 に答える