質問

私はsoapクライアントとsoapサーバーの両方が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); 
役に立ちましたか?

解決 2

私は正しい答えを見つけました。

Wss4JoutinterceptorおよびWss4Jininterceptorに渡されるプロパティマップでは、ENABLE_SIGNATURE_CONFIRMATIONを追加します。

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

これはクライアントとサーバーの両方で設定する必要があります。また、クライアントで署名確認を有効にしてもサーバーでは有効にしない場合、クライアントは例外をスローします。

他のヒント

アクションは、署名確認要素を応答に追加するのを大事にする「EnableSignatureConfirmation」でなければなりません。

signingProps.put(WSHandlerConstants.ACTION, "enableSignatureConfirmation");
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top