이번 3주 차 챌린지 과제는 HTTPS를 적용하는 것이다. 우리의 EC2 인스턴스 서버는 아직 HTTPS를 적용하지 못했다.
챌린지 과정은 Let's Encrypt를 이용해 인증서를 구입하면 발급받은 인증서를 설치해 서버 쪽 세팅을 하고 SSL을 적용하는 것이다.
ec2 ubuntu 18.04 Let's Encrypt로 검색을 해 많은 레퍼런스를 참고하라고 강의에서 알려줬다.
우선 Let's Encrypt에 대해 알아봤다. 아래는 Let's Encrypt 소개 페이지다.
https://letsencrypt.org/ko/getting-started/
처음 소개글이 아래와 같다.
- "웹 사이트에서 HTTPS를 사용하려면 CA(인증 기관)에서 인증서(파일 유형)를 가져와야 합니다. Let’s Encrypt는 CA입니다."
즉 인증서를 주는 인증 기관이라고 생각할 수 있겠다.
참고 - 소개글에는 이런 부분도 있다.
"Let’s Encrypt에서는 일반적으로 웹 호스트에서 실행되는 ACEME 프로토콜을 사용하는 소프트웨어를 사용하여 이 작업을 수행합니다."
ACEME 프로토콜은 아래와 같이 설명할 수 있다.
- ACME (Automated Certificate Management Environment)
- X.509 인증서의 도메인 유효성 검사, 설치 및 관리를 자동화하기 위한 표준 프로토콜입니다.
- 이 프로토콜을 이용해 SSL 인증서를 발급 및 해지한다고 한다.
정리하자면 Let's Encrypt를 이용해 SSL 인증서를 받아 HTTPS를 적용할 것이다!
그러면 Let's Encrypt를 어떻게 이용해야 SSL 인증서를 적용할 수 있을까?
어떤 방법이 제일 적합한지 판단하려면 쉘 접근(SSH 액세스라고도 함)이 있는지 알아야 한다고 한다.
우리는 AWS EC2 인스턴스에서 .pem을 가진 디렉터리에서 ssh 명령어를 통해 관리자 권한을 가지고 접근한다.
또한 우리는 EC2 인스턴스 보안 그룹에서 임바운드 규칙으로 ssh 프로토콜을 설정하고 사용자의 아이피도 내 아이피로 설정했다.
이런 여러 과정을 살펴보면 우리는 SSH 액세스를 가지고 있는 것이다.
참고 - SSH는 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜이다.
우리는 SSH 액세스 권한을 가지고 있으므로 Certbot ACME 클라이언트를 사용하는 것이 좋다고 한다.
그럼 이제 Certbot에 대해 알아보자. 공식 사이트의 설명을 번역기로 해석해보았다.
"Certbot은 수동으로 관리되는 Let’s Encrypt의 인증서를 자동으로 암호화하여, HTTPS를 활성화하기 위한 무료 오픈 소스 소프트웨어 도구입니다." 추가적으로 Certbot는 아래와 같은 조건을 만족하면 사용할 수 있다고 한다.
- 터미널 같은 CLI에 익숙한 사용자며
- 온라인 상태인 http 웹 사이트를 가지고, 80번 포트는 열려있어야 하며
- sudo 권한, ssh 액세스 권한을 가지고 서버를 관리해야 한다.
이런 조건을 가지면 Certbot를 사용하면 된다고 한다. 우리와 딱 알맞은 조건이므로 Certbot를 가지고 SSL 인증서를 발급받자.
Ubuntu 18과 nginx 환경에서 Certbot를 다운로드하는 과정은 아래 링크에서 확인할 수 있다.
https://certbot.eff.org/instructions?ws=nginx&os=ubuntubionic
Certbot 인스톨은 apt가 아닌 snapd로 진행해야 한다. 먼저 아래와 같이 명령어를 진행한다.
최신 버전의 snapd가 있는지 확인하기 위함이다.
sudo snap install core
sudo snap refresh core
그럼 이제 아래와 같은 명령어를 입력한다. 본격적인 certbot를 다운로드하는 것이다.
sudo snap install --classic certbot
정상적으로 다운로드되면 snap 명령어를 사용할 수 있게 만들기 위해 아래와 같은 명령어를 다시 입력하자.
sudo ln -s /snap/bin/certbot /usr/bin/certbot
이제 필자가 생각하기로 중요한 명령어가 등장한다. 다운로드를 가이드하는 공식 사이트에서는 아래와 같이 소개한다.
"이 명령을 실행하여 증명서를 취득하고 Certbot이 nginx 설정을 자동으로 편집하여 이를 처리하도록 하고, 한 번에 HTTPS 액세스를 켭니다."
중요한 명령이라는 느낌이 팍 온다. 이제 아래와 같은 명령어를 입력하자.
sudo certbot --nginx
이제 그러면 무수한 질문들이 뜬다. 먼저 뭔가 알람을 받을 이메일을 입력하자.
그러면 이제 많은 질문들은 y를 눌러주면 된다.
우리가 nginx 파일에 설정한 도메인들이 뜬다. 모든 도메인에 https를 적용할 것이므로 1,2,3,4라고 적자.
그럼 아래와 같이 성공 화면이 뜬다!!!
이제 https를 적용해서 접속하면 될까..? 여기서 주의할 점이 있다!!!!
바로 우리 AWS Ec2 인스턴스 보안 그룹에 들어가서 임바운드 규칙을 수정해줘야 한다.
HTTPS 프로토콜을 추가하자. 아래 이미지와 같이!
그러면 이제 정상적으로 HTTPS로 입력하면 잘 되어야 한다. 이제 한번 입력을 해보겠다. 두구두구....
정상적으로 동작한다!!!!! 물론 서브 도메인에도 정상적으로 https가 잘 적용되었다.
이번 챌린지 과제도 성공적으로 마무리했다. 진짜 이번에는 영어문서만 본 느낌... ㅎㅎ 뿌듯하다.
이상으로 챌린지 과제 끝!!!!!!
참고 - 아래와 같은 명령어도 존재하는데 nginx 설정을 수동으로 변경하려면 이 명령을 실행하라고 한다.
sudo certbot --nginx 대신!이다.
sudo certbot certonly --nginx
아래와 같은 명령어를 사용하면 SSL 인증서 자동 갱신을 테스트할 수 있다고 한다.
sudo certbot renew --dry-run
부족하거나 틀린 부분이 있으면 언제든지 피드백 주시면 감사드리겠습니다!
이상으로 포스팅을 마치겠습니다.
마지막으로 Let's Encrypt 작동 방식은 아래 링크에서 확인할 수 있습니다.
https://letsencrypt.org/ko/how-it-works/
참고 자료
https://certbot.eff.org/instructions?ws=nginx&os=ubuntubionic
댓글