我正在尝试在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配置吗?或者您对如何调试它还有其他想法吗?
答案 0 :(得分:0)
事实证明,这是由Cloudflare配置导致的,该配置重写了标头并将max-age设置为0。
更新Cloudflare配置比更新每个微服务中的配置也容易。