Search
Duplicate
📒

[Docker Container] 10-5. Nginx SSL

상태
미진행
수업
Docker Container
주제
Nginx
4 more properties
참고

SSL/TLS 및 NGINX

NOTE
NGINX의 SSL/TLS 암호화에 대해 간략하게 알아보자!
server { listen 443 ssl; server_name www.example.com; ssl_certificate www.example.com.crt; ssl_certificate_key www.example.com.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; #... }
Bash
복사
www.example.com에 대한 요청이 모두 HTTPS 트래픽으로 수신하도록 지시한다.
ssl_certificate, ssl_certificate_key : 도메인의 TLS 인증서와 키가 저장된 파일이름 저장
ssl_protocols : NGINX 가상 서버가 지원하는 ssl_ciphers SSL/TLS 버전과 암호화 제품군을 지정한다.

Certbot 설치 및 Let's Encrypt에서 SSL 인증서 발급

NOTE
Cerbot은 손쉽게 SSL 인증서를 자동 발급할 수 있도록 도와주는 도구이다!
# 1. cerbot 설치 sudo snap install certbot --classic # 2. SSL 인증서 발급 sudo certbot --nginx
Bash
복사
cerbot은 apt보단, snpa으로 설치하는것이 권장됨
이후 이메일을 입력하고, 이용약관에 동의한 후 사용할 도메인을 입력한다.
이 과정을 거치면 CerbotLet’s Encrypt를 통해 자동으로 SSL인증서를 발급해준다!
Nginxdefault.conf를 확인해보면 HTTPS를 위한 설정이 자동으로 추가됨을 볼 수 있음
코드

Crontab으로 SSL 인증서 자동 갱신 설정

NOTE
Let’s Encrypt 에서 발급해주는 SSL 인증서는 90일짜리 단기 인증서이다! 리눅스 Crontab을 이용하여 자동으로 재발급 받을 수 있다.
crontab -e
Bash
복사
0 0 * * * certbot renew --post-hook "sudo service nginx reload"
Bash
복사
vi를 이용해서 가장 아래에 해당 코드 추가
이제 매월 매일 0시 0분에 certbot을 실행하여 SSL 인증서를 갱신하고, ngnix를 reload 해준다!

강제 HTTPS 전환설정

NOTE
HTTP로 들어오는 연결을 모두 HTTPS로 리다이렉트 시킨다!
server { listen 80 443 ssl https; server_name example.com root html; ssl on; ssl_certificate /etc/pki/tls/certs/example.com.chained.crt; ssl_certificate_key /etc/pki/tls/private/example.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_prefer_server_ciphers on; location ~ /\.ht { deny all; } }
Bash
복사
example.com 가상 호스트 설정을 다음과 같이 HTTP/HTTPS 설정을 했다
server { listen 80; server_name example.com; root html; } server { listen 443 ssl https; server_name example.com root html; ssl on; ssl_certificate /etc/pki/tls/certs/example.com.chained.crt; ssl_certificate_key /etc/pki/tls/private/example.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_prefer_server_ciphers on; location ~ /\.ht { deny all; } }
Bash
복사
강제 전환을 위해 호스트 설정에서 server 블록을 80과 443으로 나누어준다.
server { listen 80; server_name example.com; root html; location / { return 301 https://example.com$request_uri; } }
Bash
복사
이제 HTTP 요청을 HTTPS301 Redirect 해준다!