Nginx HTTPS 보안 강화 (HSTS, TLS 설정 점검)
Let’s Encrypt로 인증서를 붙였다고 HTTPS 설정이 끝난 것은 아니다. 오래된 TLS 버전이 열려 있거나, 처음 접속할 때 http로 들어오는 틈이 남아 있을 수 있다. 이 글은 인증서 발급 다음 단계로 할 Nginx HTTPS 보안 강화 설정인 HTTP 리디렉션, TLS 버전, HSTS, 점검 방법을 정리한다. 인증서 자동 갱신 점검은 certbot 인증서 갱신 점검에 먼저 정리해 두었다.

Nginx HTTPS 보안 1단계 http를 https로 보내기
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
certbot –nginx로 발급했다면 이 리디렉션을 자동으로 넣어 주기도 한다. 다른 사이트 설정과 함께 관리하는 방법은 Nginx server 블록에 있다.
Nginx HTTPS 보안 2단계 TLS 버전 정리
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
...
}
TLS 1.0과 1.1은 오래전에 주요 브라우저에서 지원이 끝났다. 1.2와 1.3만 열어 두면 된다. certbot이 넣어 주는 /etc/letsencrypt/options-ssl-nginx.conf에도 적절한 기본값이 들어 있으니, 직접 고칠 때는 중복 설정이 없는지 nginx -t로 확인하자. 서버 환경에 맞는 권장 설정은 Mozilla SSL Configuration Generator에서 만들 수 있다.
Nginx HTTPS 보안 3단계 HSTS 적용
HSTS(Strict-Transport-Security)는 브라우저에게 “앞으로 이 사이트는 무조건 https로만 접속하라”고 알려 주는 헤더다. 사용자가 주소창에 http로 입력해도 브라우저가 알아서 https로 바꿔 접속한다.
# 443 server 블록 안
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
- max-age=31536000은 1년 동안 기억하라는 뜻이다. 처음에는 max-age=300 정도로 짧게 시작해 문제없는지 본 뒤 늘리는 것이 안전하다.
- includeSubDomains를 넣으면 모든 하위 도메인도 https가 강제된다. 아직 https가 없는 하위 도메인이 있다면 빼야 한다.
- preload 목록 등록은 되돌리기 어려우니 충분히 운영해 본 뒤 결정한다.
add_header 상속 주의
Nginx에서 location 블록 안에 add_header를 하나라도 쓰면, 바깥 server 블록의 add_header는 그 location에 적용되지 않는다. 캐시 헤더 등을 location에 추가했다면 HSTS 헤더도 다시 넣어야 한다.
설정 점검
sudo nginx -t && sudo systemctl reload nginx
# 헤더 확인
curl -sI https://example.com | grep -i strict
# TLS 1.1 접속이 거부되는지
openssl s_client -connect example.com:443 -tls1_1 < /dev/null
curl 사용법은 curl 사용법에 있다. 종합 점검은 SSL Labs 서버 테스트에 도메인을 넣으면 등급과 함께 개선할 점을 알려 준다.
마무리
http 리디렉션, TLS 1.2 이상, HSTS 세 가지면 일반적인 사이트의 HTTPS 보안은 충분하다. HSTS는 짧게 시작해 늘리고, location의 add_header 상속만 조심하자. 연결 문제를 점검하는 방법은 다음 날 글인 포트 연결 테스트에서 이어진다.
첫 댓글을 남겨보세요