참고
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으로 설치하는것이 권장됨
•
이후 이메일을 입력하고, 이용약관에 동의한 후 사용할 도메인을 입력한다.
•
이 과정을 거치면 Cerbot은 Let’s Encrypt를 통해 자동으로 SSL인증서를 발급해준다!
•
Nginx의 default.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 요청을 HTTPS로 301 Redirect 해준다!