Apache CXF SOAPサーバーでSignatureConfirmation要素を有効にする方法
-
12-11-2019 - |
質問
私は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");
. 所属していません StackOverflow