장애 발생 배경
최근 프로젝트에서 예기치 않은 도메인 장애가 발생했다. 이는 Grafana 모니터링 도구를 통해 관리 중이었음에도 불구하고, HTTPS 인증서가 갱신되지 않아 발생한 문제였다.
첫 번째 갱신 시도 실패
약 열흘전 인증서 만료가 임박함을 알았을때, Certbot을 통해 인증서를 갱신하려고 시도했었다. 하지만 Certbot은 인증서 만료일이 아직 한 달 이상 남았다고 판단하여 자동 갱신을 실행하지 않았다. 이는 실제 만료일과 Certbot의 인식 사이에 오류가 있음을 나타냈다.
$ sudo certbot renew
The following certs are not due for renewal yet: git-challenge.com/xxx.pem expires on 2024-06-10 (skipped)
No renewals were attempted.
장애 발생과 강제 갱신
인증서 만료일이 도래하자마자 도메인 접근에 문제가 생겼고, 이로 인해 서비스가 중단되었다. 이 문제를 신속히 해결하기 위해, 저희는 Certbot의 강제 갱신 옵션을 사용했다.
$ sudo certbot renew --force-renewal
새롭게 갱신된 인증서를 서버에 적용한 후, 문제는 10분 내에 해결되었습니다.
원인 분석과 해결
이 문제의 근본 원인을 조사하던 중, Certbot 이슈 트래커에서 유사한 문제를 겪고 있는 다른 사용자들의 보고를 발견했다. 이 문제는 아직 해결되지 않았기 때문에, 이후 인증서 만료일을 보다 정확히 알기 위해 직접 .pem
파일을 검사하기 시작했다.
https://github.com/certbot/certbot/issues/9860
Intermediate certificate is not checked for expiry if server certificate is not due for expiry · Issue #9860 · certbot/certbot
This is a fresh report for #8917 which was closed due to inactivity. The same issue persists in the latest versions. My operating system is (include version): Ubuntu 20.04 I installed Certbot with ...
github.com
openssl을 사용해서 인증서의 만료시간 확인하기
다음은 openssl
을 사용하여 PEM 파일의 만료일을 확인하는 방법에 대한 예시이다:
- 터미널을 열고 다음 명령어를 입력한다. 여기서
your_certificate.pem
은 확인하려는 인증서의 파일 이름으로 바꿔야 한다.openssl x509 -in your_certificate.pem -noout -enddate
- 이 명령어는 인증서의 만료 날짜를 출력한다. 출력 형식은 일반적으로
notAfter=날짜
형태이다.
예를 들어, 인증서 파일이 server_cert.pem
이라면 명령어는 다음과 같이 되고
openssl x509 -in server_cert.pem -noout -enddate
실행 결과는 다음과 같이 나타날 것이다:
notAfter=Dec 12 12:00:00 2023 GMT
이는 인증서의 유효 기간이 2023년 12월 12일까지임을 의미한다.
결론: 모니터링의 중요성 재확인
이번 장애는 큰 교훈을 주었습니다. 기술적 문제와 예상치 못한 상황에도 불구하고, 모니터링 도구가 얼마나 중요한지를 몸소 느낄 수 있었다.
모니터링 툴이 없었으면 얼마나 오래 장애가 발생했었는지도 몰랐을거다..
아울러, 문제 발생 시 신속하고 효과적으로 대처하는 것의 중요성도 다시 한번 깨닫게 되었다.