AWS EC2로 배포하기(3) | certbot SSL인증서 발급 | https 설정

방충림·2023년 6월 14일
4

AWS

목록 보기
3/10
post-thumbnail

환경 : react, express, aws EC2 ubuntu20

서론

본 포스팅은 AWS EC2 환경에서 적용할 수 있는 방법을 설명한다.
SSH를 사용하여 EC2 인스턴스에 접속한 ubuntu CLI환경에서 사용할 수 있는 튜토리얼이다.

certbot에서 SSL인증서 다운로드

하단의 참고한 영상에서 certbot-auto를 소개해주어서 시도했으나 서트봇 오토 는 이상 지원되지 않는다. 알아보니 그냥 certbot을 사용해서 할 수 있다고 한다.

서트봇여기 에서 운영체제를 선택한 후 다운 받을 수 있다. 운영체제에 따라 안내가 되어있다. 우분투의 경우 아래와 같은 화면나온다.

서트봇을 다운받으려면 스냅샷을 먼저 설치하도록 안내가 되어있다.

SSH환경에서 다운을 받은 후 서트봇을 루트 권한으로 실행시킨다.
3개월 후 SSL인증서가 만료될 때 이메일을 받을 수 있는 이메일을 적어주고, 몇가지 동의를 한 후 인증서를 부여받을 도메인 이름을 입력한다.

몇가지 오류 해결

하지만 위와 같이 도메인을 입력하는 과정에서 오류가 발생했다.

두 가지 문제가 있었다.
1. NginX가 켜져있지 않은 것
2. 80번 포트를 다른 곳에서 사용중인 것

80번 포트를 누가 사용하는지 확인해보았다.
노드가 80번 포트에서 실행되고 있음을 볼 수 있었다.

PID(프로세스 아이디)를 kill 해주었으나 여전히 종료되지 않았다.

node는 현재 pm2로 실행되어 있으므로, sudo pm2 kill 명령어로 종료해주었다.

이후 다시 sudo lsof -i tcp:80 명령어를 사용해보니 아무것도 나오지 않은 것을 보아 확실히 종료되었음을 알 수 있었다.

NginX를 실행시켜 주었다. 다시 sudo lsof -i tcp:80명령어를 통해 NginX가 잘 실행된 것을 볼 수 있다.

성공 메시지 확인

다시 sudo cerbot을 실행해서 도메인을 입력한다.
이제 오류없이 성공메시지가 뜨는 것을 볼 수 있다.

여기에서 키가 저장되어있는 위치를 확인할 수 있고, 만료일자와 갱신에 관한 안내가 나와있다.
과거에는 certbot-auto를 이용해서 갱신시켜줘야했는데, 이제는 자동갱신으로 바뀌었나보다.

이 인증서는 2023-09-12에 만료됩니다. 이러한 파일은 인증서가 갱신될 때 업데이트됩니다. Certbot은 백그라운드에서 이 인증서를 자동으로 갱신하도록 예약된 작업을 설정했습니다.

보안그룹 설정

SSL인증서으로 https를 프로토콜을 사용할 것이기 때문 관련된 포트도 열어 주어야한다. AWS EC2 콘솔로 돌아와 인스턴스 > 보안 > 보안그룹 > 인바운드 규칙 편집 에서 다음과 같이 HTTPS 유형을 추가해준다. 포트는 443이며 자동적으로 설정된다.

NginX 설정 (+프록시)

다음과 같이 설정한다. 각각의 의미는 주석과 같다.

server {
        listen 443 ssl; // 443 포트에서 SSL/TLS 암호화로 듣고 있음
        server_name reloading.co.kr; // 서버의 이름 또는 도메인 이름
        ssl_certificate /etc/letsencrypt/live/reloading.co.kr/fullchain.pem; // SSL 인증서 파일 경로
        ssl_certificate_key /etc/letsencrypt/live/reloading.co.kr/privkey.pem; // SSL 인증서 개인 키 파일 경로
        include /etc/letsencrypt/options-ssl-nginx.conf; // SSL 구성 옵션을 포함
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; // SSL을 위한 디피-헬만(Diffie-Hellman) 매개 변수 파일


        location /api {
        proxy_pass http://127.0.0.1:3060; // 요청을 지정된 백엔드 서버(Node.js API)로 프록시
        proxy_http_version 1.1;// 프록시 서버와의 통신에 HTTP 버전 1.1을 사용
        proxy_set_header Upgrade $http_upgrade; // 클라이언트 요청 헤더의 'Upgrade' 값을 프록시 요청 헤더에 설정
        proxy_set_header Connection 'upgrade'; // 클라이언트 요청 헤더의 'Connection' 값을 'upgrade'로 설정하여 커넥션을 업그레이드
        proxy_set_header Host $host; // 프록시 요청 헤더에 호스트 헤더를 설정
        proxy_cache_bypass $http_upgrade; // 캐시 우회를 위해 'Upgrade' 요청에 대해서는 캐시를 사용하지 않도록 설정
        }

        root /var/www/reloading-build;
        try_files $uri $uri/ /index.html; 
}

참고
제로초 NGINX+https 적용하기
[AWS] EC2 인스턴스에 Nginx 적용하기

profile
최선이 반복되면 최고가 된다.

0개의 댓글