문제의 상황
모도코라는 사이트의 API Server를 운영하고 있고 CertBot으로 무료 인증서를 Let's Encrypt로부터 받아와서 사용하고 있다.
무료 인증서는 갱신 기간이 90일밖에 되지 않기 때문에 CertBot으로 자동으로 renew되도록 cronjob을 등록해놓았다. 실제로 거의 1년 동안 신경 안 쓰고 잘 사용해왔다.
그런데 인증서가 만료되면서 사이트 로그인이 되지 않는다고 갑자기 문의가 들어왔다.
일단 API 서버가 사용중인 인증서를 보니 이전에 만료된 Let's Encrypt 인증서를 사용하고 있었다.
운영 환경
API Server를 관리하기 위해 PM2라는 Process Manager를 사용하고 있다.
GitHub에 Code를 업데이트하면 GitHub Action으로 자동으로 AWS Code Deploy로 배포하도록 설정해두었다.
해결한 과정
일단 서버 로그부터 확인했는데 아무런 이상 여부가 보이지 않았다.
인증서도 잘 갱신되어 있었다.
그러다 생각해보니 최근에 3개월 간 코드 업데이트가 이루어지지 않아서 서버가 재시작되지 않았다는 것을 깨달았다. 그렇다면, refresh되기 전의 인증서를 불러와서 사용중인 것이 아닐까 생각했다.
그래서 서버를 재시작했다.
아니다 다를까 갱신된 인증서로 서버가 시작되며 정상이 되었다.
나는 추후 이런 오류를 방지하기 위해 인증서를 갱신하는 명령이 성공하면 서버를 재시작하여 인증서를 새로 불러오도록 하였다.