Как включить элемент подписи в системе SignatureConfirmation в сервере SOAP Apache CXF
-
12-11-2019 - |
Вопрос
У меня есть клиент SOAP, а также сервер SOAP, использующий CXF.У меня есть подписание сообщений работает правильно.Когда я указываю на мой SOAP клиент на другом сервере SOAP, используя IBM SOAP Appliance, сообщения ответа содержат элемент подписания.Я хочу убедиться, что мой сервер на базе CXF дает те же результаты, что и сторонние серверы 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
Я нашел правильный ответ.
в карте свойств, передаваемые на wss4joutinterector и wss4jininterceptor, добавьте enable_signature_confirmation, i.e.
signingProps.put(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, "true" );
Это должно быть установлено как на клиенте, так и на сервере, либо не будет работать.Также, если вы включите подтверждение подписи на клиенте, но не на сервере, то клиент бросит исключение.
Другие советы
Действие должно быть «включено», которое позаботится о добавлении элемента подтверждения подписи в ответ.
signingProps.put(WSHandlerConstants.ACTION, "enableSignatureConfirmation");
.