1. 사용 이유
HTTPS를 강제하는 사이트의 경우 HTTP로 접속할 때, 302 Found(요청된 리소스가 임시적으로 이동 페이지로 이동)로 인해 리다이렉트되는 경우가 있다. 이로 인해 SSL Strip(중간자 공격 방법 중 일부) 공격에 취약해진다.
그렇기 때문에 HTTPS 요청만 사용하도록 설정해주는 HSTS를 사용해야한다.
참고 : https://webhack.dynu.net/?idx=20161112.001
2. HSTS 활성화
2.1. nginx 구성 파일 설정
$ vi /etc/nginx/sites-available/default
>
server {
listen 80 default_server;
listen [::]:80 deafult_server;
etc ...
}
server {
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
etc ...
}
구성 파일을 열면 80번(http)포트 서버와 443번(https)포트 서버에 대한 설정이 각각 있다.
443번 포트 서버에
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
>
server {
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
etc ...
}
add header Strict-Transport-Security를 추가한다.
- options
옵션명 | 설명 | 비고 |
---|---|---|
max-age | HSTS가 브라우저에 설정될 시간 값 | 초단위로 설정, Ex) 606024 = 86,400 = 1day |
includeSubdomains | HSTS가 적용될 도메인의 서브 도메인 적용 여부 | 해당값을 추가하게되면 example.com-> www.example.com, test.example.com까지 확장되어 적용됩니다. |
preload | HSTS가 브라우저 측에서 Preload 적용여부 | 추가시 브라우저 preload list에 추가됩니다. |
참고 : https://akageun.github.io/2018/03/07/hsts.html
2.2. Nginx 재시작
$ service nginx restart
2.3. HSTS 활성화 확인
# curl -I https://{도메인 주소}
$ curl -I https://example.com
>
HTTP/1.1 200 OK
Server: nginx/1.18.0 (Ubuntu)
Date: Wed, 24 Aug 2022 08:12:01 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 4511
Connection: keep-alive
X-Frame-Options: DENY
Vary: Cookie
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Strict-Transport-Security가 나온다면 활성화 완료