브라우저에 NET::ERR_CERT_DATE_INVALID 또는 Your connection is not private 가 뜬다면 SSL 인증서가 만료된 것입니다.
현재 인증서 만료일 확인
# 도메인 인증서 만료일 확인 (외부에서)
echo | openssl s_client -connect 도메인:443 2>/dev/null | openssl x509 -noout -dates
# 로컬 certbot 인증서 목록
sudo certbot certificates즉시 갱신 시도
sudo certbot renew --dry-run # 테스트 (실제 갱신 안 함)
sudo certbot renew # 실제 갱신성공 시:
Congratulations, all renewals succeeded실패 시 아래 원인별로 확인합니다.
원인 1 — 포트 80이 막혀 있음
Let's Encrypt는 HTTP-01 챌린지를 위해 포트 80이 반드시 열려 있어야 합니다.
# 포트 80 리스닝 확인
sudo ss -tlnp | grep :80
# UFW 방화벽 확인
sudo ufw status | grep 80
# 없으면 허용
sudo ufw allow http# Nginx가 실행 중인지 확인 (standalone 모드는 중지 필요)
sudo systemctl status nginx원인 2 — Nginx/Apache 설정 오류로 플러그인 실패
# Nginx 설정 검증
sudo nginx -t
# 갱신 시 웹서버 플러그인 명시
sudo certbot renew --nginx # Nginx 사용 시
sudo certbot renew --apache # Apache 사용 시
# standalone 모드 (웹서버를 잠깐 중지)
sudo systemctl stop nginx
sudo certbot renew --standalone
sudo systemctl start nginx원인 3 — 도메인 DNS가 서버를 가리키지 않음
# 도메인이 현재 서버 IP를 가리키는지 확인
dig +short 도메인
curl -s ifconfig.me # 서버 공인 IP두 값이 다르면 DNS 설정 문제입니다. DNS가 맞다면 전파 대기(최대 48시간) 후 재시도합니다.
원인 4 — Rate limit 초과
Let's Encrypt는 도메인당 주 5회 발급 제한이 있습니다.
# 갱신 로그 확인
sudo tail -50 /var/log/letsencrypt/letsencrypt.log | grep -i "rate|limit"Rate limit에 걸렸다면 7일 대기 후 재시도하거나, 스테이징 서버로 테스트합니다:
sudo certbot renew --dry-run --staging자동 갱신 설정 확인
# 자동 갱신 타이머 상태 확인
sudo systemctl status certbot.timer
sudo systemctl list-timers | grep certbot
# 타이머가 없으면 cron 확인
sudo crontab -l | grep certbot
cat /etc/cron.d/certbot# 자동 갱신 cron이 없으면 추가
echo "0 3 * * * root certbot renew --quiet" | sudo tee /etc/cron.d/certbot갱신 후 Nginx 반영
sudo nginx -t && sudo systemctl reload nginx갱신 후에도 브라우저 캐시가 남아 있을 수 있습니다. Ctrl+Shift+R 로 강제 새로고침하거나 시크릿 창으로 확인하세요.
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.