Конфигурация 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, чем обновить конфигурацию в каждом микросервисе.