https를 설정하며..

213kky·2024년 2월 14일

https를 맡은 계기


프로젝트 중 프론트엔드에서 버셀사용으로 https가 아니면 작업을 못한다고 선언하였다.

그래서 https를 적용해야했다.


오래걸린 이유


돌아보면 어렵지 않다고 보는게 맞는데 괜히 ec2서버 잘못건들였다가 대참사가나면 복구할 자신이 없어 여기저기 검색하며 하려다보니 시간이 오래걸렸다..

마지막에는 결국 이러다가 계속 못하겠다 싶어서 일단 이것저것 해보자는 마음으로 시작했었다.


https 적용기


개발서버 운영서버가 ec2로 각각있는데 개발서버에 적용을 하는 과정을 작성하려한다.

서버구조??

먼저 서버가 어떻게 구성되어 있는지 알아야 할 것 같아서 시스템 아키택처를 쳐다봤다

간단하게 서버 부분만 보면 지금 진행하는 프로젝트는 ec2 내부에 nginx를 사용하여 두개의 docker컨테이너에 연결되어있는 상황이다.


무료 도메인 + Route 53 + AWS Certificate Manager 삽질ing

처음에는 무료 도메인만 구해서 Route 53, AWS Certificate Manager를 이용해서 해보려했다..

예전에 문득 들어보고 사용도 해봤었던 freenom이라는 무료 dns 서비스를 이용하려했는데 언제부턴가 무료가 없어진듯하다..

그래서 다른 무료 dns서비스를 하는 사이트를 찾다가 duckdns를 알게 되었다.

그래서 duckdns, Route 53, AWS Certificate Manager를 이용해서 https를 적용해보려하였다 인터넷에 freenom, Route 53, AWS Certificate Manager를 이용해서 적용하는 내용들은 간혹 있었는데 duckdns를 이용한 내용은 찾아볼 수 없었다(이때 안되는걸 알았더라면...)

freenom과 거의 비슷한 방식으로 진행했지만 dns서비스에 name server를 등록하는 부분이 duckdns에는 없었다(지금이라도 멈춰!!)

크게 신경안쓰고 계속 freenom과 같은방식으로 진행하였고 다른 dns서비스에서 도메인을 구입해도 대기시간이 있을 수 있다고 하여서 기다려보기도하고 어딘가 실수했나 찾아보며 새로해보기도 하고 뻘짓을 몇시간 하다가 결국 포기를했다(그냥 안된다고..)

어느 서버 포럼에까지 가입해서 질문글을 남기고 자러갔다.

다음날 duckdns의 경우 하위도메인만 빌려다쓰는개념이기때문에 freenom과는 다를거라고 보여집니다. 라는 답변을 듣고야 포기를 하고 다른 방법을 찾아보았다.


duckdns + certbot

Route 53, AWS Certificate Manager를 이용하지 않고 하는 방법들이 생각보다 많았는데

그중에 내가 선택한 방식은 certbot를 이용해 https를 적용하는 방식으로 시도를 해보기 시작했다.

도메인은 어제 구한것 그대로 사용해서 진행을 하는데 이것도 참 같은 부분에서만 한참을 고생했다.

기본적으로는 이 사이트에서 8. SSL 적용을 참고해가며 설정을 했다.

# nginx 설치
sudo apt-get install nginx -y

# certbot을 snap 명령어로 설치, 실행하기 때문에 snap을 먼저 설치한다
sudo snap install core
sudo snap refresh core

# 기존에 설치된 certbot을 제거한다
# 공식 가이드에선 certbot명령어를 사용할 때 snap이 사용되게 하기 위함이라고 설명한다
sudo apt-get remove certbot

# certbot을 설치한다
sudo snap install --classic certbot

# certbot 명령어가 실행될 수 있게 세팅한다
sudo ln -s /snap/bin/certbot /usr/bin/certbot

# nginx가 아닌 apache를 웹서버로 사용할 경우, sudo certbot --apache 가 된다
sudo certbot --nginx -d richplace.ga -d www.richplace.ga -d dev.richplace.ga

# 놀랍게도 certbot은 CLI몇 줄로 SSL을 적용해줄 뿐 아니라 자동 리뉴얼까지 해준다;
# 처음 설치할 때부터 이러한 cron job 처리를 위한 내용이 함께 들어온다
# 아래 명령어로 자동 리뉴얼이 적용되고 있는지 확인할 수 있다
sudo certbot renew --dry-run

근데 작성자는 잘 됐나본데 나는 뭐가 문젠지 따라하면서 계속

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Deploying certificate
Could not install certificate
Could not automatically find a matching server block for devridge6.duckdns.org. Set the server_name directive to use the Nginx installer.
Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /var/log/letsencrypt/letsencrypt.log or re-run Certbot with -v for more details.

이런 오류가 계속났다 구글링 눈알빠지게 하고 영어로 된 글들도 읽으면서 찾아봤지만 찾기 쉽지가 않았다

그러다가 이 글에서는
Nginx 설정 부분에

인증서를 적용할 도메인을 적용한다.
server_name '도메인'
$ sudo vi /etc/nginx/sites-available/default

이런 글이 있어서 해당 파일만 진짜 열심히 만졌는데 이부분이 문제가 아니였다...(이런글이 한두개가 아니다 영어 열심히 봤는데 저 부분 수정하고 다시시작해라 이런 외국 글이 ...)


다른 글

  1. NGINX를 새로 설치한다고 가정하고 텍스트 편집기를 사용하여 /etc/nginx/conf.d 디렉토리 에 domain‑name .conf 라는 파일을 만듭니다 (이 예에서는 http://www.example.com.conf ) . .
  2. 다음 server_name 지시문을 사용하여 도메인 이름(및 변형이 있는 경우)을 지정합니다.
    server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    server_name example.com www.example.com;
    }
  3. 파일을 저장한 다음 이 명령을 실행하여 구성 구문을 확인하고 NGINX를 다시 시작합니다.

이런내용도 있어서 이대로도 해보고...

해당 글은

이런 글도 있어서 이것도 해봤다... ㅜㅜ

해결

마지막에는 해당 글 우연히 보게되었다.(해당 글마저도 "nginx - /etc/nginx/sites-available에 설정 파일 생성" 이런 내용으로 날 힘들게 했다..)

nginx - 설정 파일 확인 부분의

$ sudo nginx -t

명령어를 우연히 보게되고 사용하여 아래 응답보게 되었다.

설마 nginx 설정파일이 이 파일인가 싶어서 nginx.conf 파일의 server{ } 내부에
server_name 구매한 DNS;를 추가하고

sudo certbot install --cert-name 도메인 이름

명령어를 입력하고

드디어

https 설정에 성공하였다 ㅜㅜㅜㅜ

험난한 https 적용 여정이었다..


아래는 https 적용을 위해 참고하고 적용해본 페이지들...
내 고생에 대한 기록이다
도움이 아예 안되는 페이지는 즐겨찾기조차 안하고 나와 몇배는 많은 사이트에 들어갔겠지만 즐겨찾기만 35개나 했었다

profile
since 2022

0개의 댓글