본문 바로가기
백엔드

Route53으로 EC2 HTTPS 설정하기

by limew 2024. 1. 15.

문제: Google OAuth 프로젝트는 https 페이지로만 redirect uri를 보낼 수 있다.

해결: http ⇒ https로 변경

EC2는 SSL certificate를 갖고 있지 않아서 https를 지원하지 않기 떄문에 밑의 방법들을 찾아봤다.

 

Enable HTTPS on EC2 instance Without Elastic Load Balancer

Configure HTTPS on AWS EC2 without a Custom Domain

Configure HTTPS on AWS EC2 for Free Using Cloudflare

 

그 중 가장 간단해보이는 Route53 방법을 선택했다

route53에서 나만의 도메인을 구입하기

 

인스턴스와 도메인을 연결하기 위해 record를 추가

subdomain은 webpage, blog등과 같은 도메인의 하위 부분이며, 특정 섹션이나 서비스를 가리키는 데 사용한다. 나는 굳이 필요하지 않아서 안 썼다.

record type은 A를 사용하고

value는 Elastic IP addresses를 추가했다.

 

 

SSL

Secure Sockets Layer은 데이터 전송 중에 데이터를 암호화하여 중간에 있는 공격자가 데이터를 읽을 수 없게 한다.

주로 HTTPS프로토콜로 사용. HTTPS default port는 443이다

 

내 웹사이트를 HTTPS로 만들기 위해서는 CA로부터 certificate를 받아야한다

이때 Let’s Encrypt 를 사용한다

 

Let's Encrypt의 원리

url창에 나의 도메인을 써넣으면

  1. DNS가 도메인 ⇒ ip로 변환하고
  2. let’s encrypt은 (일종의 ca) 이 ip가 진짜 https인지 확인한다
  3. 이런 확인 방법을 ACME 프로토콜이라고 하는데 그 중 certbot을 사용한다
  4. certbot를 나의 인스턴스에 설치하면 ca에게 certificate를 제공하여 이 도메인의 서버가 나임을 증명한다.
sudo apt install certbot -y

 

 

여기까지 완료하면 certificate이 etc/letsencrypt/live/도메인이름에 잘 저장되어있다.

 

 

 

 

이제 express에서 https를 configure하는데 이때 SSL 인증서path도 알려준다

const https = require("https");

// SSL 인증서 키
const sslKeys = {
  ca: fs.readFileSync("/etc/letsencrypt/live/ujung.link/fullchain.pem"),
  key: fs.readFileSync("/etc/letsencrypt/live/ujung.link/privkey.pem"),
  cert: fs.readFileSync("/etc/letsencrypt/live/ujung.link/cert.pem"),
};
httpsServer = https.createServer(sslKeys, app);

httpsServer.listen(443, () => {
  console.log("[PRO]Listening on 443");
});

 

 

 

근데 인스턴스에서 실행하니 node가 인증서에 접근 할 수 없었다.

 

 

 

해결링크를 따라 해결하니 정상적으로 도메인에 접근할 수 있었다

 

 

 

참고: lets encrypt pem, key가 잘 있는지 확인하기

'백엔드' 카테고리의 다른 글

[mySQL] 명령어 정리  (0) 2024.01.08
AWS EC2 배포하기 with React, Express  (0) 2024.01.08