certbot Let’s Encrypt 자동 갱신 스크립트
AWS Lightsail에서 certbot을 이용해 HTTPS를 사용하고 있다. Let’s Encrypt 인증서는 90일마다 갱신해야 해서 번거로웠는데, 아래와 같은 스크립트를 찾았다. 실행해보니 잘 작동한다.
crontab에 등록해두고 인증서가 정상적으로 갱신되는지 지켜봐야겠다.
#!⁄bin⁄bash
# sudo test
if [[ $(⁄usr⁄bin⁄id -u) -ne 0 ]]; then
echo "Not running as root"
exit
fi
# test valid date left.
TESTDATE=`certbot certificates | grep VALID`
ATD=($TESTDATE)
LEFTDATE=`expr ${ATD[5]}`
echo "date left : ${LEFTDATE}"
if [ ${LEFTDATE} -lt 30 ]; then
echo "Left date less than a month, OK, proceeding update !"
# service apache2 stop
certbot renew
# service apache2 start
service apache2 restart # or nginx restart
else
echo "No need to update, yet"
fi
이 스크립트의 출처는 자유로운 그날을 위해 이다.
2021년 3월 2일 추가
3개월간 작동시켜보니 위 스크립트에 문제점이 있었다.
실제로 갱신이 되지 않는 경우가 있었는데, certbot renew 전에 웹서버를 stop하는 것이 문제였다. certbot이 갱신 작업을 할 때는 웹서버의 특정 URL(.well-known)에 HTTP로 접속해 도메인 소유자임을 확인하는 절차가 있는데, 웹서버가 꺼져 있으면 이 과정이 실패하면서 SSL 갱신도 실패하게 된다.
certbot renew는 웹서버가 실행 중인 상태에서도 작동하므로, 웹서버를 중단하지 말고 갱신 후에 restart하는 방식으로 변경해야 정상적으로 동작한다.
댓글 남기기