Spring Strict Transport Security(HSTS)配置不起作用

时间:2019-07-09 15:10:07

标签: java spring spring-boot spring-security strict-transport-security

我正在尝试在Spring Boot应用程序中启用HSTS。我已将以下内容添加到我的WebSecurityConfig中(基于Enable HTTP Strict Transport Security (HSTS) with spring boot application):

@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);
    }
}

在HTTPS请求中获得strict-transport-security标头,但最大年龄始终为0

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

如果我添加Spring配置,则会得到完全相同的标头,因此看起来我的配置没有被使用。它似乎特定于HSTS配置,因为其他配置(例如http.authorizeRequests(),正在工作。这似乎表明HSTS配置已经以某种方式被覆盖,尤其是考虑到Spring's default的最大使用期限为一年时。但是,我已经能够在我们的代码库中找到任何其他与HSTS相关的配置。

我还尝试在o.springframework.s.c.a.w.c.HeadersConfigurer.HstsConfig#maxAgeInSeconds中设置一个断点,以检查它是否被多次调用。我从configure发出的电话是唯一的调用。

有人知道为什么不使用我的HSTS配置吗?或者您对如何调试它还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

事实证明,这是由Cloudflare配置导致的,该配置重写了标头并将max-age设置为0。

更新Cloudflare配置比更新每个微服务中的配置也容易。