일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- binary queue
- 부모 노드
- ListIterator
- Double Hasing
- 이진 큐
- 큐
- 배열
- 해시 테이블
- Linear Probing
- Queue
- Double형 배열
- java
- 자료구조
- 단말노드
- 향상된 for문
- 조상 노드
- 선형 조사법
- 직접 주소 개방
- 루트노드
- array
- Open-Addressing
- 노드 레벨
- Gargbae Collector
- 자바
- singly linked list
- 트리 높이
- 객체 배열
- 이차 조사법
- 자식 노드
- Quadratic Probing
- Today
- Total
영운's 블로그
AWS 서버 구축하기(5) - HTTPS 적용하기(Let's encrypt) 본문
1) HTTP vs HTTPS
AWS서버에 도메인까지 적용하였으나 크롬으로 접속하면 url창 옆에 '주의요함' 이라는 경고가 있고
이를 누르면 https가 적용되지 않았다는 내용이 나타난다.
http와 https 모두 OSI 7 layer 중 7계층인 apllication layer에 해당하는 프로토콜이다.
http는 정말 전송만을 목적으로 하는 프로토콜로 데이터를 별도로 암호화하지 않기에 보안상 취약하다.
예를 들어 비밀번호 등을 입력하는 것도 해당 텍스트가 암호화 되지 않고 그대로 들어난다.
이러한 http의 단점을 보완한 것이 https 프로토콜이다.
https는 별도로 ssl이라는 암호화 방식을 이용하여 데이터를 암호화 합니다.
ssl은 공개키와 대칭키를 융합한 암호화 방식이다.
이러한 보안상 이점으로 인해 검색엔진은 SEO(search engine optimization)에서 http보다 https에 우선순위를 부여한다.
결국 https를 이용하는 것이 보안상, 검색 우선순위상 이점이 있기에 사실상 https가 필수가 되었다.
2) Certbot 설치
https는 ssl 암호화 방식을 사용하는데 중간에 CA(Certificate Authority)가 별도의 인증서를 만들어
보다 원활하게 암호화와 복호화를 하게 도와준다. CA는 무료와 유료가 있는데 Let's Encrypt라는
CA는 이를 무료로 제공한다. Let's Encrypt에서 제공하는 패기지가 바로 Cerbot이다.
root@ip-172-31-37-33:/home/ubuntu# snap install --classic certbot
root@ip-172-31-37-33:/home/ubuntu# ln -s /snap/bin/cerbot /usr/bin/certbot
Certbot은 snap명령어를 이용하여 다운받는다. snap을 이용하는 경우 apt와 달리
프로그램에 필요한 라이브러리등을 모두 포함하고 있어 설치가 간편하다는 장점이 있다.
certbot을 설치 후 심볼릭 링크로 cerbot의 기본디렉토리를 /usr/bin/디렉토리와 연결하여
별도로 경로를 지정하지 않고도 단순히 certbot 명령어를 쓸 수 있게 한다.
3) Nginx 설정
root@ip-172-31-37-33:/home/ubuntu# apt install python3-certbot-nginx
root@ip-172-31-37-33:/home/ubuntu# vim /etc/nginx/sites-available/default
root@ip-172-31-37-33:/home/ubuntu# systemctl reload nginx
이후 vim으로 들어가 nginx 설정파일로 들어가
자신의 서버 도메인(나의 경우 www.ohyougeun.shop ohyouneun.shop)을 추가한다.
이후 nginx에 reload명령어로 해당 설정을 적용한다.
3) 방화벽 ufw에 https 허용하기
내가 구축한 AWS서버는 Ubuntu 운영체제이기에 ufw라는 방화벽을 가지고 있다.
ufw status 명렁어로 확인해보니 ufw가 비활성화 되어있었다.
ufw enable 명렁어를 통해 방화벽을 활성화 시킨 후
ufw status 명령어를 통해 허용된 통신을 확인한다.
ufw allow 'Nginx Full'
ufw delete allow 'Nginx HTTP'
nginx http만이 허용되었기에 'Nginx Full'(http + https)를 추가하고 기존의 'Nginx http'는 제거한다.
방화벽을 설정했다 ssh가 막혀서 다시 접속이 불가능했다.
방화벽을 해제하려면 ssh로 접속해야 하는데 접속이 불가능했다..
방화벽을 설정시 ssh도 허용했어야 하는 데 그걸 하지 않은 것이다...
https://intellipaat.com/community/8740/locked-myself-out-of-ssh-with-ufw-in-ec2-aws
다행이 나처럼 바보같은 행동을 한 사람이 많았다.
구글링을 열심히 해 AWS인스턴스를 새로 만들고 볼륨을 서로 바꾸고..
다행이 다시 접속은 됐지만 기존 인스턴스의 공공ip주소가 바뀌었다.
도메인 이름과 ip주소 매칭을 다시 했어야 했다.
이후 그냥 ufw를 활성화하지 않고 진행하였다.
4) SSL 인증서 받아오기
root@ip-172-31-37-33:/home/ubuntu# certbot --nginx -d www.ohyoungeun.shop -d ohyoungeun.shop
certbot의 Nginx플로그인을 통해 Nginx로 만든 서버에 SSL인증서를 부여한다.
--nginx는 nginx플러그인을 사용하겠다는 의미이며 -d는 정확히 어떤 도메인 이름들에
인증을 줄 것인지 정하는 것이다. 앞서 우리가 구매한 도메인 이름을 적으면 된다.
이후 이메일을 적고
약관에 동의하는지
이메일로 관련 홍보 메일들 보내도 되는지 등을 물어본다.
원하는 옵션에 따라 선택을 하면 된다.
설정이 완료되고 나의 서버로 접속하면 url창 옆에 자물쇠가 나타나며
클릭시 https가 잘 적용되고 있음을 확인할 수 있다.
Let's Encrypt의 인증서는 90일의 유효기간이 있기에 이를 주기적으로 갱신해주어야 https를 계속 적용할 수 있다.
다행히 certbot자체가 주기적으로 검사하여 유효기간이 30일 이하인 경우 이를 갱신시켜준다.
직접 수동으로 certbot renew --dry-run 명령어를 입력했을 때 인증서 갱신에 성공했다고 나오면
갱신 과정에 문제가 없는 것이기에 성공적으로 설치가 완료된 것이다.
참고: https://luminitworld.tistory.com/85?category=975147
'서버 & 데이터베이스' 카테고리의 다른 글
외부접속 가능한 로컬서버 구축 - bitnami 및 포트포워딩 (0) | 2022.04.23 |
---|---|
AWS 서버 구축하기(6) - 서브도메인 및 리다이렉션(ip to domain & http to https ) 적용 (0) | 2022.04.22 |
AWS 서버 구축하기(4) - Domain 구매 후 적용하기 (0) | 2022.04.22 |
AWS 서버 구축하기(3) - phpmyadmin 설치 (1) | 2022.04.21 |
AWS 서버 구축하기(2) - MySQL 외부에서 접속하기 (0) | 2022.04.20 |