코이팅

AWS에 Let's Encrypt로 HTTPS 적용하기 본문

Server

AWS에 Let's Encrypt로 HTTPS 적용하기

코이팅 2023. 2. 12. 20:04
728x90
반응형

1. HTTP vs HTTPS ?

1) HTTP(Hypertext Transfer Protocol)

클라이언트와 서버 양쪽에서 통신할 수 있도록 하는 기본 통신 프로토콜입니다.

앞서 웹서버 HTTP 프로토콜의 포트인 80번 포트로 접속하도록 설정을 하였습니다.

HTTP는 브라우저와 서버 사이에서 정보를 평문으로 전송하므로 정보가 전달되는 네트워크에서 

전송되는 정보를 엿볼 수 있습니다.

2) HTTPS(HTTP Secure)

이를 예방하기 위해 클라이언트와 서버가 먼저 암호화 통신 채널을 설정한 다음

평문 HTTP 메시지를 전송함으로써 정보 유출을 막는 HTTPS가 소개되었습니다.

암호화 채널은 SSL(TLS) 프로토콜을 사용해서 만듭니다.

2. Let's Encrypt란?

Let's Encrypt는 무료의 TLS/SSL 인증서를 쉽게 가져오고 설치할 수 있는 방법을 제공하는

CA(인증 기관)으로, 웹 서버에서 암호화된 HTTPS를 사용할 수 있습니다.

이러한 방법은 사용자에게 Certbot라는 소프트웨어를 제공함으로써 구현할 수 있게 합니다.

3. Let's Encrypt로 HTTPS 적용

✅ 개발환경

  • macOS Ventura 13.1
  • Ubuntu Server 22.04 LTS

1) Cerbot을 설치합니다. 

Certbot 패키지는 Ubuntu내에 존재하지만 Certbot 개발자들이 최신 버전의 Ubuntu 소프트웨어 저장소를 기준으로 꾸준히 제공해주기 때문에 최신 버전의 저장소를 사용할 것입니다. 

 

우선 Certbot를 위한 repository(저장소)를 추가합니다.

$ sudo apt update
$ sudo apt upgrade
$ sudo add-apt-repository ppa:certbot/certbot

2) Cerbot의 Nginx 패키지를 설치합니다.

$ sudo apt install python-certbot-nginx

안된다..?

💊 위의 명령어가 안될경우 다음 명령어로 진행합니다.

$ sudo apt install -y certbot python3-certbot-nginx

3)  Nginx Configuration을 설정합니다.

Nginx 기본 설정 파일에 들어가서 인증서를 적용할 도메인 이름을 설정합니다

$ sudo vim /etc/nginx/sites-available/default

설정 변경 전
설정 변경 후

변경 후 잘 되는지 확인하기 위해 테스트를 진행합니다.

$ sudo nginx -t

아래 사진은 테스트 성공 사진입니다.

테스트 성공

4)  Nginx를  reload 합니다.

설정 파일을 적용하기 위해 Nginx를 다시 로드해줍니다.

$ sudo systemctl reload nginx

5) 방화벽의 HTTPS를 허용합니다.

Ubuntu는 기본적으로 ufw라는 기본적인 방화벽을 가지고 있습니다. HTTPS에 대한 방화벽 허용 설정이 필요한데, AWS EC2 인스턴스의 경우는 기본적으로 방화벽이 비활성화되어 있습니다. 

방화벽 비활성화 되어있음.

방화벽이 위의 사진처럼 비활성화 되어있다면 다음 단계로 넘어갑니다.

 

5) SSL 인증서 받기

  • Certbot은 다양한 플러그인을 통해 SSL 인증서를 획득하는 다양한 방법을 제공합니다.
  • Nginx플러그인은 필요할 때마다 Nginx를 재구성하고 구성을 다시 로드합니다.
  • 이제 원하는 도메인을 지정해서 Nginx플러그인을 통해 인증서를 획득합니다.
  • -d 옵션으로 도메인을 지정합니다.
$ sudo certbot --nginx -d 도메인 -d www.도메인
  • 이메일을 입력합니다.

이메일 입력

  • A or a 입력

A or a 입력

  • Let's Encrypt 이메일 리스트에 추가 되고 싶다면 Y를 선택한다.
  • 저는 N을 입력하였습니다.

Y or N 입력

  • 기존 HTTP 연결 요청을 HTTPS 로 자동으로 바꿔줄 것인지 선택합니다.
  • 자동으로 바뀌길 원한다면 2를 선택합니다. 

2 입력
성공화면

5) 도메인 서버테스트

아래 링크를 통해 테스트를 진행합니다. 도메인을 입력해주고 Submit을 클릭합니다.

https://www.ssllabs.com/ssltest/

 

SSL Server Test (Powered by Qualys SSL Labs)

SSL Server Test This free online service performs a deep analysis of the configuration of any SSL web server on the public Internet. Please note that the information you submit here is used only to provide you the service. We don't use the domain names or

www.ssllabs.com

도메인 입력
성공화면

💊 만약 여기서 오류가 뜬다면 인바운드 규칙을 다시 설정해줘야 합니다.❗️ 아래 링크에서 인바운드 규칙 편집을 확인하세요.

https://king-ja.tistory.com/100

 

AWS EC2 인스턴스에 Nginx 적용하기

1. Nginx란? Nginx는 정적 컨텐츠를 제공해주는 프록시 서버입니다. apache의 강력한 라이벌이며, 현재는 점유율이 앞서고 있습니다. 가볍고 높은 성능을 가진 웹 서버 (Web Server) 이다. HTTP Server로 활용

king-ja.tistory.com

6) Certbot 자동 갱신 확인

  • Let's Encrypt의 인증서는 90일 동안만 유효하므로, 90일마다 갱신시켜줘야 합니다.
  • 하지만 설치하는 과정에서 /etc/cron.d에 자동으로 갱신시켜주는 커맨드가 추가되어 있습니다.
  • 갱신 프로세스가 잘 동작하는지 테스트를 해보고 싶다면 다음과 같은 명령어를 입력해서 테스트를 진행할 수 있습니다.
$ sudo certbot renew --dry-run

설정 완료

오류가 나오지 않았으므로 모든 설정이 잘 완료된 것입니다.

인증서가 필요한 경우 Certbot은 인증서를 갱신하고 Nginx를 다시 로드하여 변경 사항을 적용할 것입니다.

만약 자동 갱신 프로세스가 실패할 경우 Let's Encrypt는 앞서 지정한 이메일로 인증서 만료 경고 메시지를 보내줍니다.

 

이제 HTTPS에 대한 설정이 모두 완료가 되었기 때문에 Nginx의 서버를 restart 시켜줍니다.

$ sudo service nginx restart

7) 주소창에 서버의 도메인 주소 입력 (https 적용 확인⭕️)

https 적용 완료!

 

728x90
반응형
Comments