개발노트
고즐의 개발 및 서버 개발 노트![]()
HTTPS + HSTS + TLS 1.3 보안 강화 완전 가이드
웹사이트 보안을 강화하기 위해서는 HTTPS 적용뿐 아니라 HSTS 설정과 TLS 1.3을 활성화하는 것이 필수적이다. 이 세 가지는 각각 역할이 다르며 함께 적용될 때 가장 높은 수준의 보안을 제공한다. 아래에서는 개념부터 실전 설정까지 상세하게 정리한다.
HTTPS란 무엇인가
기본 개념
HTTPS는 HTTP 통신에 SSL TLS 암호화 계층이 추가된 형태로, 클라이언트와 서버 간 데이터를 보호하기 위해 사용된다. 정보가 암호화되므로 중간에서 감청하거나 조작하는 공격을 방지할 수 있다. 브라우저의 주소창에서 보이는 잠금 아이콘은 HTTPS를 의미하며, 이는 검색 엔진에서도 긍정적인 요소로 평가된다.
HTTPS 강제 적용 리다이렉트
HTTP 요청을 무조건 HTTPS로 전환하는 설정은 필수적이다. Apache와 Nginx 모두 간단한 리다이렉트 설정으로 구현할 수 있다.
# Apache .htaccess RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] # Nginx server { listen 80; return 301 https://$host$request_uri; } HSTS의 역할과 적용 방법
HSTS란 무엇인가
HSTS는 HTTP Strict Transport Security의 줄임말이며, 브라우저가 지정된 기간 동안 해당 도메인에 반드시 HTTPS로만 접속하도록 강제하는 정책이다. 이 기능은 HTTPS 다운그레이드 공격과 TLS Stripping과 같은 중간자 공격을 효과적으로 차단한다.
HSTS 적용 예제
# Apache Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" # Nginx add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
Preload 옵션 주의 사항
preload 옵션은 Chrome 등 주요 브라우저의 HSTS Preload List에 도메인을 등록하도록 요청하는 기능이다. 이 리스트에 등록되면 브라우저는 사이트에 처음 접속하기 전에도 HTTPS를 강제하게 된다. 하지만 서브도메인 전체가 HTTPS로 구성되지 않았거나 테스트 중인 환경이라면 preload 적용은 신중해야 한다.
TLS 1.3 활성화와 최신 암호화 구성
TLS 1.3의 특징
TLS 1.3은 TLS 1.2보다 빠르고 안전한 최신 암호화 프로토콜이다. 핸드셰이크 과정이 단축되어 체감 속도가 향상되며, 오래된 취약한 암호 알고리즘을 제거하여 보안성이 높다. 최신 브라우저와 서버 환경에서는 기본적으로 TLS 1.3을 지원한다.
Apache, Nginx에서 TLS 1.3 활성화
# Apache SSLProtocol TLSv1.2 TLSv1.3 SSLHonorCipherOrder off # Nginx ssl_protocols TLSv1.3 TLSv1.2; ssl_prefer_server_ciphers off;
취약한 TLS 버전 비활성화
TLS 1.0과 1.1은 다양한 취약점이 존재하며 최신 환경에서는 사용을 지양해야 한다. 이를 비활성화함으로써 보안 점수를 높이고 공격 가능성을 줄일 수 있다.
SSL Labs 점수 향상 실전 체크리스트
필수 구성 요소
웹사이트 보안 등급 테스트로 잘 알려진 SSL Labs에서 높은 점수를 받기 위해서는 특정 조건을 충족해야 한다. 아래 요소들은 가장 중요한 항목들이다.
1. HSTS 적용 여부
HSTS는 SSL Labs에서 높은 점수에 큰 영향을 준다. 특히 preload 등록이 되어 있으면 더욱 높은 평가를 받을 수 있다.
2. 강력한 Cipher Suite 사용
TLS 1.3에서는 Cipher Suite 선택이 단순해졌고, TLS 1.2 이하에서는 취약한 암호 알고리즘을 제거해야 한다.
# 안전한 Cipher 예제 ssl_ciphers HIGH:!aNULL:!MD5:!3DES:!RC4;
3. OCSP Stapling 활성화
이 기능은 인증서 폐기 상태를 빠르게 검증하여 보안과 성능 모두에 도움을 준다.
# Nginx ssl_stapling on; ssl_stapling_verify on;
4. Diffie-Hellman 키 길이 강화
# DH 파라미터 생성 openssl dhparam -out /etc/ssl/dhparam.pem 4096
Apache 또는 Nginx에서 해당 DH 파일을 로드하면 강력한 키 교환 방식을 사용할 수 있다.
설정 후 검증 방법
curl 명령어로 HSTS와 HTTPS 상태 확인
curl -I -L https://도메인
위 명령어를 통해 Strict-Transport-Security 헤더 적용 여부, 리다이렉션 상태, TLS 버전 등 다양한 항목을 즉시 확인할 수 있다.
SSL Labs 테스트 활용
SSL Labs의 SSL Server Test 페이지에 도메인을 입력하면 전체 보안 구성 상태를 분석하고 점수를 제공한다. 설정이 제대로 되어 있다면 높은 등급을 획득할 수 있으며 부족한 점은 상세하게 확인할 수 있다.
이렇게 HTTPS, HSTS, TLS 1.3을 함께 구성하면 현재 표준에서 가장 높은 단계의 보안을 적용한 웹사이트를 운영할 수 있다. 특히 HSTS Preload 리스트 등록까지 완료하면 처음 접속부터 HTTPS만 사용하게 되어 보안 효과가 더욱 커진다. 웹사이트의 신뢰성을 높이고 방문자에게 안전한 경험을 제공하려면 필수적으로 고려해야 할 구성이다.