레츠! 인크립트! 레츠! 꼬우!
let's encrypt는 사용자에게 무료로 tls 인증서를 발급해주는 비영리기관이다. 완전 자동화가 가능한 dv(도메인 확인)인증서를 무료로 발급해준다.
let's encrypt를 사용해서 ssl 인증서를 얻어야 한다. 먼저 서버에 certbot 소프트웨어를 설치해야 한다.
Certbot는 최신 버전의 Ubuntu 소프트웨어 저장소를 유지하므로 해당 저장소를 사용한다. 먼저 업데이트를 하자.
먼저 apt 업데이트 & upgrade를 해주고 certbot을 위한 저장소를 추가해주었다.
$ sudo apt update
$ sudo apt upgrade
$ sudo apt-add-repository -r ppa:certbot/certbot
certbot의 nginx 패키지를 설치한다.
$ sudo apt install python3-certbot-nginx
설정파일에 인증서를 적용할 도메인 이름을 작성한다.
기존 servername 부분의 부분을 인증서 적용할 도메인 이름으로 바꿔주면 된다.
변경후에 이상이 없는지 테스트한다.
sudo nginx -t
이상이 없으면 설정 파일을 적용하기 위해 nginx를 reload한다.
certbot은 다양한 플러그인을 통해서 ssl 인증서를 획득하는 다양한 방법을 제공한다. nginx 플러그인은 필요할때마다 nginx를 재구성하고 다시 로드한다.
-d 옵션으로 도메인을 지정해서 Nginx 플러그인을 통해 인증서를 획득한다.
sudo certbot --nginx -d suyeon.shop -d www.suyeon.shop
email을 입력하라고 나오는데
사용하는 email 적고 엔터를 누르면 된다.
suyeon.shop 도메인에 대해서 에러가 발생했다.
dns 레코드 설정할때 www 호스트만 설정했기 때문이다. 오류를 해결하기 위해서
dns 레코드를 추가했다.
@
는 www가 없을때 들어오는 설정이다.
dns 레코드 추가 후 다시 ssl 인증서 설치를 진행하면
다음과 같이 http 연결을 어떻게 설정할 것인가를 고르는 질문이 나타나는데
1 : http 연결을 https로 리다이렉트 x
2 : http 연결을 https로 리다이렉트
나는 2를 선택했다. 각자 원하는 설정을 선택하면 될거같다.
인증서 설치 및 다운로드가 완료되었다.
https://www.ssllabs.com/ssltest/ 로 이동하여 도메인에 대한 서버를 테스트를 진행했다.
음..? 오류가난다.
aws ec2 인스턴스의 보안 그룹에서 ssl이 사용되는 443 포트 번호를 열어주지 않았기 때문에 발생하는 오류다.
가서 열어주도록 하장
인바운드 규칙에 https를 추가했다.
다시 앞의 테스트를 하면 화면에서 등급을 확인할 수 있다.
let's encrypt의 인증서는 90일 동안만 유효하기 때문에 90일마다 갱신해줘야 한다.
but! 설치를 하는 과정에서 /etc/cron.d에 자동으로 갱신 시켜주는 커맨드가 포함이 되어 있었는데, 갱신 프로세스가 잘 동작하는지 테스트하고 싶다면
아래 명령어로 테스트를 진행할 수 있다.
sudo certbot renew --dry-run
따로 오류 표시되지 않으면 모든 설정이 끝났다.
https://velog.io/@banjjoknim/Lets-encrypt%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-Nginx%EC%97%90-HTTPS-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
https://velog.io/@oyeon/HTTPS-%EC%A0%81%EC%9A%A9-Lets-Encrypt
이미 ssl/tls 를 공부하셨었네요!