linux 환경에서 certbot을 이용하여 SSL인증서를 자동갱신 해보자 (nginx, standalone, webroot)

hugeman·2023년 9월 7일
0

openssl

목록 보기
2/2

개요

certbot을 이용해서 SSL인증서를 발급받아 https를 사용하는 중
자동갱신 기능이 필요해져서 정리하였다.

crontab 사용법

crontab이란 linux에서 사용하는 스케쥴링 도구이다.

crontab 명령어

crontab -l : 스케쥴링 리스트를 확인한다.
crontab -e : 내용일 추가,수정 한다.
crontab -r : 내용을 삭제 한다.

crontab 포맷

* * * * * command-to-be-executed
- - - - -
| | | | |
| | | | +----- 요일 (0 - 7) (일요일 = 0 또는 7)
| | | +------- 월 (1 - 12)
| | +--------- 일 (1 - 31)
| +----------- 시 (0 - 23)
+------------- 분 (0 - 59)

위 포맷에 맞춰서 경로, 명령어를 실행한다.
예시)
0 12 * * * /home/user/myscript.sh 매일 12시 0분에 /home/user 경로의 myscript.sh 파일을 실행한다.

이미 설정된 자동갱신 방식 (renew를 사용하면 기존의 방식으로 갱신한다)

아래는 다른 DNS 를 둘 다 갱신하기 위한 방법이다.
갱신하는 명령어를 담은 sh를 만들고, 이를 crontab에서 실행시키는 방법이다.
--cert-name : DNS의 SSL 인증서를 갱신한다
--quiet : 로그를 최소화 해준다.
sudo systemctl restart nginx : 웹서버를 재시작 함으로써 SSL인증서를 적용시킨다.

renew_certificates.sh

sudo -E python3 certbot renew --cert-name example1.kr --quiet 
sudo -E python3 certbot renew --cert-name example2.kr --quiet 
sudo systemctl restart nginx

crontab

0 0 * * * /home/bitnami/.local/bin/renew_certificates.sh

nginx 방식

nginx는 웹 서버 소프트웨어로, 가벼움과 높은 성능을 목표로 한다. 웹 서버, 리버스 프록시 및 메일 프록시 기능을 가진다.

certbot renew --nginx : nginx를 이용하여 인증서를 갱신하는 명령어

자동갱신

crontab -e를 입력해서 편집기로 들어간다.

0 0 1 * * /home/bitnami/.local/bin/sudo -E python3 certbot renew --nginx

위 명령어는 매월 1일 0시 0분에 /home/bitnami/.local/bin 경로에서 sudo -E python3 certbot renew --nginx 명령어를 실행하는 내용이다.
위 내용을 입력하고 :wq 를 이용해서 저장하고 나온다.
crontab -l를 입력해서 정상적으로 등록이 되어있는지 확인한다.


webroot 방식

webroot 방식의 SSL인증서 발급 원리는 도메인 인증을 위해 외부에서 접근 가능한 경로를 제공하며, 인증기관인 LetsEncrypt에서 해당 경로로 접속하여 파일 업로드를 시도하고 파일이 해당 위치에 정상적으로 업로드되면 인증서가 발급된다. 따라서 standalone과는 달리 인증 시 서버를 내리지 않아도 된다.

nginx config파일 수정

nginx.config

location /.well-known/ {
    root /var/www/certbot/;
}

명령어 실행

1. sudo mkdir -p /var/www/certbot
2. certbot certonly --webroot -w /var/www/certbot -d www.example.com -d example.com
3. sudo systemctl restart nginx
  1. -p 옵션은 중간경로가 없으면 자동으로 생성하는 옵션이다.
  2. webroot방식으로 발급하며, -w 명령어는 파일 업로드하는 경로, -d는 도메인을 의미한다.
  3. 웹서버 재부팅

자동갱신

crontab -e를 입력해서 편집기로 들어간다.

0 0 1 * * /home/bitnami/.local/bin/sudo -E python3 certbot certonly --webroot -w /var/www/certbot -d example.com

위 명령어는 매월 1일 0시 0분에 /home/bitnami/.local/bin 경로에서 sudo -E python3 certbot renew --nginx 명령어를 실행하는 내용이다.
위 내용을 입력하고 :wq 를 이용해서 저장하고 나온다.
crontab -l를 입력해서 정상적으로 등록이 되어있는지 확인한다.


standalone 방식

standalone방식은 80포트를 이용해서 SSL발급의 인증을 발급받는다.
그런데 80포트를 사용하기 때문에 보통 웹 프로젝트에서 80포트는 사용중이기 때문에
사용중인 상황이라면 곤란하여 권장하지 않는다.

certbot renew : 인증서를 갱신하는 명령어
certbot renew --dry-run : --dry-run 옵션은 인증서를 갱신하는 명령어가 정상적으로 동작하는지 시뮬레이션 해주는 옵션이다.

자동갱신

crontab -e를 입력해서 편집기로 들어간다.

0 18 1 * * /usr/bin/certbot renew --renew-hook="sudo systemctl restart apache2"

위 명령어는 매월 1일 18시 0분에 /usr/bin/ 경로에서 certbot renew --renew-hook="sudo systemctl restart apache2 명령어를 실행하는 내용이다.
위 내용을 입력하고 :wq 를 이용해서 저장하고 나온다.

--renew-hook 옵션은 certbot 옵션으로, 인증서가 갱신되었을때 추가적으로 실행하는 명령어다.
위 명령어에서는 apache2 서버를 재시작 했지만, nginx를 넣어주면 nginx 서버가 재시작된다.

crontab -l를 입력해서 정상적으로 등록이 되어있는지 확인한다.


결론

certbot을 이용한 SSL인증서를 자동 갱신하는 방법과,
crontab의 개념과 사용법을 알게되었다.

profile
한 줄!

0개의 댓글