X509AuthenticationFilter - «Не найден сертификат клиента в запросе» - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть весеннее загрузочное приложение, предоставляющее REST API (HTTPS), и мне нужна двусторонняя взаимная аутентификация для клиентов.Клиентские сертификаты устанавливаются на складах доверенных сертификатов на стороне сервера.Взаимная аутентификация отлично работает при тестировании клиента и сервера на моем ноутбуке.Однако при развертывании приложения на тестовом сервере все клиентские вызовы отклоняются с помощью протокола HTTP 403 (запрещено) из-за безопасности Spring.В журналах отладки я вижу - "DEBUG osswapxX509AuthenticationFilter - сертификат клиента не найден в запросе."

pom.xml -

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
        <version>2.1.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.1.2.RELEASE</version>
    </dependency>

SecurityConfig.java -

@Configuration
@EnableWebSecurity (debug = true)
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/health", "/error", "/ecp**", "/getHtmlStatus", "/callOut")
        .permitAll()
        .anyRequest()
        .authenticated()
        .and().x509().subjectPrincipalRegex("CN=(.*?)(?:,|$)")
        .userDetailsService(userDetailsService());
  }
  @Bean
  public UserDetailsService userDetailsService() {
    return new UserDetailsService() {
      @Override
      public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        if (username.equalsIgnoreCase("iwc4-qa.abc.com") ||
            username.equalsIgnoreCase("qawr-backend.abc.com")) {
          return new User(username, "", true, true, true, true,
              AuthorityUtils.createAuthorityList("ROLE_USER"));
        } else {
          // Throw exception
        }
      }
    };
  }
}

application.yml -

spring:
  profiles: "e1"
  main:
    allow-bean-definition-overriding: true
server:
  port: 8443
  ssl:
    client-auth: want
    key-store: /opt/app-root/ssl/truststore
    key-store-password: Password#123
    key-store-type: JKS
    ciphers: ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_DHE_DSS_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA,TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA,TLS_EMPTY_RENEGOTIATION_INFO_SCSV
    trust-store: /opt/app-root/ssl/truststore
    trust-store-password: Password#123
    trust-store-type: JKS
    enabled: true
security:
  require-ssl: true

Когда такое же хранилище доверенных сертификатов загружается на локальный компьютер, оно работает нормально.Пробовал с помощью команды curl -

curl -ik --cert iwc_e1_chain.crt --key iwc_e1_key.crt "https://sparc-dev.abc.com/ssltest"

Пожалуйста, помогите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...