반응형
NGINX의 SSL/TLS 프로토콜 및 암호화 스위트를 안전하게 구성하는 방법
HTTP 요청을 HTTPS로 리다이렉트
server {
listen 80 default_server;
server_name _;
# 모든 HTTP 요청을 HTTPS로 리다이렉트
return 301 https://$host$request_uri;
}
HTTPS 요청을 특정 사이트로 리다이렉트
server {
listen 443 ssl default_server;
server_name _;
# SSL 인증서와 키 파일 경로 설정
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
# 모든 HTTPS 요청을 특정 사이트로 리다이렉트
return 301 https://www.example.com$request_uri;
}
전체 구성 파일 예제
server {
listen 80 default_server;
server_name _;
# 모든 HTTP 요청을 HTTPS로 리다이렉트
return 301 https://$host$request_uri;
}
server {
listen 443 ssl default_server;
server_name _;
# SSL 인증서와 키 파일 경로 설정
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
# 모든 HTTPS 요청을 특정 사이트로 리다이렉트
return 301 https://www.example.com$request_uri;
}
728x90
SSL/TLS 프로토콜 및 암호화 스위트를 안전하게 설정하기
SSL/TLS 프로토콜 설정
- TLS 1.2 및 1.3만 사용하도록 설정합니다.
ssl_protocols TLSv1.2 TLSv1.3;
암호화 스위트 설정
- 안전한 암호화 스위트만 사용하도록 설정합니다.
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
키 교환 및 인증 설정
ssl_prefer_server_ciphers on;
세션 설정
- 세션 재사용 및 타임아웃 설정을 통해 성능과 보안을 향상시킵니다.
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_session_tickets off;
ECDH 커브 설정
- Elliptic Curve Diffie-Hellman (ECDH) 커브 설정
ssl_ecdh_curve secp384r1;
OCSP Stapling 설정
- OCSP Stapling을 사용하여 인증서 상태를 확인하고 성능을 향상시킵니다.
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
강력한 DH 파라미터 사용
- strong DH parameters 파일을 생성하여 보안을 강화합니다.
openssl dhparam -out /etc/nginx/ssl/dhparam.pem 4096
- NGINX 설정에 추가
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
전체 SSL/TLS 설정 예제
#default_redirect
server {
listen 80 default_server;
server_name _;
return 301 https://www.example.com$request_uri;
}
server {
listen 443 ssl http2 default_server;
server_name _;
ssl_certificate /path/to/your/certificate.crt;
ssl_certificate_key /path/to/your/private.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers on;
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
ssl_ecdh_curve secp384r1;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
return 301 https://www.example.com$request_uri;
}
이 설정을 적용한 후 NGINX 설정을 테스트하고 문제가 없다면 NGINX를 재시작 또는 재로드합니다.
sudo nginx -t
sudo systemctl reload nginx
참고URL
- Nginx 공식 문서 : Configuring HTTPS servers
- Mozilla wiki : Security/Server Side TLS
728x90
반응형
'리눅스' 카테고리의 다른 글
우분투에 Prometheus와 Grafana 그리고 Node Exporter를 설치하고 구성하는 방법 (0) | 2024.06.27 |
---|---|
NGINX에서 특정 IP 주소를 허용하고 나머지 모든 IP 주소를 리다이렉트하도록 설정하는 방법 (0) | 2024.06.21 |
우분투에서 node.js 애플리케이션을 pm2를 사용하여 실행하는 방법 (0) | 2024.06.20 |
git clone 특정 디렉토리만 선택적으로 복제하는 방법 (0) | 2024.06.19 |
Puppeteer를 사용하여 테스트하는 방법 (0) | 2024.06.14 |