[HTTPS 적용] Let's Encrypt 를 이용해서 HTTPS 적용하기
Let's Encrypt는 사용자에게 무료로 SSL/TLS 인증서를 발급해주는 기관이다.
한번 발급받으면 90일동안 사용가능하고 만료 30일 전에 갱신이 가능하다.
인증서 발급은 certbot을 이용하는데 이것은 Let's encrypt 인증서를 자동으로 발급해주는 봇(데몬)이다.
SSL을 발급받기위해서는 도메인이 필수이다.
1. Certbot 설치
# repository 등록
$ sudo apt update
$ sudo add-apt-repository ppa:certbot/certbot
# certbot 설치
$ sudo apt update
$ sudo apt-get install certbot
# certbot nginx plugin 설치
$ sudo apt install python-certbot-nginx
2. Nginx 설정
$ sudo vi /etc/nginx/sites-available/default
- server_name을 적용할 도메인명으로 변경해준다.

적용 테스트
sudo nginx -t

문제가 없으면 Nginx를 재로드 해준다.
$ sudo systemctl reload nginx
3. SSL 인증서 발급
아래 명령어 입력을 통해 원하는 도메인을 지정하여 Nginx 플러그인으로 인증서를 얻을 수 있다.
$ sudo certbot --nginx -d hellosilver.shop -d www.hellosilver.shop
# sudo certbot --nginx -d 도메인명
인증서 설치를 진행하면서 아래와 같은 내용이 나오게 된다.
1. 이메일로 소식을 받을것인지 ? -> Y or N 입력
2. nginx에 등록된 4개의 호스트가 모두 리스트업되며 각각 받을건지, 한꺼번에 받을 것인지 -> [엔터] 입력 시 1개의 인증서에 나온 도메인이 모두 등록된다.
3. HTTP 연결을 어떻게 설정할 건지 물어본다. 2를 입력해야 HTTP연결을 HTTPS로 리다이렉트한다. 따라서 2를 입력한다.
- 출력문을 살펴보면, 2021-07-19 만료기간을 안내하고 있으며, 키파일은 /etc/letsencrypt/live/hellosilver.shop 아래 위치하고 있음을 알려준다.
- 인증서 발급 내역 확인 : sudo certbot certificates

4. 테스트
1. test URL 접속
- 테스트 URL로 들어가본다.


- URL로 이동하면 다음과 같이 오류가 뜬다.
왜냐하면 SSL이 사용하는 HTTPS에 대한 포트포워딩을 하지 않았기 때문이다. AWS 인스턴스 설정에서 443 포트에 대한 인바운드 규칙을 추가해준다.

- 인바운드 규칙을 추가한 뒤 다시 테스트 URL로 접속해본다. 다음과 같이 테스트된 화면을 볼 수 있다.

5. certbot 자동 갱신 확인
Let's Encrypt 인증서는 90일동안 유효하고 만료 30일 전에 갱신시켜주어야한다.
하지만 설치하는 과정에서 /etc/cron.d에 자동으로 갱신시켜주는 커멘드가 추가되어있다.
갱신 프로세스가 잘 동작하는지 테스트하고 싶다면 다음 명령어를 입력해서 테스트할 수 있다.
$ sudo certbot renew --dry-run

오류가 나오지않으면 모든 설정이 완료된 것이다.
인증서가 필요한 경우 Certbot은 인증서를 갱신하고 Nginx를 다시 로드하여 변경사항을 적용할 것이다.
만약 자동 갱신 프로세스가 실패할 경우 앞서 지정한 이메일로 인증서 만료 경고 메일을 보내줄 것이다.
HTTPS에 대한 설정이 완료되었으므로 Nginx의 서버를 restart 해준다.
$ sudo service nginx restart
6. HTTPS 확인
HTTPS 설정이 잘 되었는지 눈으로 보기 위해 나의 도메인으로 접속해보면 HTTPS로 연결되는 것을 확인할 수 있다.

참고
velog.io/@banjjoknim/Lets-encrypt
www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04