인프라 | CICD/AWS

letsencrypt 무료 SSL 인증서 생성하기 (AWS/Route53)

냠냠:) 2024. 2. 13. 16:02

개요

사이드 프로젝트를 진행하다 https 환경이 아닌 탓에 테스크 진행이 지연되거나 복잡해지는 경우가 생겼다. 

인스타그램 API 연동을 해야하는데 callback uri에 https prefix가 강제된다거나 (ngrok로 해결), url 클립보드 복사 테스트를 진행하지 못하는 등 불편한 점들이 자꾸 생기길래 이를 해결하기위해 인증서 발급 과정을 진행했다.

 

그냥 사서 하면 되는거 아닌가요? -> 와일드 카드 인증서 기준 년 60 ~ 80 만원을 사용할 용기가 나지 않았다.

AWS Certificate manager는 무료지 않나요? -> 추가적인 elb, ec2 구축이 강제되기에 이또한 비용이었다.

 

 

Step 1. Certbot 설치

brew install certbot

( mac으로 진행했기에 brew를 사용합니다. 리눅스로 설치를 진행하는 경우 apt 또는 yum으로 진행하는 부분을 찾아보길 바랍니다. )

 

 

Step2. 호스팅 영역 확인

해당 글은 AWS에서 도메인을 구입하여 호스팅 영역이 생성 되었거나, 타사이트에서 구매한 도메인을 Route 53 호스팅 영역에 적용한 상황이라고 가정합니다. 
AWS에서 도메인을 구입하면 알아서 호스팅 영역을 만들어줍니다.

타사이트에서 구입한 도메인을 Route 53으로 등록하려면 링크를 참고해주세요

 

AWS > Route 53 > 호스팅 영역

- 호스팅 영역에서 NS와 SOA가 정상적으로 등록 되어있는지 확인

(AWS에서 도메인을 구입하면 알아서 호스팅 영역을 만들어준다.)

 

가비아는 아래 링크에서 설명하는 레코드 추가 화면이 보이면 OK
 https://customer.gabia.com/manual/dns/3041/3040

 

Step3. 와일드 카드 SSL 인증서 발급 / DNS 검증

sudo certbot certonly --manual --preferred-challenges dns -d "*.ice-tz.com" -d "ice-tz.com"
  • ice-tz.com을 등록할 도메인으로 치환해주시면 됩니다.
  • 해당 도메인은 이미 구입이 되어 호스팅영역에 존재해야합니다.

 

위 명령어를 입력하면 아래와 같이 레코드 이름과 값을 볼 수 있습니다.

다른 도메인으로 등록한 사진이어서 가렸습니다.

 

레코드 이름과 값을 호스팅 영역 > 레코드 추가 버튼을 통해 등록해줍니다.

 

 

 

이제 다시 터미널에서 Enter 버튼을 눌러 진행해주면 됩니다.

여기서 주의사항이 하나 있는데 방금 등록한 도메인에 대해 DNS 배포가 정상적으로 이루어진 다음에 Enter를 눌러야 한다는 것입니다.

https://toolbox.googleapps.com/apps/dig/#TXT/_acme-challenge.{등록한 도메인}.

{ 등록한 도메인 } -> naver.com와 같이 등록한 도메인으로 치환해주세요.

 

 

 

아래 TXT로 해당하는 부분이 보이면 터미널에서 Enter를 눌러주면 됩니다.

만약, 레코드 이름과 값을 다시 보여준다면 제대로 등록된 것이 아니기 때문에 다시 진행해주셔야 합니다.

 

 

 

이런 화면이 뜬다면 성공입니다. 

이제 체인과 private key로 인증서를 만들면 됩니다.

 

 

 

Step4. 인증서 생성

Step3. 결과 화면에서 해당 줄을 확인할 수 있습니다. 

Certificate is saved at: /etc/letsencrypt/live/{등록한 도메인}/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/{등록한 도메인}/privkey.pem

 

 

이제 순서대로 명령어를 입력해서 인증서를 만들어 보겠습니다.

cd /etc/letsencrypt

(live 폴더에 접근 권한이 없는 경우)
sudo chmod 777 live/
cd live

sudo cat {등록한 도메인}/fullchain.pem {등록한 도메인}/privkey.pem > ./{등록한 도메인}.pem

예시) sudo cat naver.com/fullchain.pem naver.com/privkey.pem > ./naver.com.pem

 

{등록한 도메인}.pem으로 만든 파일이 인증서 파일입니다.

이제 해당 인증서를 ELB, Nginx 등과 같은 로드밸런서, 웹서버 등에 붙이기만 하면 HTTPS 환경에서 웹 서비스를 제공할 수 있습니다.

 

 

마치며..

관련 내용에 대해 잘 정리되어있는 자료들이 많아서 손쉽게 진행할 수 있었습니다. 저는 nginx를 구축하여 특정 서버로 라우팅해주는 부분까지 진행했지만 내용이 방대해질 것 같아 인증서 생성 부분만 포스팅하게 되었습니다. 다음에 기회가 된다면 Route53과 nginx를 활용하여 도메인을 붙이는 작업까지 포스팅할까 합니다.

 

 

Reference

- https://letsencrypt.org/

- https://deoking.tistory.com/7

반응형

'인프라 | CICD > AWS' 카테고리의 다른 글

[AWS/Lambda] 외부 라이브러리 import (python/paramiko)  (0) 2024.02.13