Java, IntelliJ/Spring

AWS EC2_Nginx_ Let's Encrypt로 HTTPS 적용하기

고로케 2021. 8. 27.
반응형

현재 AWS의 서버 환경
운영체제 : Ubuntu 18.04 (LTS)
웹서버 : Nginx
BL : PHP
DBMS : MySQL

도메인 : 가비아 

 

제 프로젝트의 PWA 적용을 진행하기에 앞서 필수 요소인 Https 구축이 필요합니다.

도메인은 가비아를 이용하였습니다.

 

HTTP

클라이언트와 서버 양쪽에서 통신할 수 있도록 하는 기본 통신 Protocol 이다.

HTTP 는 서버와 브라우저 사이에서 정보를 평문으로 전송하기 때문에 정보가 전달되는

네트워크에서 전송되는 정보를 엿볼 수 있다.

 

HTTPS (HTTP Secure)

S 가 secure 를 의미하니까 직감적으로 Http보다 안전하다는 걸 눈치 챌 수 있다.

평문 전송으로 인한 정보 유출을 막는 HTTPS는 클라이언트와 서버가 먼저 암호화 통신 채널을 설정하여 평문 HTTP 정보를 전송합니다. 암호화 채널은 SSL(TLS) 프로토콜을 사용해서 만든다.

 

Let's Encrypt

Let's Encrypt는 무료의 TLS/SSL 인증서를 쉽게 가져오고 설치할 수 있는 방법을 제공하는 

CA(인증 기관)으로, 웹 서버에서 암호화된 HTTPS를 사용할 수 있습니다.

이러한 방법은 사용자에게 Certbot라는 소프트웨어를 제공함으로써 구현할 수 있게 합니다.

 

1. Certbot 설치

Certbot 패키지 최신버전으로

$ sudo apt update
$ sudo apt upgrade
$ sudo add-apt-repository ppa:certbot/certbot

Certbot Nginx 패키지 설치

$ sudo apt install python-certbot-nginx

 

2. Nginx Config 설정

Nginx 기본 설정 파일 인증서 적용할 도메인 이름 설정하기

$ sudo vim /etc/nginx/sites-available/default

1) server_name _; 에서 언더바_ 를 지우고 본인의 가비아 주소를 입력한다.

2) location / { 안쪽에 다음과 같이 입력한다.

                proxy_pass http://localhost:8080;

                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;

3) 만약 본인의 서버가 2개 이상이라면 아래와 같이 세팅한다. (nginx와 spring이 돌아가는 서버가 다른 경우)

 

주의 ) upstream 은 server{ } 밖에 적어주어야한다

express-app 이라고 되어 있는 부분은 원하는 이름으로 바꿔주면 된다.

 

 

*vim 명령어

입력하기(insert) : i

저장하고 빠져나오기 : insert 상태에서 -> ESC 누르고 -> :wq 입력 - 엔터

그냥 빠져나오기 :  :q 

저장 안하고 빠져나오기 :  :q!

 

저장하고 빠져나와서 nginx 테스트

$ sudo nginx -t

syntax is ok 와 test is successful 이 나와야 정상이다.

에러가 났다면 다시 위의 config 파일에 가서 수정한 부분에 구문 마침 세미콜론 ; 이 빠지진 않았는지

확인해보고 수정한 뒤 다시 시도한다.

 

문제 없다면 설정 파일 적용을 위해 Nginx 를 다시 로드 해준다.

$ sudo systemctl reload nginx

 

3. 방화벽 확인

Ubuntu 는 기본적으로 ufw 기본 방화벽을 가지고 있어서 HTTPS 방화벽 허용이 필요하지만,

AWS EC2 인스턴스는 방화벽이 비활성화 되어있으므로 4번으로 넘어가도 된다.

Status : inactive 이므로 4번으로 넘어간다.

 

4-1. 도메인의 DNS 설정, 연결

가비아의 DNS 설정으로 접속한다

 

다음과 같이 DNS 설정을 해준다.

 

4-2. AWS EC2 보안 인바운드 규칙

테스트를 위하여 포트 80, 8080, 443 모든 포트를 개방해준 뒤 설정한 도메인을 주소창에 쳐서 연결이 됐는지 확인한다.

도메인과의 연결까지는 대체로 5분 이상 걸리는 듯 하다.

 

5. SSL 인증서 받기

Certbot은 다양한 플러그인을 통해 SSL 인증서를 획득하는 다양한 방법을 제공합니다.
Nginx는 필요할 때마다 Nginx를 재구성하고 구성을 다시 로드한다.
이제 설정한 도메인을 지정해서 Nginx를 통해 인증서를 획득해보자

 

다음과 같이 입력한다. (본인의 가비아 도메인 주소를 입력하면 된다.)

$ sudo certbot --nginx -d mydomain.shop -d www.mydomain.shop

이메일을 입력하지 않으면 Invalid email address 에러가 나온다.

1) 이메일 주소가 필수이므로 잘 입력하다.

2) 그리고 A 를 입력해 동의를 하고

이후 이메일 알람 관련 설정이 나오는데 아무거나 선택해도 상관없다.

3) 저는 Y를 입력해 설정했습니다.

 

만약 4번의 DNS 세팅을 하지 않았다면 위와 같은 오류가 발생하므로 

4번으로 돌아가 DNS 세팅을 한다.

 

정상적으로 작동했다면 위와 같은 문구가 나오고 

Redirect 하겠냐는 설정이 나온다. 

2번을 입력 선택했다.

 

위와 같이 나온다면 성공!

 

이제 Nginx 를 restart 해주면 끝

$ sudo service nginx restart

 

다음 사이트에서 도메인에 대한 서버를 테스트 할 수 있다.

본인의 도메인을 입력하고 테스트해보자 

만약 안된다면 4번의 443 포트를 안열어줘서 그럴 가능성이 있으므로 

다시 확인한다.

 

https://www.ssllabs.com/ssltest/

 

SSL Server Test (Powered by Qualys SSL Labs)

SSL Server Test This free online service performs a deep analysis of the configuration of any SSL web server on the public Internet. Please note that the information you submit here is used only to provide you the service. We don't use the domain names or

www.ssllabs.com

다음과 같은 결과가 잘 나온다.

 

 

 

 

 

https://webactually.com/2018/11/16/http%EC%97%90%EC%84%9C-https%EB%A1%9C-%EC%A0%84%ED%99%98%ED%95%98%EA%B8%B0-%EC%9C%84%ED%95%9C-%EC%99%84%EB%B2%BD-%EA%B0%80%EC%9D%B4%EB%93%9C/

 

반응형

댓글