Let’s encrypt 인증서 자동갱신은 실패, 수동 갱신은 성공

AWS 프리티어로 옮기면서 같이 생성한 Let’s Encrypt SSL인증서가 벌써 만료일이 다가왔다. 무료인 대신 90일이면 만료되고, 만료 30일전부터 갱신을 해야한다.

초기에 매월1일에 갱신 스크립트를 실행하도록 어디서 본 자동갱신 cron 작업을 설정해두었다.

우리나라 시간대가 GMT+9기 때문에 1일인 오늘 아침 9시 넘어서 확인해보았는데 인증서 만료일이 여전히 8월16일로 표시되었다. bitnami 패키지로 설치해서 그런지, /var/log/cron에 있다는 로그파일도 찾을 수 없었다. 할수없이 수동으로 갱신을 시도해보았는데, 어랍쇼. 실패네?

2019/08/01 07:42:16 acme: Error -> One or more domains had a problem:
[hof.pe.kr] [hof.pe.kr] acme: error presenting token: could not start HTTPS server for challenge -> listen tcp :443: bind: address already in use
[www.hof.pe.kr] [www.hof.pe.kr] acme: error presenting token: could not start HTTPS server for challenge -> listen tcp :443: bind: address already in use

정확히 오류메시지를 이해할 수는 없었는데 “could not start HTTPS server for challenge” 부분이 눈에 띄었다. 혹시 이미 실행하고 있기 때문에 실행할 수 없는 것인가, 그렇다면 갱신 순서는 인증서 갱신 후 서버 재시작이 아니라 서버 중지하고 인증서 갱신하고 서버를 시작하는건가? 하는 생각이 들었다.

검색해서 찾은 참고 페이지 Unable to renew certificate 중 jota의 답변을 보니 비슷한 내용이 있다.

#!/bin/bash

sudo /opt/bitnami/ctlscript.sh stop apache
sudo /opt/bitnami/letsencrypt/lego --path="/opt/bitnami/letsencrypt" --email="이메일주소" --domains=도메인 --domains=www.도메인 renew
sudo /opt/bitnami/ctlscript.sh start apache

참고하여 차례대로 해보니 다행이 오류났던 경우와 다른 메세지가 나왔다.
2019/08/01 07:46:34 [INFO] [hof.pe.kr] acme: Trying to solve TLS-ALPN-01
2019/08/01 07:46:40 [INFO] [hof.pe.kr] The server validated our request
2019/08/01 07:46:40 [INFO] [www.hof.pe.kr] acme: Trying to solve TLS-ALPN-01
2019/08/01 07:46:47 [INFO] [www.hof.pe.kr] The server validated our request
2019/08/01 07:46:47 [INFO] [hof.pe.kr, www.hof.pe.kr] acme: Validations succeeded; requesting certificates
2019/08/01 07:46:48 [INFO] [hof.pe.kr] Server responded with a certificate.

브라우저 주소창에서 사이트 정보를 보니 제대로 갱신되었다.

8월16일 만료인데 8월 1일에 갱신했더니 다음 만료일은 이전 만료일인 8월16일+90일이 아니라 갱신일(8월1일) + 90일인 점은 주의해야겠다.

새로 설정한 크론탭 내용이다. 주위에 잘 아는 분께 한번 검사 받아봐야겠다.ㅎ;;

0 0 1,15 * * sudo /opt/bitnami/ctlscript.sh stop apache && sudo /opt/bitnami/letsencrypt/lego --path="/opt/bitnami/letsencrypt" --tls --email="이메일주소" --domains=hof.pe.kr --domains=www.hof.pe.kr renew && sudo /opt/bitnami/ctlscript.sh start apache