Заголовки SoapFault MustUnderstand, CXF WSS4J Файл криптографических свойств не предоставлен

Мой сервер SOAP получает сообщение SOAP, для заголовков которого установлено значение 1.

MustUnderstand Headers

Чтобы понять заголовок, я использую перехватчик wss4j.

Мой файл sign.properties:

org.apache.ws.security.crypto.provider=org.apache.wss4j.common.crypto.Merlin
org.apache.ws.security.crypto.merlin.truststore.type=jks
org.apache.ws.security.crypto.merlin.truststore.password=changeit    
org.apache.ws.security.crypto.merlin.truststore.file=keystore/truststore.jks

Моя конечная точка xml:

    <jaxws:inInterceptors>
        <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
            <constructor-arg>
                <map>
                    <entry key="action" value="Timestamp Signature"/>
                    <entry key="signaturePropFile" value="XXXXXX/WEB-INF/classes/etc/sign.properties"/>
                    <entry key="passwordCallbackClass" value="XX.XX.XX.XXXXXX.lifecycleapp.UTPasswordCallback"/>
                </map>
            </constructor-arg>
        </bean>
    </jaxws:inInterceptors>  

Однако я получаю сообщение об ошибке org.apache.wss4j.common.ext.WSSecurityException: для проверки подписи не предоставлен файл криптографических свойств.

Файл криптографических свойств не предоставлен для проверки подписи

Я предполагаю, что это что-то настолько простое, как неправильное обращение к signaturePropFile, но я попытался указать полный путь к файлу, но это вернуло тот же результат.

Любая помощь будет принята с благодарностью.


person Rudder_NZ    schedule 05.05.2015    source источник


Ответы (2)


Начните с включения ведения журнала DEBUG / FINE. Он точно скажет вам, в чем проблема ... вероятно, он не может загрузить указанный вами путь. Вместо этого я бы предложил попробовать следующее:

<entry key="signaturePropFile" value="classes/etc/sign.properties"/>

Колм.

person Colm O hEigeartaigh    schedule 05.05.2015
comment
Спасибо за помощь. В итоге я выбрал следующий путь: ‹entry key = signaturePropFile value = etc / Client_Sign_In.properties /› Мне также нужно было добавить: ‹entry key = signatureAlgorithm value = w3.org/2000/09/xmldsig#rsa-sha1 - person Rudder_NZ; 07.05.2015

Это случилось со мной, потому что я пытался использовать HashMap вместо Properties карты.

То есть вместо следующего

Map<String, Object> outProps = new HashMap<>(7);
outProps.put(WSHandlerConstants.ACTION, WSHandlerConstants.TIMESTAMP + " " + WSHandlerConstants.SIGNATURE);
outProps.put(WSHandlerConstants.USER, CLIENT_SSL_CERT_ALIAS);
outProps.put(WSHandlerConstants.PW_CALLBACK_REF, new ClientPasswordCallback(privateKeyPassword));
outProps.put(WSHandlerConstants.SIG_KEY_ID, "DirectReference");
outProps.put(WSHandlerConstants.SIGNATURE_PARTS, "{Element}{" + "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" + "}Timestamp");

Properties signingCryptProperties = new Properties();

// Reference: http://camel.465427.n5.nabble.com/Dynamically-set-WSS4J-interceptor-properties-td5551391.html
signingCryptProperties.put("org.apache.ws.security.crypto.provider", "org.apache.ws.security.components.crypto.Merlin");
signingCryptProperties.put("org.apache.ws.security.crypto.merlin.keystore.password", keystorePassword);
signingCryptProperties.put("org.apache.ws.security.crypto.merlin.keystore.file", "client.jks");
signingCryptProperties.put("org.apache.ws.security.crypto.merlin.keystore.type", "JKS");

outProps.put(SIG_PROP_REF_ID, signingCryptProperties);
outProps.put(WSHandlerConstants.SIG_PROP_REF_ID, SIG_PROP_REF_ID);

WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps);

Я пытался сделать signingCryptProperties а HashMap вот так

Map<String, String> signingCryptProperties = new HashMap<String, String>()

и это вызвало WSSecurityEngine: No crypto property file supplied to verify signature WSSEcurityException

person Kirby    schedule 03.08.2016