2주차 과제
Local 서버 구축 / Window/MacOS + Apache PHP MySQL (Bitnami) 👌
AWS 서버 구축 / Linux + Nginx PHP MySQ 진행 중..
Sub Domain에 각각 나만의 페이지 만들기
Https는 무엇인가?
일반적인 HTTP는 브라우저와 서버 사이에서 정보를 평문으로 전송하므로 정보가 전달되는 네트워크에서 전송되는 정보를 제 3자가 엿볼 수가 있다.
이처럼 제 3자가 엿보는 것을 예방하기 위해 클라이언트와 서버가 먼저 암호화 통신 채널을 설정한 다음 평문 HTTP 메시지를 전송함으로써 정보 유출을 막는 HTTPS가 등장했다. 암호화 채널은 SSL(현 TLS) 프로토콜을 사용해서 만든다.
Https는 필수인가?
개인적인 용도로 사용하는 서버라면 상관 없지만, 회원가입과 같은 개인정보가 사이트에 들어가는 경우
2012년 8월 18일부터 법이 변경되어 정보통신망 이용촉진 및 정보보호 등에 관한 법률에서 제28조와 제76조가 보안과 과태료에 관련된 내용으로
제15조 제4항 제3호 정보통신망을 통하여 이용자의 개인정보 및 인증정보를 송신·수신하는 경우 보안서버 구축 등의 조치라고 언급되며 https 연결을 의무화하고 있다.
출처는 해당 링크를 참조하길 바란다.
우리는 Let's encrypt를 CA로 사용할 것이다.
Let's Encrypt는 무료의 TLS/SSL 인증서를 쉽게 가져오고 설치할 수 있는 방법을 제공하는 CA(인증 기관)으로, 웹 서버에서 암호화된 HTTPS를 무료로 이용할 수 있다. 이러한 방법은 사용자에게 Certbot라는 소프트웨어를 제공함으로써 구현한다.
$ sudo apt update
$ sudo apt upgrade
$ sudo add-apt-repository ppa:certbot/certbot #certbot을 위한 저장소 추가
$ sudo apt install python3-certbot-nginx
처음 참고한 블로그에서는 해당 코드를 입력하면 된다고 알려주었는데 본인은 AWS 내에서 Ubuntu 22.04 버전을 사용해서인지 certbot 저장소 추가가 정상적으로 되지가 않았다.
그래서 구글링한 결과 처음 확인한 건 아래와 같은 정보였다.
링크에서는
sudo apt-add-repository -r ppa:certbot/certbot
sudo apt update
다시 삭제하고 업데이트를 한 이후에 설치하라고 하였으나 똑같은 현상이 발생했다.
아마 오류 내용을 보아 404 Not found인 걸 보면 해당 사이트에서 더이상 설치를 지원하지 않는 것 같아 다른 링크를 참조해본 결과 링크를 발견했다.
링크된 사이트에서 확인하다보면 Install Certbot Client 항목이 있는데 이 때 Cerbort는 Ubuntu 22.04에서 snap package로 제공된다는 것을 확인할 수 있었다.
snapd에 대한 정보는 링크에서 확인할 수 있다. 간단히 이야기하면 Linux 통합 패키지 관리 툴이다.
sudo apt update
sudo apt install -y snapd
sudo snap install core
sudo snap refresh core
이후 snap이 설치가 완료가 됐으면 certbot을 설치를 한다.
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
이제 certbot이 설치가 완료되었으므로 Let’s Encrypt SSL 증명서를 인증 받아
HTTPS를 적용 할 도메인을 설정해주자.
$ sudo vi /etc/nginx/sites-available/default #nginx 기본 설정 파일
맨 처음 nginx와 phpinfo.php를 연결 할 때와 동일하게 nginx기본 설정 파일로 접속해서 설정을 해준다. server_name 옆에 내가 https를 구축하고 싶은 도메인을 작성해준다.
$ sudo service nginx restart #nginx 재시작
$ sudo ufw status # 방화벽 활성화 여부
nginx를 재시작해주면 적용 완료이다.
참고로 이전에 EC2 서버에서 https 프로토콜을 인바운드 규칙에 허용해주었는지 확인해볼 수 있도록 하자. 비허용시 접속이 안될 수 있다.
이제 nginx를 통해 SSL 인증서을 취득해보자.
# 원하는 도메인 지정해서 nginx 플러그인
$ sudo certbot --nginx -d ikinfo.shop -d www.ikinfo.shop
빨간 색 칸에는 본인이 연락 등 지원을 받을 email을 입력하라고 하여 입력하는 부분이다. 이후 내용은 아래 코드와 사진을 참고하여 본인이 원하는 도메인을 입력하면 된다.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): hongildong@naver.com << 본인 email 작성
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y << 해당 공지사항 확인 여부
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N << 새 소식에 대해 이메일로 전달 받을 것인지 여부
Account registered.
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: 본인이 제작한 사이트1
2. 본인이 제작한 사이트2
...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel): 1 << Let's Encrypt SSL Certificate을 취득할 웹사이트 선택
Requesting a certificate for 본인이 제작한 사이트1
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/www.itzgeek.net/fullchain.pem
Key is saved at: /etc/letsencrypt/live/www.itzgeek.net/privkey.pem
This certificate expires on 2022-xx-xx
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for 본인이 제작한 사이트1 to /etc/nginx/conf.d/본인이 제작한 사이트1.conf
Congratulations! You have successfully enabled HTTPS on 본인이 제작한 사이트
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
이후 모든 설치가 완료되면 다시 nginx를 시작해보자.
$ sudo service nignx restart
이제 실행 이전과 이후를 비교해보면 https가 적용됐음을 알 수 있다.