reference
https://luminitworld.tistory.com/85?category=975147
https://namu.wiki/w/Let's%20Encrypt
클라우드 서버 : AWS EC2 인스턴스
OS : Ubuntu 20.04 LTS
WebServer : Nginx
BL : PHP
DBMS : MySQL
HTTPS는 선택이 아닌 필수!
Let's Encrypt는 사용자에게 무료로 TLS 인증서를 발급해주는 비영리기관이다. 몇 가지 TLS 인증서 종류 중에서 완전 자동화가 가능한 DV (Domain Validated, 도메인 확인) 인증서를 무료로 발급한다.
먼저 저장소를 최신으로 업그레이드 시키고, certbot을 위한 저장소를 추가하였다.
~$ sudo apt update
~$ sudo apt upgrade
~$ sudo add-apt-repository ppa:certbot/certbot
다음으로 cerbot의 nginx 패키지를 설치한다.
~$ sudo apt install python3-certbot-nginx
설정파일에 인증서를 적용할 도메인 이름을 작성한다.
~$ sudo vi /etc/nginx/sites-available/default
변경 후 이상이 없는지 테스트한다.
~$ sudo nginx -t
이상이 없으면 설정 파일을 적용하기 위해 nginx를 reload 한다.
~$ sudo systemctl reload nginx
-d 옵션으로 도메인을 지정해서 Nginx 플러그인을 통해 인증서를 획득한다.
~$ sudo certbot --nginx -d devhoyeon.shop -d www.devhoyeon.shop
www가 붙지 않은 devhoyeon.shop 도메인에 대해 다음과 같이 오류가 발생했다.
이유는 DNS 레코드에서 www 호스트만 설정했기 때문이다. 가비아 사이트에서 DNS 레코드를 추가하자.
호스트의 @는 www가 없을 때 들어오는 설정이다.
DNS 레코드 추가 후 다시 SSL 인증서를 받았다.
SSL 인증서를 획득한 것을 확인할 수 있다.
콘솔 창에서 알려준 대로 ssllabs 사이트에서 테스트 했으나 Assessment failed 오류가 발생했다. 이는 AWS 보안 설정에서 HTTPS 인바운드 규칙을 추가하여 해결할 수 있다.
HTTPS 테스트가 성공했다. HTTPS 설정을 마친 후 nginx 서버를 restart 시킨다.
~$ sudo service nginx restart
기존 도메인이 HTTPS 적용되어 도메인 왼쪽에 자물쇠 모양이 생긴 것을 볼 수 있다.