WSS4J с Spring WS (аутентификация пользователя/пароля + .cert)

Я работаю с интеграцией Spring + Spring WS Security через WSS4JSecurityInterceptor.

У меня есть клиент WS, использующий веб-службу на сервере со следующим сценарием безопасности:

  • Упреждающая аутентификация HTTPS (пользователь и пароль)
  • Сторона сервера дает мне файл .cert для подписи, но я не знаю, как преобразовать его в .jks (файл хранилища ключей)

С этими двумя реквизитами я немного запутался с примерами, предоставленными документацией Spring о конфигурации клиент/сервер. Я не могу изменить никакую конфигурацию на стороне сервера. У меня просто есть: пользователь, пароль и файл .cert.

У меня есть следующая конфигурация Java, но я не уверен, что она решает мой подробный сценарий:

@Bean
public Wss4jSecurityInterceptor wss4jSecurityInterceptor() throws IOException, Exception{
    Wss4jSecurityInterceptor interceptor = new Wss4jSecurityInterceptor();
    interceptor.setSecurementActions("UsernameToken Encrypt");
    interceptor.setSecurementUsername("https user");
    interceptor.setSecurementPassword("https password");
    interceptor.setValidationActions("Signature");
    interceptor.setValidationSignatureCrypto( NEED TO BE DEFINED );
    return interceptor;
}

person crm86    schedule 18.12.2014    source источник


Ответы (1)


Решение для этого сценария:

  1. Прежде всего, импортируйте файл .cer в собственное хранилище ключей:

    keytool -importcert -v -trustcacerts -file "path\to\file.cer" -alias myAlias ​​-keystore "myNewKeyStore.jks" -storepass myPass

  2. Поместите файл в путь к классам

  3. Если вы используете maven, настройте его так, чтобы он включал файлы .jks и БЕЗ ФИЛЬТРАЦИИ для ресурсов такого типа. Это важно для сохранения сертификата в том виде, в каком он есть при компиляции.

  4. Адаптируйте эту конфигурацию к вашему сценарию WS:

    @Bean
    public Wss4jSecurityInterceptor wss4jSecurityInterceptor() throws Exception{
    
      Wss4jSecurityInterceptor interceptor = new Wss4jSecurityInterceptor();
      interceptor.setSecurementActions("UsernameToken");
      interceptor.setSecurementUsername("user http");
      interceptor.setSecurementPassword("pass http");
      interceptor.setValidationActions("Signature");
      interceptor.setValidationSignatureCrypto( myCrypto() );
      interceptor.afterPropertiesSet();
      return interceptor;
    }
    
    
    @Bean
    public Crypto myCrypto() throws Exception{
        CryptoFactoryBean factory = new CryptoFactoryBean();
        factory.setTrustStorePassword( "myPass" );
        factory.setKeyStorePassword( "myPass" );
        factory.setKeyStoreLocation( new ClassPathResource("myNewKeyStore.jks") );
        factory.afterPropertiesSet();
        return factory.getObject();
    }
    
person crm86    schedule 23.12.2014
comment
Можно ли установить один перехватчик для конечной точки, а другой перехватчик для другого? - person Maske; 15.03.2021