[네트워크] NestJs 서버 https 설정

지송현·2023년 2월 26일
1

네트워크

목록 보기
1/1
post-thumbnail

프로젝트 막바지, aws ec2에 서버를 배포하고 https 설정을 마쳤다. 한 번 쭉 복습해보자.

원래?

일반적으로 https 통신을 하기 위해서는 SSL 인증서를 유료로 구입해서 서버에 설치해야 한다고 들었다.(무료도 있는 듯)
그러나 다른 방법을 알아보던 중 aws 안의 서비스들을 잘 이용하면 그럴 필요가 없다는 글을 어디선가 보았다.

어차피 ec2를 사용하고 있고 가능하면 aws 안의 서비스들을 활용하려 했기에 그렇게 하기로 했다.

구조

위와 같은 구조를 선택했다. AWS Certificate Manager를 사용해 ssl 인증서를 발급하고, 이것을 CloudFront에 등록한다. 그리고 route53을 이용해 도메인을 등록하고 호스팅한다. cloudfront는 https요청을 받아 ec2에 http로 넘겨준다. 또, ec2의 응답을 http로 받고 https로 프런트에 넘겨준다.

사실 엄밀히 말해서 맨 처음에 말했던 서버에 인증서를 설치하는 방식과는 다르다. 그렇게 하면 완전히 https로 통신을 하는 것이지만, 위의 구조를 따르면 결국 서버에서는 http로 요청과 응답을 주고받기 때문이다.

따라서 원래 정석대로 하는게 가장 좋겠지만, 일단 유료 ssl 인증서를 구입해야 하고 무료인 경우는 좀 찝찝한 느낌이 있어(또는 짧은 기간마다 갱신해야 한다) 위와 같은 방법을 택했다.


고민

위와 같은 방법을 택했을 때 가장 먼저 도메인을 route53에 등록해야 했는데, 일단 도메인이 없었다.

사실 프런트와 통신하기 위해 필요하기 때문에 도메인을 꼭 사야하나 싶어 ec2 ip주소를 고정시키고 그 주소로 등록할 순 없나 살펴보았다.

먼저 고정 ip를 할당받고 route53에 할당해봤더니 거기까진 가능했다. 그런데 acm에서 인증서를 발급받을 때 올바르지 않은 도메인 명이라고 하면서 발급이 불가능했다. 결국 acm을 이용하려면 도메인이 필요했기에 가비아에서 도메인을 샀다.(3000원 정도? 이것도 역시 다른 사이트에서 무료로 가능해 보이지만 그냥 사기로 했다.)


이후 과정

route53에 도메인을 등록하고 나서 가비아의 도메인 관리 창에서 route53에 있는 네임서버로 바꿔준다.

그리고 acm에서 인증서를 발급받는다. 이때 aws 지역을 미국 동부 (버지니아 북부) us-east-1로 설정해야 한다.

이후 cloudfront에 원본 도메인과 발급받은 인증서를 선택하고 대체 도메인 명을 route53에 등록하면 해당 도메인으로 https 접속이 가능해진다.

profile
백엔드 개발자

0개의 댓글