원문 보기: https://dawoum.duckdns.org/wiki/Let%27s_Encrypt/Auto-renew
여기저기서 Let's Encrypt에서 발급하는 인증서를 자동으로 갱신하는 방법을 소개하고 있습니다.
그러나, 어떤 경우에서, 알려진 방법들이 내 환경과 맞지 않을 때에는 그런 방법을 이용할 수 없습니다.
그래서, 이전에는 인증서를 수동으로 발급받는 스크립트를 만들었습니다.
- 관련 서비스를 모두 중지합니다
- 인증서를 발급받습니다
- 관련 서비스를 모두 시작합니다
- 그 외 필요한 작업을 수행합니다
그런-다음 종료 날짜를 확인해서 30일 전에 위 스크립트를 수행하도록 Cron 작업을 수동으로 만들었습니다.
이것은 1년에 4~5번 정도 수행하는 임무이지만, 여전히 어딘가에 정보를 기록하고 신경을 쓰는 것이 귀찮습니다.
따라서, 인증서 발급 마지막에 크론 작업을 업데이트하는 스크립트를 추가할 필요가 있습니다.
즉, 필요한 과정은 아래와 같습니다:
- 인증서 만료 날짜를 구합니다.
- 그 날부터 29일 전의 월과 일을 구합니다.
- 이전 크론 작업을 지웁니다.
- 새롭게 크론 작업을 삽입합니다.
일반 사용자의 입장에서, 자주 사용하지도 않는 스크립트를 별도로 시간을 내서 공부하는 것이 현실적으로 적절한지 의문이고, 관련 지식이 전혀 없을 때 익히기도 쉽지 않을 수도 있습니다.
어쨌든, 완전하지는 않지만 단순히 작동하는 정도만 원하기 때문에, 인터넷 검색을 통해서 이를 수행할 수 있습니다.
인증서 만료 날짜 구하기
이전 문서에서, Let's Encrypt에서 다음 명령으로 만료 날짜를 확인할 수 있습니다:
- sudo certbot certificates
그러나, 위 명령으로는 너무 많은 출력으로 원하는 날짜를 구하는 것이 쉽지 않아 보입니다.
대안적으로, 검색을 통해 openssl을 통해 구할 수 있음을 알 수 있습니다 (또는 AI를 통해 정보를 얻을 수도 있을 것으로 보입니다. 그리고 검색어는 보다 구체적으로 적어야 원하는 정보와 가까운 것을 얻을 수 있습니다).
- sudo openssl x509 -in /etc/letsencrypt/live/domain_name/fullchain.pem -noout -dates
위에서 domain_name은 자신의 것으로 바꾸십시오.
이제, 출력으로부터, 원하는 날짜가 있는 것만 출력합니다:
- sudo openssl x509 -in /etc/letsencrypt/live/domain_name/fullchain.pem -noout -dates | grep notAfter
마지막으로, 날짜만 추출합니다:
- sudo openssl x509 -in /etc/letsencrypt/live/domain_name/fullchain.pem -noout -dates | grep notAfter | awk '{print $1,$2,$4}' | cut -b 10-
원하는 결과가 나왔습니다.
29일 전의 월과 일 구하기
이것도 마찬가지로 검색을 통해 정보를 얻을 수 있습니다. 위에서 얻은 정보 (Jul 25 2025)를 삽입해서 월과 일을 구합니다:
- date -d "29 day ago Jul 25 2025" +%m
- date -d "29 day ago Jul 25 2025" +%d
크론 작업
크론 작업을 지우고 삽입하는 것은 이미 No-IP-Auto-renew에서 확인할 수 있습니다. 이 과정 중에서 /usr/local/bin 아래에 만들어지는 3개의 파일 중에서, skd.sh에 내용이 기록되어 있습니다.
스크립트 만들기
위의 과정을 Bash (Unix shell) 스크립트를 만들 수 있습니다:
#!/bin/bash
expire_date=$(sudo openssl x509 -in /etc/letsencrypt/live/domain_name/fullchain.pem -noout -dates | grep --color=auto notAfter | awk '{print $1,$2,$4}' | cut -b 10-)
Mon=$(date -d "29 day ago $expire_date" +%m)
Day=$(date -d "29 day ago $expire_date" +%d)
Min=30
Hour=0
USER=user_name
SUDO=sudo
CRONJOB="$Min $Hour $Day $Mon * /home/user_name/Documents/update_domain_encrypt.sh > /dev/null 2>&1"
$SUDO crontab -u $USER -l | grep -v '/update_domain_encrypt*' | $SUDO crontab -u $USER -
($SUDO crontab -u $USER -l; echo "$CRONJOB") | $SUDO crontab -u $USER -
위 스크립트에서 2가지를 자신의 것으로 바꾸십시오:
- domain_name (1곳)
- user_name (2곳)
이 스크립트를 update_domain_encrypt.sh 파일의 끝에 추가함으로써 자동화를 완성할 수 있습니다.
추가 작업
일반 사용자는 sudo 명령을 암호 없이 수행할 수 없기 때문에, 별도로 암호 없이 스크립트를 수행할 수 있는 추가적인 작업이 필요합니다.
단지 보안에 문제가 생길 수 있으므로, 혼자 사용하는 컴퓨터에서만 사용하십시오.
댓글
댓글 쓰기