Spring Boot & Spring Security ベースの WEB アプリケーションを
https://mydomain
(SSL) で動かしたら、
http://sub.mydomain
(サブドメインで非SSL) にアクセスできなくなったときのメモ。
HSTS
原因は HSTS (HTTP Strict Transport Security) という仕組みでした。
HSTS という仕組みを今更ながら知った (^^;;
— Akihiro Kondo (@akihyro) April 15, 2016
Spring BootアプリをHTTPSで動かしたら、そのサブドメインがHTTPで突然見れなくなって不思議だった。自動でStrict-Transport-Securityヘッダ付けてくれてるのかな...
— Akihiro Kondo (@akihyro) April 15, 2016
Strict-Transport-Security
ヘッダで includeSubDomains
が指定されていたため、
サブドメインの方まで HTTPS にリダイレクトされたような動きをしていたようです。
対策
spring-boot-starter-security
をそのまま使ってる場合は、
プロパティ (application.yml
とか) で
security.headers.hsts
を設定してあげればOKでした。
このへんの自動設定 で制御してる感じでした。
security.headers.hsts: DOMAIN # NONE : "Strict-Transport-Security" ヘッダを吐かない。 # DOMAIN: "includeSubDomains" を付けない。 # ALL : "includeSubDomains" を付ける。
WebSecurityConfigurerAdapter
でカスタマイズしてる場合は、
こんなコードでいけました。
@Override protected void configure(HttpSecurity http) throws Exception { http.headers().httpStrictTransportSecurity().includeSubDomains(false); }