HSTS란?
웹 브라우저가 HTTPS프로토콜만을 사용해서 서버와 통신하도록 하는 기능
일정시간 (max-age) 동안 HSTS 응답을 받은 웹사이트에 대해서 https 접속을 강제화

HTTPS 접속이 실패하는 경우 사이트 접근에 실패하게 됨.
HSTS를 사용하는 대신 서버에서 HTTP 접속을 HTTPS로 redirect 시키는 방법이 있지만 HTTP 연결을 거쳐가는 것이기 때문에
쿠기 정보 탈취 등 보안에 취약함.

브라우저에서 http://d.com 으로 접속을 하면 웹서버에서 https로 접속하라고 보내옵니다.

HTST 설정
서버에서 HTTP 응답 헤더 필드에 'Strict-Transport-Security'라는 필드를 내려주면 브라우저는 그 사이트에
접속할 때 무조건 HTTPS로만 연결한다.
HSTS가 적용되기 위해서는 서버도 헤더를 내려줘야하고 브라우저도 그 헤더에 따른 동작을 해야 함
HTTP 응답 헤더에 정보를 내려주면 된다.

Spring Security를 사용하는 방법 

https://docs.spring.io/spring-security/site/docs/4.0.x/reference/html/headers.html#headers-hsts
HSTS 헤더 [예]
max-age=31536000 : HSTS가 브라우저에 설정될 시간이며 초단위
includeSubdomains : HSTS가 적용될 도메인의 서브 도메인(www. gurubee.net 적용 시 wiki.gurubee.net)에도 적용
preload : 브라우저가 해당 사이트를 HSTS 적용 preload list에 추가하도록 함

Strict-Transport-Security: max-age=31536000;includeSubDomains;preload


preload list
HSTS는 HTTPS로 웹 사이트에 접속하기 위해 적어도 한번 웹 서버와 통신을 해야하는데 통신 전에 미리 HTTPS로 접속하도록 목록을
미리 만들어 놓은 것.
브라우저에서 지원하는 기능이며, 브라우저 안에 기본적으로 내장되어 있는 사이트 목록들이 있음
서버가 헤더에 preload값을 내려주면 이 목록에 해당 사이트도 추가 됨.
preload에 추가된 상디트는 서버가 HSTS헤더를 삭제해도 브라우저에는 설정이 유지된다.
Chrome의 HSTS preload 리스트는 IE 등 타 브라우저에서도 활용하고 있는 것으로 파악 됨
preload list에 추가는 신중해야 함

HSTS 설정 시 주의사항
서버측 redirection 처리를 별도로 하지 않았는데 https로 자동 URL이 변경되는 경우가 있다면 HSTS 헤더를 의심
HSTS 헤더가 설정된 https url에 한번이라도 접속하면, HTTP 접속 시에도 HTTPS로 접속됨.
Spring Security에서 디폴트로 HTTPS 요청 시에 HSTS 헤더값을 내려주도록 되어 있음.

+ Recent posts