개발노트
고즐의 개발 및 서버 개발 노트Certbot 인증서 만료 알림 자동화 완전 가이드
무료 SSL Certbot SSL 구축부터 자동화까지 한눈에 정리
- 아파치 SSL 인증서 충돌 해결기: 도메인마다 다른 인증서가 뜰 때 대처법
- Certbot으로 HTTPS 적용하기: Rocky Linux 9 실전 가이드
- 록키 리눅스 서버 운영자를 위한 필수 명령어 가이드 북
- 서버에서 SSL 활성 여부와 남은 기간 자동 표시하기
- Certbot 자동갱신 완전 가이드: cron과 systemd.timer 비교
- Certbot으로 Wildcard 인증서 발급하는 실전 가이드
- Certbot Friendly VirtualHost 템플릿: Apache·Nginx 즉시 적용 가이드
- Certbot 오류 해결 총정리 FAQ 가이드
- Certbot 인증서 만료 알림 자동화 완전 가이드
![]()
Certbot 인증서 만료 알림 자동화 가이드
Certbot 인증서 만료 알림과 모니터링 자동화는 HTTPS 서비스 중단을 예방하는 핵심 요소입니다. 본 문서는 실전 환경에서 자주 사용되는 자동화 전략을 구조적으로 정리하여 안정적인 운영을 돕습니다.
Certbot 만료 감지 자동화의 필요성
만료 감지 실패 위험
인증서 만료 알림이 없으면 웹사이트가 갑자기 HTTPS 오류를 발생시키며 사용자 접근이 차단됩니다. 자동갱신이 정상 작동하더라도 서버 설정 문제나 권한 오류로 인해 갱신 과정이 실패할 수 있으므로 별도의 감시 체계가 필요합니다.
필수 자동화 구성 요소
만료일 확인, 갱신 자체의 성공 여부 감지, 시스템 재시작 여부 확인 등 세 가지 항목을 모두 자동화해야 안정적입니다. 본문에서는 각 자동화 방식별 설정법을 상세히 소개합니다.
Certbot 갱신 실패 감지 자동화
Dry-run 기반 오류 감지 스크립트
갱신 테스트 실행
Certbot은 dry-run 모드를 통해 실제 갱신 없이 인증서 갱신 절차가 정상적으로 동작하는지 테스트할 수 있습니다. 이 테스트를 정기적으로 수행하면 갱신 오류를 조기에 파악할 수 있습니다.
#!/bin/bash
LOG=/var/log/letsencrypt/renew-check.log
if ! certbot renew --dry-run > /dev/null 2>&1 ; then
echo "[ERROR] Renewal failed on $(date)" | mail -s "[ALERT] Certbot Error" admin@example.com
echo "$(date) Renewal FAILED" >> $LOG
else
echo "$(date) Renewal OK" >> $LOG
fi
크론 스케줄링
0 3 * * * /usr/local/bin/renew-check.sh
매일 새벽 자동으로 스크립트를 실행하여 갱신 오류 여부를 감지하고 이메일로 알림을 발송합니다.
만료일 직접 파싱하여 알림 보내기
OpenSSL을 이용한 만료일 추출
만료일 확인 명령어
openssl x509 -enddate -noout -in /etc/letsencrypt/live/DOMAIN/fullchain.pem
이 명령을 통해 인증서 만료일을 읽을 수 있으며, 이를 스크립트로 계산하여 30일 이하로 남을 경우 경고 알림을 전송할 수 있습니다.
Telegram 메시지 전송 자동화
#!/bin/bash
DOMAIN="example.com"
CERT="/etc/letsencrypt/live/$DOMAIN/fullchain.pem"
EXPIRY=$(openssl x509 -enddate -noout -in $CERT | cut -d= -f2)
EXPIRY_TS=$(date -d "$EXPIRY" +%s)
NOW_TS=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_TS - $NOW_TS) / 86400 ))
if [ $DAYS_LEFT -le 30 ]; then
MESSAGE="SSL certificate for $DOMAIN expires in $DAYS_LEFT days."
curl -s -X POST "https://api.telegram.org/botTOKEN/sendMessage"
-d chat_id="CHATID"
-d text="$MESSAGE"
fi
원하는 메시지 플랫폼(Slack, Discord 등)으로 쉽게 확장 가능합니다.
Deploy Hook 기반 고급 자동화
인증서 갱신 성공 시 서비스 자동 재시작
Certbot deploy-hook 활용
deploy-hook은 갱신이 성공한 후 실행되는 스크립트를 지정할 수 있어 서비스 재시작 또는 외부 알림 전송을 포함한 자동화를 구현하기에 매우 유용합니다.
certbot renew --deploy-hook "/usr/local/bin/reload-nginx.sh"
#!/bin/bash systemctl reload nginx curl -X POST "https://api.telegram.org/botTOKEN/sendMessage" -d chat_id="CHATID" -d text="Certificate successfully renewed."
운영 실수 방지
웹 서버 재시작을 자동화하여 갱신 후에도 즉시 새로운 인증서가 적용되도록 보장합니다.
모니터링 도구를 활용한 SSL 상태 감시
Uptime Kuma 및 Grafana 기반 모니터링
Uptime Kuma TLS 모니터링
Uptime Kuma는 인증서 만료일을 직접 감시하며 경고 임계값을 설정할 수 있는 무료 도구입니다. Telegram, Slack, Webhook 등 다양한 알림 방식과 연동할 수 있어 손쉽게 SSL 상태를 모니터링할 수 있습니다.
Prometheus 및 Grafana 통합
blackbox_exporter를 이용하면 HTTPS 상태 및 인증서 정보를 Prometheus에서 수집할 수 있으며, Grafana 대시보드로 시각화 가능합니다. 중대형 서버 환경에서 많이 사용되는 구성입니다.
Cloudflare 기반 SSL 만료 알림
프록시 환경에서의 만료 감시
Cloudflare Edge Certificates 알림
Cloudflare는 자체적으로 인증서 만료 알림 기능을 제공합니다. 프록시 활성화 환경에서는 서버 인증서 만료가 즉시 노출되지 않기 때문에 별도로 구성된 Cloudflare 알림 시스템이 유용합니다.
Cloudflare API 조회
API를 통해 인증서 정보를 조회하여 만료일을 분석하는 자동화 스크립트를 구축할 수도 있습니다.
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONEID/ssl/certificate_packs"
정리 및 추천 자동화 구성
안전한 서버 운영을 위한 권장 조합
추천 구성 요약
1. Dry-run 기반 갱신 실패 감지 2. OpenSSL 파싱 기반 30일 전 알림 3. Deploy-hook 기반 자동 재시작 4. Uptime Kuma 또는 Cloudflare 알림 활용
이 네 가지를 조합하면 인증서 만료로 인한 서비스 중단을 효과적으로 예방할 수 있으며, Certbot 기반 HTTPS 환경을 더욱 안정적으로 운영할 수 있습니다.