Конфигурация Spring Strict Transport Security (HSTS) не работает

Я пытаюсь включить HSTS в моем приложении Spring Boot. Я добавил следующее в свой WebSecurityConfig (на основе Включить HTTP Strict Transport Security (HSTS) с приложением весенней загрузки):

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
{
    protected void configure(HttpSecurity http) throws Exception
    {
        // Other http configurations, e.g. authorizeRequests and CSRF
        // ...

        http.headers().httpStrictTransportSecurity()
            .maxAgeInSeconds(Duration.ofDays(365L).getSeconds())
            .includeSubDomains(true);
    }
}

Я понимаю strict-transport-security заголовок в запросах HTTPS, но максимальный возраст всегда 0:

strict-transport-security: max-age=0; includeSubDomains

Я получаю точно такой же заголовок, если я не добавляю конфигурацию Spring, так что, похоже, моя конфигурация не берется. Похоже, что это специфично для конфигурации HSTS, потому что другие конфигурации, например http.authorizeRequests(), работают. Кажется, это указывает на то, что конфигурация HSTS каким-то образом перезаписывается, особенно если учесть, что максимальный возраст Spring по умолчанию - один год. Тем не менее, я смог найти любую другую конфигурацию, связанную с HSTS, в нашей кодовой базе.

Я также попытался установить точку останова в o.springframework.s.c.a.w.c.HeadersConfigurer.HstsConfig#maxAgeInSeconds проверить, вызывается ли он более одного раза. Мой звонок от configure был единственный призыв.

Кто-нибудь знает, почему моя конфигурация HSTS не используется? Или у вас есть другие идеи о том, как отладить это?

1 ответ

Оказывается, это было вызвано конфигурацией Cloudflare, которая переписала заголовок и установила для параметра max-age значение 0.

Также было проще обновить конфигурацию Cloudflare, чем обновить конфигурацию в каждом микросервисе.

Другие вопросы по тегам