티스토리 뷰

진행 전 체크 리스트

1. 구매한 도메인

2. 도메인과 웹서버 연결

이 두개가 선행되어 있다는 전제 하에 진행된다!

현재 도메인이 HTTP 프로토콜로 접속이 가능한 상태일 때 HTTPS 인증서를 발급받는 방법이다.

여러 서버에 대해서 관리하는 경우는 로드밸런서를 이용해야 한다.

 

⛳️ 1. 운영체제 확인

$ lsb_release -dc
Description:    Debian GNU/Linux 10 (buster)
Codename:       buster

나는 운영체제가 Debian 10이고 nginx 웹서버를 이용해서 배포하고 있다.

 

⛳️ 2. 운영체제와 웹서버에 맞는 cerbot 파악

https://certbot.eff.org/instructions

 

Certbot Instructions

Tagline

certbot.eff.org

 

위에 페이지에 나와있는 순서대로 본인의 OS, 웹서버 종류에 맞게 진행하면 된다.

아래 내가 진행한 내용은 Debian 10 & Nginx 임을 꼭 파악해야한다.

 

(1) 웹서버가 배포된 서버에 SSH 접속

(2) snapd 설치

https://snapcraft.io/docs/installing-snapd

 

Installing snapd | Snapcraft documentation

Snaps are containerised software packages that are simple to create and install. They auto-update and are safe to run. And because they bundle their dependencies, they work on all major Linux systems without modification.

snapcraft.io

위 사이트에서 OS에 맞는 snapd 설치 가이드를 따른다. Debian은 아래와 같다.

 

  • snapd 설치
$ sudo apt update
$ sudo apt install snapd

- 가장 최신 snap로 업데이트 하기 위해 core 설치

$ sudo snap install core
2022-03-27T12:11:50Z INFO Waiting for restart...
core 16-2.54.4 from Canonical✓ installed
Channel latest/stable for core is closed; temporarily forwarding to stable.

- 잘 되는지 테스트 해보자. hello-world라는 테스트 snap을 설치해본다

$ sudo snap install hello-world
hello-world 6.4 from Canonical✓ installed

- 설치한 hello-world가 잘 실행되면 성공!

$ snap run hello-world
Hello World!

 

⛳️ 3. snap이 아닌 다른 OS 패키지로 설치된 cerbot 삭제하기

충돌 방지를 위해 다른 OS 패키지 (yum, apt, dnf 등등) 로 설치한 cerbot은 미리 삭제한다.

$ sudo apt-get remove certbot

 

⛳️ 4. snap으로 cerbot 설치

$ sudo snap install --classic certbot
certbot 1.25.0 from Certbot Project (certbot-eff✓) installed

설치한 cerbot을 /usr/bin/ 아래로 심볼릭 링크를 생성해서 cerbot을 사용할 수 있게 설정한다.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

 

⛳️ 5. 웹서버에 맞는 인증서 환경 설정

Nginx를 이용하므로 아래 명령어를 입력해서 Nginx에 맞는 인증서 환경을 설정한다.

$ sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

그러면 위와 같이 nginx에 server_name으로 등록한 도메인 주소가 뜬다.

주소에 맞는 번호를 입력해주면

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/{DNS주소}/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/{DNS주소}/privkey.pem
This certificate expires on 2022-06-25.
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 {DNS주소} to /etc/nginx/sites-enabled/{nginx 설정 파일}
Congratulations! You have successfully enabled HTTPS on https://{DNS주소}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

위처럼 성공적으로 인증서를 발급 받았다고 나온다!!!! 🎉

Let's Encrypted의 단점은 3개월마다 만료된 인증서를 갱신시켜 줘야 한다는 점인데 아무리 알람이 온다 하더라도 너무 귀찮으니..

자동 갱신 설정을 해보자

 

⛳️ 6. 자동 갱신 설정 (선택)

먼저 자동 갱신이 잘 실행될지 테스트를 해본다

$ sudo certbot renew --dry-run
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/{DNS주소}.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for {DNS주소}

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded: 
  /etc/letsencrypt/live/{DNS주소}/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

 

위처럼 Congratulations를 포함한 잘 된다는 메세지가 출력되면 갱신이 가능하다는 말이다

인증서를 갱신하는 명령어는 다음과 같다.

$ sudo certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/{DNS 주소}.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Certificate not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificates are not due for renewal yet:
  /etc/letsencrypt/live/{DNS 주소}/fullchain.pem expires on 2022-06-25 (skipped)
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

출력 메세지를 읽어보면 정확히 3달 후인 6월 25일에 만료되니 갱신하라고 나와 있다.

하지만 캘린더에 적어두고 작업하기엔 너무너무너무너무 귀찮다

crontab을 이용해서 자동으로 스케줄러를 등록하자

 

crontab의 시간 주기 작성 규칙은 위와 같다

$ sudo crontab -e

 

3개월에 한 번 갱신

00 00 01 */3 * /usr/bin/certbot renew --renew-hook="sudo systemctl restart nginx"

 

또는 갱신하는 월(month) 명시

00 00 01 Jan,Apr,Jul,Oct * /usr/bin/certbot renew --renew-hook="sudo systemctl restart nginx"

 

'Deployment' 카테고리의 다른 글

[PIP/PostgreSQL] psycopg2 설치 에러  (0) 2022.04.20
[node/linux] node.js + express + nginx + pm2 배포  (0) 2022.03.14
[node/linux] node 설치하기  (0) 2022.03.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함