EC2 인스턴스의 NGINX에 HTTPS 적용하는 과정 기록.
HTTPS 적용을 위해 SSL/TLS 인증서를 CA로부터 발급받아야 한다.
Certbot을 이용해 Let's Encrypt로부터 인증서를 받았다.
Let’s Encrypt는 HTTPS가 온라인 전체에 적용되도록 하는 것을 목표로 하는 멋진 비영리재단이다.
관리자 권한으로 제어할 수 있는, 80번 포트에 열려 있는 HTTP 서버.
Amazon Linux 2 AMI, NGINX
Cerbot 공식 사이트에서는 패키지 관리자로 snap을 사용하라고 권장한다.
그래서 snap을 설치하려고 열심히 구글링을 해봤으나, selinux-policy 패키지 버전이 맞지 않는다는 오류가 난다.
이것때문에 1시간 이상 소모하며 알아낸 결론은 현재 시점에서 Amazon Linux 2의 패키지 레포지토리는 snap을 지원하지 않는다는 것이다.
그냥 yum으로 설치하면 빨리 끝났을 것을 ...
sudo yum install certbot
sudo yum install python3-certbot-nginx
python3-certbot-nginx
는 nginx 플러그인이다. 설치해줘야 nginx 구성을 자동으로 할 수 있다.
도메인이 example이라고 하면, /etc/nginx/conf.d
디렉토리에 www.example.com.conf
파일을 만들고 아래의 내용을 작성해 저장한다.
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
server_name example.com www.example.com;
}
sudo certbot --nginx -d example.com -d www.example.com
서비스 약관에 동의를 하면 인증서 생성이 끝나고 구성까지 알아서 다 해준다.
IMPORTANT NOTES:
Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/example.com//privkey.pem
Your cert will expire on 2023-08-31.
키 저장 위치와 만료일을 알려준다.
www.example.com.conf
파일을 확인해보자. 수정되었다.
certbot 공식 사이트에는 갱신까지 알아서 해준다고 되어 있다.
위 셋 중 하나에 갱신 명령이 설치된다고 하는데, 나는 확인할 수 없었다.
참고자료들을 따라 crontab 구성을 진행했다.
아래 명령어는 현재 사용자의 cron job을 등록한다.
crontab -e
아래 명령어는 root 사용자의 cron job을 등록한다.
sudo crontab -e
나는 sudo로 아래와 같은 cron job을 등록했다.
0 12 30 * * /usr/bin/certbot renew --quiet --deploy-hook "nginx -s reload"
공식 문서에 더 많은 정보가 자세히 나와 있다.
Let's Encrypt 공식
Certbot 공식
Certbot Docs
crontab guru
Let’s Encrypt 인증서로 NGINX SSL 설정하기 - nginxstore
LetsEncrypt SSL 인증서 갱신/삭제방법 및 자동갱신 적용하기 - 티스토리