Spring WSS4J Закрытый ключ для предоставленного псевдонима не существует в хранилище ключей - PullRequest
0 голосов
/ 10 сентября 2018

Я использую Spring + wss4j с конфигурацией аннотаций. Перехватчик Wss4jSecurityInterceptor имеет такую ​​конфигурацию:

@Bean
public Wss4jSecurityInterceptor sessionInterceptorNb() throws Exception {
    Wss4jSecurityInterceptor securityInterceptor = new Wss4jSecurityInterceptor();

    // set security actions
    securityInterceptor.setSecurementActions("UsernameToken Signature Encrypt");

    // sign the request
    securityInterceptor.setSecurementUsername("anyuser");
    securityInterceptor.setSecurementPassword("anypassword");

    securityInterceptor.setSecurementSignatureUser("privatecertuser");
    securityInterceptor.setSecurementSignatureCrypto(getCryptoFactoryBeanNb().getObject());
    securityInterceptor.setSecurementSignatureParts("{Content}{http://schemas.xmlsoap.org/soap/envelope/}Body");

    return securityInterceptor;
}

Вот и все. Я хочу установить anyuser и anypassword для элемента запроса UsernameToken и использовать privatecertuser для подписания запроса, но я получаю эту ошибку:

    Original Exception was java.security.UnrecoverableKeyException: Cannot recover key

Caused by: org.apache.wss4j.common.ext.WSSecurityException: Error during Signature: 
    at org.apache.wss4j.dom.action.SignatureAction.execute(SignatureAction.java:163)
    at org.apache.wss4j.dom.handler.WSHandler.doSenderAction(WSHandler.java:238)
    at org.springframework.ws.soap.security.wss4j2.Wss4jHandler.doSenderAction(Wss4jHandler.java:63)
    at org.springframework.ws.soap.security.wss4j2.Wss4jSecurityInterceptor.secureMessage(Wss4jSecurityInterceptor.java:574)
    ... 45 common frames omitted
Caused by: org.apache.wss4j.common.ext.WSSecurityException: The private key for the supplied alias does not exist in the keystore
    at org.apache.wss4j.dom.message.WSSecSignature.computeSignature(WSSecSignature.java:595)
    at org.apache.wss4j.dom.action.SignatureAction.execute(SignatureAction.java:155)
    ... 48 common frames omitted

Я использую команду keytool -list -v -keystore для просмотра содержимого хранилища ключей и вижу личную запись для "privatecertuser".

Если я удалю вызов метода к

securityInterceptor.setSecurementSignatureUser("privatecertuser");

и установить это значение в методе setSecurementUsername отлично работает.

Что может быть не так в конфигурации?

...