프로젝트를 진행하는 중 팀장님께 도메인에 SSL을 적용하라는 미션을 받았다. 미션을 해결하기 위해 DB와 서버를 띄우는 AWS Ubuntu Instance에 접근해서 Nginx를 설치하고 Let'Encrypt를 사용해서 SSL 인증을 해보자
먼저 해당 시스템의 정보와 설치되어 있는 패키지를 살펴보자
시스템 정보 확인은 uname -a
를 입력하고 설치된 패키지는 dpkg -l
를 입력해서 확인하자 내가 접속한 시스템은 Ubuntu 18.04
버전이고 nginx는 설치되어 있지 않았다.
sudo apt install nginx -y
로 설치하고 nginx -v
로 버전을 확인하자
확인해보니 1.14.0 버전이 설치되었다.
SSL 인증서를 발급 받고자 하는 도메인을 Nginx에 등록해야한다. /etc/nginx/nginx.conf
에 다음과 같이 추가하자
events {}
http {
server {
listen 80;
server_name url;
location / {
return 200 "Hello, SSL!\n";
}
}
}
그러고 sudo service nginx reload
로 변경된 설정을 적용시킨다.
적용이 잘 됐으면 curl http://url/
명령어에 대한 결과로 Hello, SSL!
이 출력될 것이다.
Let's Encrypt가 SSL 인증을 해주는 소프트웨어인줄 알았는데 알고보니 인증 기관이었다. 따라서 Let's Encrypt가 제공하는 무료 인증서를 받기 위해서는 CertBot이라는 녀석을 사용해야한다.
certbot 공식 페이지에서 안내하는 대로 따라해보자
서버에 접속하기
Certbot PPA 추가
$ sudo apt update
$ sudo apt install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt update
Certbot 설치
$ sudo apt install certbot python3-certbot-nginx
Certbot 실행
$ sudo certbot --nginx
주의사항!!
A Record DNS를 추가해줘야한다.
성공적으로 적용이 되었다면 curl https://saojeong.hnulinc.c11.kr
에 대한 응답으로 Hello, SSL!
을 받을 수 있다.
또한, 자동갱신이 잘 적용되었는데 sudo certbot renew --dry-run
명령어로 확인할 수 있다.
crontab을 사용해서 명령어를 자동으로 실행하도록 등록한다. 참고문서를 참고했다.
sudo crontab -e
을 입력하고 0 18 1 * * sudo certbot renew --renew-hook="sudo service restart nginx"
을 등록해놓으면 매월 1일 3시에 갱신이 수행된다.
해당 시스템에 등록된 certificate들을 확인할 수 있다. sudo certbot certificates
를 입력하면 등록된 인증을 확인할 수 있다.
아마존 리눅스에서는 certbot --debug
옵션을 붙여야한다.