티스토리 뷰
✅ 진행 전 체크 리스트
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
위에 페이지에 나와있는 순서대로 본인의 OS, 웹서버 종류에 맞게 진행하면 된다.
아래 내가 진행한 내용은 Debian 10 & Nginx 임을 꼭 파악해야한다.
(1) 웹서버가 배포된 서버에 SSH 접속
(2) snapd 설치
https://snapcraft.io/docs/installing-snapd
위 사이트에서 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 |