Apache 2 HSTS 설정 (Strict-Transport-Security)

HSTS(Strict-Transport-Security)는 브라우저 단에서 HTTPS 사용을 강제합니다.

SSL Strip을 이용한 MITM 공격(man in the middle attack)을 방지하기 위해 사용합니다.


(참고 - SSL Strip을 이용한 MITM 공격)
예를 들어 PC와 웹서버 사이에서 악의적인 중간자가 네트워크를 장악하고,
PC와 중간자 사이를 HTTP로 통신하고, 중간자와 웹서버 사이를 HTTPS로 통신을 한다면,

웹서버 입장에선 HTTPS로 통신했음에도 불구하고 실제 클라이언트는 HTTP 로 통신하게 되어
정보를 누출당하는 문제가 있습니다.

사용자 ------- 중간자 ------- 웹서버  (빨간색 : 취약한 부분)


Strict-Transport-Security 문법은 다음과 같습니다.

1
2
3
Strict-Transport-Security: max-age=<expire-time>
Strict-Transport-Security: max-age=<expire-time>; includeSubDomains (선택)
Strict-Transport-Security: max-age=<expire-time>; preload (선택)
cs

-> <expire-time> 동안 해당 도메인은 브라우저단에서 HTTPS 사용을 강제한다.
-> includeSubDomains 옵션 포함시 서브 도메인도 HTTPS 사용을 강제한다.
-> preload 옵션은 브라우저의 HSTS preload list 와 관련이 있음

* expire-time은 초 단위이며, 굉장히 큰 값을 권고하고 있습니다. (1년 이상)

레퍼런스



Apache 2 설정

/etc/httpd/conf/httpd.conf 에 다음 중 하나를 선택하여 추가합니다.

1
2
3
4
Header always set Strict-Transport-Security "max-age=31536000;"
Header always set Strict-Transport-Security "max-age=31536000; preload"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set Strict-Transport-Security "max-age=31536000; preload; includeSubDomains"
cs

(예시)
1
Header always set Strict-Transport-Security "max-age=15768000; preload"
cs

만약 Virtualhost을 통해 도메인 이름별로 구분하여 운영하고 싶으면,
<VirtualHost></VirtualHost> 안에 기재해도 됩니다.

(예시)
1
2
3
4
5
6
7
8
9
<VirtualHost *:443>
ServerName example.com
DocumentRoot /var/www/html
 
SSLEngine on
.......
 
Header always set Strict-Transport-Security "max-age=15768000; preload"
</VirtualHost>
cs

댓글