본문 바로가기

Ubuntu

[AWS] ec2에 HTTPS 적용 - let's encrypt (redirection)

HTTP와 HTTPS

- HTTP (Hyper Text Transfer Protocol)란?

  • 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.
  • HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용하고 있다.
  • HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보내게 된다.
  • HTTP는 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. HTTP는 상태를 가지고 있지 않은 Stateless 프로토콜이며, Method, Path, Version, Headers, Body 등으로 구성된다.
  • 하지만 HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이기 때문에 서버에서부터 브라우저로 전송되는 정보가 암호화되지 않는다는 문제가 있다.
  • 이러한 문제를 해결하기 위해 HTTPS가 등장하게 되었다.

- HTTPS(Hyper Text Transfer Protocol Secure)란?

  • HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜이다. 443번 포트를 사용하고 있다.
  • HTTPS는 SSL(보안 소켓 계층)을 사용함으로써 이문제를 해결했다.
  • SSL은 서버와 브라우저 사이에 안전하게 암호화된 연결을 만들 수 있게 도와주고, 서버 브라우저가 민감한 정보를 주고받을 때 이것이 도난당하는 것을 막아준다.
  • 네트워크 상에서 중간에 제 3자가 정보를 볼 수 없도록 공개키 암호화를 지원하고 있다.

http를 https로 redirection 해줘야한다!

Let's Encrypt

  • HTTPS 사용을 위해 무료로 SSL/TLS 인증서를 발급해주는 비영리기관이다.
  • 주로 인증서 발급 프로그램인 certbot을 사용하여 인증서를 발급해주게 된다.
  • Let's Encrypt로 인증서를 발급받기 위해서는 Domain이 필요하다.
  • 앞서 발급 받은 Domain을 사용할 것이다.
  • 또한 Let's Encrypt는 90일 동안만 유효한 SSL 인증서를 발급해주는데 Certbot을 이용하면 갱신이 쉬워진다.
  • 만료 30일 전부터 갱신이 가능하다. 갱신횟수는 무제한!

SSL이란 (Secure Sockets Layer) 보안 소켓 계층

: 웹 사이트와 브라우서 사이에 전송된 데이터를 암호화하여 인터넷 연결 보안을 유지하는 표준 기술이다.

순서

1. Certbot 설치

2. Nginx 설정

3. 방화벽 HTTPS 적용

4. SSL 인증서 받기

5. Certbot 자동 갱신 확인

Certbot 설치

$ sudo apt update

$ sudo apt upgrade

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

$ sudo apt install python3-certbot-nginx

Nginx 설정

인증서를 적용할 도메인을 적용한다.

server_name '도메인'

 

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

 

server_name 도메인 설정!!
sudo nginx -t로 확인해본다.

테스트가 별 문제 없이 잘 되었다면 설정파일을 적용하기 위해 Nginx를 다시 로드해준다.

$ sudo service nginx reload

방화벽 HTTPS 적용

Ubuntu는 ufw라는 기본적인 방화벽을 가지고 있다.

HTTPS에 대한 방화벽 허용 설정이 필요한데, AWS ec2 인스턴스의 경우는 기본으로 방화벽이 비활성화되어 있다.

 

$ sudo ufw status

 

비활성화 확인!

SSL 인증서 받기

Certbot은 다양한 플로그인을 통해 SSL 인증서를 획득하는 다양한 방법을 제공한다.

Nginx 플러그인은 필요할 때마다 Nginx를 재구성하고 구성을 다시 로드한다.

 

이제 원하는 도메인을 지정해서 Nginx 플러그인을 통해 인증서를 획득한다.

$ sudo certbot --nginx -d yenie.site -d www.yenie.site  

-d 옵션으로 도메인 지정, 서브도메인도 같이 추가했다. 그 뒤엔 이메일을 입력

 이렇게 입력을 하고 나면 이메일을 입력하라고 요구한다. 

입력하지 않으면 반드시 필요하다고 나오므로 이메일을 입력해준다.

 

관련문서 읽으라는 거 동의

A를 눌러서 Agree를 해준다. 관련 공식문서를 읽으라고 한당.

 

이메일 알림 설정

이메일 알림 설정이 나오는데 그냥 Y를 해줬다... N를 해도 상관이 없을 것 같다.

 

두 가지 선택사항

그러면 다음과 같이 두 가지 선택사항이 나온다.

1: HTTP 연결을 HTTPS로 리다이렉트 하지 않음

2: HTTP 연결을 HTTPS로 리다이렉트 함!

나는 2번을 선택 !!!!!!!!!!

 

적용 완료

캡쳐 사진에는 안나와있지만 결과를 보면 You should test your configuration at: 여기에 url이 나와있다. 

이 url은 해당 도메인에 대한 서버를 테스트할 수 있는 url이다.

도메인에 대한 서버를 테스트할 수 있는 url로 가서 테스트를 해본다.

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

이 url로 가서 도메인을 입력해주다. yenie.site

잘 나온다!!

Certbot 자동 갱신 확인

Let's Encrypt의 인증서는 90일 동안만 유효하므로, 90마다 갱신시켜줘야 한다.

하지만 설치하는 과정에서 /etc/cron.d에 자동으로 갱신시켜주는 커맨드가 추가되어 있다.

갱신 프로세스가 잘 동작하는 지 테스트를 해보고 싶다면 다음과 같은 명령어를 사용하여 테스트를 할 수 있다!

$ sudo certbot renew --dry-run

 

완료!

이제 모든 설정이 끝났기 때문에 Nginx의 서버를 restart 해준다!

$ sudo service nginx restart

주소창에 도메인 주소를 입력하면 다음과 같이 자물쇠 모양으로 https가 잘 적용된 것을 확인 할 수 있다!!!

성공!!

참고