본문 바로가기
DoItDJango

aws 호스팅5

by 자동매매 2023. 4. 28.

https://wikidocs.net/164372

 

4-16 SSL

이제 브라우저에서 고정 IP 대신 도메인을 입력하여 서버에 접속할수 있게 되었다. 하지만 브라우저의 주소창을 보면 다음과 같이 주의 요함 이라는 경고 메시지가 표시된다. !…

wikidocs.net

 

SSL

이제 브라우저에서 고정 IP 대신 도메인을 입력하여 서버에 접속할수 있게 되었다. 하지만 브라우저의 주소창을 보면 다음과 같이 "주의 요함" 이라는 경고 메시지가 표시된다.

이러한 경고메시지가 보이는 이유는 https://pybo.kr 이 아닌 http://pybo.kr 처럼 https가 아닌 http 프로토콜을 사용했기 때문이다. 브라우저는 HTTPS가 아닌 HTTP 사용시 항상 이러한 경고 메시지를 보여준다.

http에 보안기능(SSL)을 더한 것이 https 프로토콜이다.

 

HTTPS가 필요한 이유

HTTPS가 아닌 HTTP 프로토콜을 사용하면 브라우저(클라이언트)와 파이보 서비스(서버) 사이에 주고 받는 데이터가 암호화 되지 않는다. 클라이언트와 서버가 데이터를 주고 받는 네트워크 경로는 매우 복잡한데 이 과정에서 누군가(해커)가 데이터를 훔쳐보는 일은 어렵지 않다. 따라서 네트워크 구간에서 주고받는 데이터는 반드시 암호화 하여 데이터가 노출되더라도 무슨 내용인지 알수 없게 해야 한다.

이러한 역할을 하는 것이 바로 HTTPSSL(Secured Socket Layer) 기능을 더한 HTTPS 프로토콜이다. SSL 인증서를 발급받아 Nginx에 적용하면 HTTPS 프로토콜로 서비스를 할수 있다.

 

참고 : SSL (https://wikidocs.net/125373)

 

SSL 인증서 발급

SSL 인증서는 인증 기관에서 인증하는 인증서를 발급 받아야 한다. 왜냐하면 브라우저에 이미 SSL 인증을 위한 인증 기관들이 등록되어 있기 때문이다.

인증 기관으로 등록되지 않은 기관에서 인증한 인증서는 인정되지 않는다.

대표적인 인증 기관으로는 Comodo, Thawte, GeoTrust, DigiCert 등이 있다. 이러한 인증 기관에서 인증서를 발급 받을 수 있다. 하지만 이러한 인증 기관의 SSL 인증서는 유료이다. (인증서의 가격은 인증 기관별로 다르다.)

이 책에서는 무료로 SSL 인증서를 발급해 주는 Let's Encrypt 서비스를 사용해 보자.

 

Let's Encrypt 인증서 설치

서버에 접속한후 다음과 같이 certbot을 설치하자.

ubuntu@jumpto:~$ sudo apt install certbot
ubuntu@jumpto:~$ sudo apt install python3-certbot-nginx

 

그리고 다음처럼 Nginx 웹서버에 사용할 Let's Encrypt의 인증서를 발급하자.

ubuntu@jumpto:~$ sudo certbot certonly --nginx

 

이메일주소, 도메인명(:pybo.kr)을 입력하자.

그러면 다음 위치에 인증서가 생성된다.

/etc/letsencrypt/live/pybo.kr/fullchain.pem

/etc/letsencrypt/live/pybo.kr/privkey.pem

 

Nginx 설정

이제 설치한 SSL 인증서를 Nginx에 적용하기 위해 다음과 같이 mysite 파일을 다음과 같이 수정하자.

 

[파일명:/etc/nginx/sites-available/mysite]

server {

        listen 80;

        server_name pybo.kr;

        rewrite        ^ https://$server_name$request_uri? permanent;

}

 

server {

        listen 443 ssl;

        server_name pybo.kr;

 

        ssl_certificate /etc/letsencrypt/live/pybo.kr/fullchain.pem; # managed by Certbot

        ssl_certificate_key /etc/letsencrypt/live/pybo.kr/privkey.pem; # managed by Certbot

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

        ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";

        ssl_prefer_server_ciphers on;

 

        location = /favicon.ico { access_log off; log_not_found off; }

 

        location /static {

                alias /home/ubuntu/projects/mysite/static;

        }

 

        location / {

                include proxy_params;

                proxy_pass http://unix:/tmp/gunicorn.sock;

        }

}

 

 

HTTP 요청(80번 포트) HTTPS(443번 포트)로 리다이렉트 하도록 설정했다. 그리고 설치한 SSL 인증서를 적용하기 위해 SSL 관련 설정들을 적용했다. (자동으로 추가된 SSL 관련 설정은 그대로 사용하자.)

위 설정에서 사용한 도메인명 pybo.kr을 여러분의 도메인명으로 바꾸어야 함에 주의하자.

이와 같이 Nginx 설정을 바꾼후에 다음과 같이 Nginx를 재시작하자.

ubuntu@jumpto:~$ sudo systemctl restart nginx.service

 

SSL 방화벽 설정

Nginx SSL을 적용하면 SSL의 포트인 443번 포트의 방화벽 해제가 필요하다. 다음을 참고하여 443번 포트의 방화벽을 해제하자.

 

 

HTTPS 확인

이제 브라우저에서 http://pybo.kr 대신 https://pybo.kr로 접속할수 있다. 그리고 이전에 표시되던 "주의요함" 경고메시지도 사라지고 인증을 의미하는 자물쇠 모양의 아이콘도 표시될 것이다.

 

PostgreSQL

https://wikidocs.net/75561

 

4-17 PostgreSQL

`[완성 소스]` : [github.com/pahkey/jump2django/tree/4-17](https://github.com/pahkey/jump2django/tree/4-…

wikidocs.net

 

AWS 라이트세일 사용 취소

https://wikidocs.net/164359

 

A-01. AWS 라이트세일 사용 취소

AWS 서비스를 더 이상 운영하지 않는다면 인스턴스와 고정IP 그리고 데이터베이스를 삭제하여 의도하지 않은 요금 발생을 막자. [TOC] ## 인스턴스와 고정 IP 삭제 A…

wikidocs.net

 

'DoItDJango' 카테고리의 다른 글

aws 호스팅4  (0) 2023.04.28
aws 호스팅3  (0) 2023.04.28
aws 호스팅2  (0) 2023.04.28
aws 호스팅1  (0) 2023.04.28
sendgrid를 통한 메일 전송  (0) 2023.04.18

댓글