Как создать весеннее загрузочное приложение с ssl.enable = true и небезопасной конечной точкой "/ health" - PullRequest
0 голосов
/ 12 мая 2018

Можно ли настроить приложение весенней загрузки (Jetty) на наличие хотя бы одной незащищенной (не https) конечной точки, чтобы балансировщик нагрузки мог выполнять проверки работоспособности, но все остальные запросы должны быть безопасными?

При установке свойства:

server.ssl.enabled=true

запросы на все порты (как обычный порт, так и порт управления / исполнительного устройства) должны быть https.

Защищенные запросыУ URLS должно быть имя сервера в URL, совпадающее с настроенным сертификатом.Балансировщик нагрузки или диспетчер контейнеров, такой как kubernetes, должен был бы получить доступ к каждому узлу в пуле серверов с каким-либо отображением имени хоста на сервер.

1 Ответ

0 голосов
/ 04 сентября 2018

Изначально я думал, что настройка management.ssl.enable=false поможет, но это не так. То, что я закончил, сработало для меня, так это добавление правила исключения ssl только для конечной точки /health.

Вот сокращенная версия моего SecurityConfiguration, который является @Configuration аннотированным классом, который расширяет / реализует WebSecurityConfigurerAdapter/WebSecurityConfigurer.

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/secure-path").hasAuthority("SOME_ROLE")
            .anyRequest().authenticated()
            .and()
                .formLogin()
                .loginPage("/login")
                .permitAll()
            .and()
                .logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                .logoutSuccessUrl("/login")
                .permitAll()
            .and()
                .exceptionHandling();



    if (securityProperties.isRequireSsl()) {
        //allow health checks to be over http
        http.requiresChannel().antMatchers("/health").requiresInsecure();
        http.requiresChannel().anyRequest().requiresSecure();
    }
}

ключом была requiresInsecure() для конечной точки /health. Обратите внимание, порядок важен, обычно в Spring Security более конкретные правила должны стоять на первом месте.

...