최대 1 분 소요

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하는 방식으로 변경해야 정상적으로 동작한다.

댓글 남기기