Let's encrypt로 HTTPS 연결

ik_13038·2022년 8월 17일
0

라이징캠프 2주차

목록 보기
8/10

2주차 과제
Local 서버 구축 / Window/MacOS + Apache PHP MySQL (Bitnami) 👌
AWS 서버 구축 / Linux + Nginx PHP MySQ 진행 중..
Sub Domain에 각각 나만의 페이지 만들기

Https와 CA

  • 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라는 소프트웨어를 제공함으로써 구현한다.


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 인증서을 취득해보자.

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가 적용됐음을 알 수 있다.


profile
글 연습, 정보 수집

0개의 댓글