SSL 인증서가 만료되면 브라우저에 전체 페이지 보안 경고가 표시되어 방문자가 사이트에 접근하지 못합니다. 인증서 만료 시점을 확인하고 모니터링을 설정하는 방법을 알아보세요.
브라우저에서 확인
https://로 사이트를 방문합니다- 주소 표시줄의 자물쇠 아이콘을 클릭합니다
- “인증서” 또는 **“연결이 안전합니다” → “인증서가 유효합니다”**를 클릭합니다
- “유효 기간” 또는 “만료일” 날짜를 확인합니다
OpenSSL로 확인 (명령줄)
원격 확인 (아무 컴퓨터에서)
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -enddate
출력 예시: notAfter=Aug 5 12:00:00 2026 GMT
로컬 파일 확인
openssl x509 -noout -enddate -in /etc/ssl/gethttps/fullchain.pem
모든 세부 정보 한 번에 확인
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates
원라이너 스크립트로 확인
인증서가 30일 이내에 만료되는지 확인:
if openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -checkend 2592000 > /dev/null 2>&1; then
echo "Certificate is valid for at least 30 more days"
else
echo "WARNING: Certificate expires within 30 days!"
fi
여러 도메인 한 번에 확인
여러 도메인을 관리하는 경우 루프로 모두 확인할 수 있습니다:
for domain in example.com www.example.com api.example.com; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate 2>/dev/null | cut -d= -f2)
echo "$domain — expires: $expiry"
done
cron을 사용한 자동 모니터링
인증서 만료 30일 전에 이메일을 보내는 일일 cron 작업을 생성합니다:
#!/bin/bash
# Save as /usr/local/bin/check-ssl-expiry.sh
DOMAINS="example.com www.example.com api.example.com"
WARN_DAYS=30
WARN_SECS=$((WARN_DAYS * 86400))
for domain in $DOMAINS; do
if ! echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | \
openssl x509 -noout -checkend $WARN_SECS > /dev/null 2>&1; then
echo "WARNING: $domain certificate expires within $WARN_DAYS days" | \
mail -s "SSL Expiry Warning: $domain" admin@example.com
fi
done
crontab에 추가: 0 9 * * * /usr/local/bin/check-ssl-expiry.sh
모니터링 서비스 설정
보다 안정적인 방법으로 모니터링 서비스를 사용하세요:
| 방법 | 설정 방법 | 비용 | 알림 옵션 |
|---|---|---|---|
| 캘린더 알림 | 발급 60일 후로 설정 | 무료 | 수동 |
| Cron 스크립트 | 매일 확인 스크립트 실행 | 무료 | 이메일 |
| UptimeRobot | SSL 모니터 추가, 알림 임계값 설정 | 무료 플랜 | 이메일, Slack, 웹훅 |
| Better Uptime | 인시던트 관리 포함 SSL 모니터링 | 무료 플랜 | 이메일, SMS, Slack |
| Certbot 자동 갱신 | systemd 타이머를 통한 certbot renew | 무료 | 만료 자체를 방지 |
Let’s Encrypt의 90일 인증서는 60일째에 갱신합니다(30일 여유).
어떤 인증서 세부 정보를 확인해야 하나요?
만료일 외에도 정기적으로 확인하세요:
echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2>/dev/null | openssl x509 -noout -text | grep -E 'Subject:|Issuer:|Not After|DNS:'
확인 내용:
- Subject/SAN — 인증서가 올바른 도메인을 포함하는지
- Issuer — 예상한 CA(예: Let’s Encrypt)에서 발급했는지
- Not After — 만료일
- DNS names — SAN 필드의 모든 도메인 이름
자주 묻는 질문
인증서가 만료되면 어떻게 되나요?
브라우저에 “연결이 비공개로 설정되지 않았습니다”(Chrome) 또는 “경고: 잠재적 보안 위험”(Firefox) 같은 전체 페이지 경고가 표시됩니다. 대부분의 방문자는 즉시 떠납니다. 검색 엔진도 인증서가 갱신될 때까지 페이지 순위를 낮추거나 색인에서 제거할 수 있습니다.
얼마나 자주 확인해야 하나요?
자동 갱신(Certbot)을 사용하는 경우, 안전망으로 매월 확인하세요. 수동으로 갱신하는 경우(GetHTTPS), 50일째에 확인하고 60일째에 반드시 알림을 설정하세요. 2029년에 47일 유효기간이 도입되면, 모니터링이 더욱 중요해집니다.
명령줄 접근 없이 만료를 확인할 수 있나요?
네. SSL Labs Server Test나 SSL Shopper의 SSL Checker 같은 온라인 도구에서 만료일을 포함한 인증서 세부 정보를 보여줍니다. 도메인만 입력하면 됩니다. 브라우저 DevTools에서도 확인 가능합니다(자물쇠 아이콘 → 인증서 세부 정보).
인증서가 이미 만료되었다면?
즉시 갱신하세요. GetHTTPS에서 새 인증서를 발급받고, 서버의 파일을 교체한 뒤, 웹 서버를 리로드합니다. 5분이면 됩니다. 인증서가 만료되었다고 해서 페널티가 있는 것은 아닙니다 — 새 인증서를 갱신하고 설치하면 됩니다.
하나의 스크립트로 여러 도메인을 모니터링할 수 있나요?
네. 모든 도메인을 확인하고 남은 일수를 출력하는 스크립트입니다:
#!/bin/bash
for domain in example.com www.example.com api.example.com; do
expiry=$(echo | openssl s_client -connect "$domain":443 -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2)
days_left=$(( ($(date -d "$expiry" +%s) - $(date +%s)) / 86400 ))
if [ "$days_left" -lt 30 ]; then
echo "WARNING $domain: $days_left days left"
else
echo "OK $domain: $days_left days left"
fi
done
참고: date -d 구문은 Linux 전용입니다. macOS에서는 date -j -f "%b %d %H:%M:%S %Y %Z"를 사용하세요.