SSL 적용 및 TroubleShooting

성찬홍·2023년 6월 25일

TroubleShooting

목록 보기
3/4

목차

  1. SSL(HTTPS)을 적용해야 하는 이유
  2. SSL 실전 적용
  3. 문제 발생
  4. 시도 방법 및 해결
  5. 느낀 점

SSL(HTTPS)을 적용해야 하는 이유

1) SSL이란

  • 웹 서버와 클라이언트의 통신 암호화 프로토콜이다.
  • SSL은 '보안 계층'이라는 독립적인 프로토콜 계층을 만들어 응용 계층과 전송 계층 사이에 속하게 된다. TLS는 SSL의 후속 버전으로, 일반적으로 SSL이 더 많이 사용되는 용어이다.
  • HTTPS 뒤에 붙은 'S'는 보안(Secure)을 나타낸다.
  • HTTPS는 SSL 또는 TLS 위에 HTTP 프로토콜을 얹어 보안된 HTTP 통신을 하는 프로토콜이다. 즉, SSL과 TLS는 HTTP뿐만 아니라 FTP, SMTP와 같은 다른 프로토콜에도 적용할 수 있다.

2) SSL을 사용하는 이유

  • SSL이 적용되지 않은 통신의 경우 위 그림과 같이 평문이 그대로 전송된다.
    제3자가 이 통신 패킷을 탈취할 경우 내용을 쉽게 확인할 수 있으며, 통신 내용에 사용자의 개인 정보, 결제 정보 등의 정보가 들어 있다면 문제가 발생할 수 있다.

SSL 실전 적용

1) 현재 배포 상황

  • 프론트 -> Vercel에 배포(Next)
  • 백엔드 -> AWS EC2에 배포(Node)

2) SSL(HTTPS) 적용 로직

: Vercel에서는 자동으로 HTTPS가 적용되기에, EC2에 배포된 파일에 HTTPS를 적용해 보려 한다.

  • 무료 SSL 적용을 위해 Let's Encrypt를 사용하자.
  • Let's Encrypt에서 제공하는 Certbot 설치
$ sudo apt update
$ sudo apt upgrade
$ sudo add-apt-repository ppa:certbot/certbot # Certbot을 위한 저장소 추가
$ sudo apt install python3-certbot-nginx
  • Nginx default 설정 파일에서 HTTPS를 적용할 server_name을 작성해 준다.
$ sudo vi /etc/nginx/sites-available/default
// default 파일에 추가해 줄 코드
server_name example.com www.example.com;
  • 설정을 완료한 후 Nginx를 재시작해 준다.
$ sudo nginx -t // 변경 사항이 잘 적용됐는지 확인
$ sudo service nginx reload // Nginx 재시작
  • EC2의 HTTPS 보안 인바운드 규칙을 추가해 준다.
    (보안 그룹 -> 인바운드 규칙 추가 -> 유형: HTTPS, 소스: Anywhere -> 규칙 저장)
  • SSL 인증서 취득을 위해 아래 코드를 입력해 준다.
$ sudo certbot --nginx -d example.com -d www.example.com
  • Nginx를 재시작해 준다.
  • 완료

발생한 문제

: 위 진행 과정에서 domain으로 적힌 example.com에 SSL을 적용할 도메인을 입력해야 합니다.
여기에 AWS EC2 배포 시 제공하는 퍼블릭 IPv4 DNS를 사용하려고 했습니다.
그러나 진행 과정에서 EC2 DNS는 Certbot 사용을 막아 두었다는 오류 메시지를 받았습니다.

시도한 방법 및 해결 방법

  1. 실무에서는 필수로 HTTPS를 적용하겠지만, 현재는 공부용으로 만드는 사이트이고 도메인이 따로 없는 상태이기에 추후 HTTPS를 적용하고, SSL 적용 없이 EC2와 Vercel을 연결하려고 했습니다.
  • 문제 발생: Vercel에서는 HTTPS가 자동으로 적용되어 있고, 백엔드에 API 요청을 하더라도 자동으로 HTTPS 형태로 요청이 변경되었습니다.
// ex
- 클라이언트에서 axios.(http://~~) 요청

- 크롬에서 확인한 주소(https://~~)
  1. 무료 도메인 발급
  1. 도메인 발급을 완료한 후 위 과정에 있는 SSL 발급을 진행한다.

  2. 완료

느낀 점

HTTPS를 적용하는 과정에서 예상치 못한 오류를 받았습니다.

(1) 이 과정에서 Vercel에 배포된 파일은 서버와 통신할 때 자동으로 HTTPS로 보낸다는 것을 알 수 있었습니다.
(2) AWS EC2에서 제공되는 DNS에는 Certbot SSL 인증 적용이 불가능하다는 것도 알 수 있었습니다.

SSL 적용은 정해진 방법대로 적용하는 것이기에 금방 적용할 수 있을 것이라 생각했는데, 예상치 못한 오류를 받았고 이를 통해 위의 두 가지를 알 수 있게 되었습니다.
앞으로 접할 많은 오류가 있겠지만, 하나하나 적립해 나가면 좋을 것 같습니다.

profile
꾸준한 개발자

0개의 댓글