현재 사용 중인 nginx 서버는 aws ec2 인스턴스와 연결되어 있다.
0. aws 콘솔에 접속해 ec2 인바운드 규칙에 https를 추가
인바운드 규칙 편집을 눌러서 https 규칙을 추가하고, anywhere로 지정하였다. (ipv4, ipv6 두개 다 추가)
1. Let's Encrypt 인증서 발급
Let's Encrypt를 사용하면 무료로 SSL인증서를 발급받을 수 있다.
발급 받기 위해 Cerbot을 설치한다.
1-1. Cerbot 설치
먼저 EC2 인스턴스에서 Cerbot을 설치한다. Ubuntu의 경우 다음 명령어로 설치할 수 있다.
sudo apt update
sudo apt install certbot python3-certbot-nginx
1-2. SSL 인증서 발급
Nginx와 연동하여 인증서를 발급받으려면 아래 명령어를 사용한다.
sudo certbot --nginx -d example.com -d www.example.com
example.com과 www.example.com을 본인의 도메인으로 바꾼다.
SSL, SSL 인증서, Cerbot ?
SSL(Secure Sockets Layer)은 인터넷을 통해 전송되는 데이터를 암호화하는 보안 기술로, 암호화된 데이터가 올바른 서버에 전달되었는지에 대한 확인이 필요하다. 이러한 확인을 '서버 신원 증명'이라고 부른다.
이때, 서버의 신원을 증명하기 위해 사용하는 것이 서버 측이 가지고 있는 SSL 인증서이다.
해당 SSL 인증서는 인증기관(Certificate Authority)로부터 발급되고, 신원 증명 또한 인증기관을 통해 이루어진다.
유명한 인증기관의 예시로는 Let's Encrypt(2015), DigiCert(1995), Global Sign(1996) 등이 있다.
이 중 무료로 인증서를 발급받을 수 있는 Let's Encrypt를 사용한다.
(1-1)에서 설치한 Certbot은 Let's Encrypt에서 제공하는 오픈 소스 소프트웨어 도구로, SSL 쉽게 발급하고 관리하도록 도와준다.
2. 발급 받은 인증서 설치 및 SSL 적용
인증서 설치가 자동으로 이루어졌다면 nginx 설정 파일도 자동으로 수정 되었을 것이다.
nginx 설정 파일이 수정되었는지 확인 후, 수정되지 않았다면 수동으로 수정한다.
2-1. cd /etc/nginx/sites-available
2-2. sudo vi default
2-3. 설정 파일에는 다음과 같은 설정이 포함되어 있어야 한다.
#managed by Cerbot 주석 부분이 달린 코드가 확인된다면, 자동으로 수정되었다는 것이다.
server {
listen 80;
server_name example.com www.example.com;
# HTTP를 HTTPS로 리다이렉션
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 여기에 다른 서버 블록 설정 추가 (root, index 등)
# 인증서와 키 파일의 경로는 /etc/letsencrypt/live/도메인명 에 위치한다.
}
3. Nginx 설정을 변경하였으므로 테스트 후 재시작 한다.
sudo nginx -t
sudo systemctl restart nginx
Let's Encrypt 가 발행한 인증서는 유효기간이 90일이라는 문제가 있다.
장기적으로 사용할 예정이라면 인증서가 만료되기 전에 자동으로 갱신되도록 설정할 필요가 있다.
해당 설정은 아래 글에서 확인할 수 있다.