홈/엔지니어/트러블슈팅/SSL 인증서 만료·갱신 실패 해결 — certbo…
트러블슈팅초급UbuntuDebianSSLcertbotLet's Encrypt

SSL 인증서 만료·갱신 실패 해결 — certbot renew 오류 원인별 조치(포트 80·DNS·Rate Limit)

NET::ERR_CERT_DATE_INVALID, certbot renew 실패, 포트 80 차단, Nginx reload 실패 등 Let's Encrypt SSL 인증서 갱신 오류를 단계별로 해결하는 가이드.

목차
  1. 현재 인증서 만료일 확인
  2. 즉시 갱신 시도
  3. 원인 1 — 포트 80이 막혀 있음
  4. 원인 2 — Nginx/Apache 설정 오류로 플러그인 실패
  5. 원인 3 — 도메인 DNS가 서버를 가리키지 않음
  6. 원인 4 — Rate limit 초과
  7. 자동 갱신 설정 확인
  8. 갱신 후 Nginx 반영

브라우저에 NET::ERR_CERT_DATE_INVALID 또는 Your connection is not private 가 뜬다면 SSL 인증서가 만료된 것입니다.


현재 인증서 만료일 확인

Bash
# 도메인 인증서 만료일 확인 (외부에서)
echo | openssl s_client -connect 도메인:443 2>/dev/null | openssl x509 -noout -dates

# 로컬 certbot 인증서 목록
sudo certbot certificates

즉시 갱신 시도

Bash
sudo certbot renew --dry-run    # 테스트 (실제 갱신 안 함)
sudo certbot renew              # 실제 갱신

성공 시:

CODE
Congratulations, all renewals succeeded

실패 시 아래 원인별로 확인합니다.


원인 1 — 포트 80이 막혀 있음

Let's Encrypt는 HTTP-01 챌린지를 위해 포트 80이 반드시 열려 있어야 합니다.

Bash
# 포트 80 리스닝 확인
sudo ss -tlnp | grep :80

# UFW 방화벽 확인
sudo ufw status | grep 80

# 없으면 허용
sudo ufw allow http
Bash
# Nginx가 실행 중인지 확인 (standalone 모드는 중지 필요)
sudo systemctl status nginx

원인 2 — Nginx/Apache 설정 오류로 플러그인 실패

Bash
# 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가 서버를 가리키지 않음

Bash
# 도메인이 현재 서버 IP를 가리키는지 확인
dig +short 도메인
curl -s ifconfig.me   # 서버 공인 IP

두 값이 다르면 DNS 설정 문제입니다. DNS가 맞다면 전파 대기(최대 48시간) 후 재시도합니다.


원인 4 — Rate limit 초과

Let's Encrypt는 도메인당 주 5회 발급 제한이 있습니다.

Bash
# 갱신 로그 확인
sudo tail -50 /var/log/letsencrypt/letsencrypt.log | grep -i "rate|limit"

Rate limit에 걸렸다면 7일 대기 후 재시도하거나, 스테이징 서버로 테스트합니다:

Bash
sudo certbot renew --dry-run --staging

자동 갱신 설정 확인

Bash
# 자동 갱신 타이머 상태 확인
sudo systemctl status certbot.timer
sudo systemctl list-timers | grep certbot

# 타이머가 없으면 cron 확인
sudo crontab -l | grep certbot
cat /etc/cron.d/certbot
Bash
# 자동 갱신 cron이 없으면 추가
echo "0 3 * * * root certbot renew --quiet" | sudo tee /etc/cron.d/certbot

갱신 후 Nginx 반영

Bash
sudo nginx -t && sudo systemctl reload nginx

갱신 후에도 브라우저 캐시가 남아 있을 수 있습니다. Ctrl+Shift+R 로 강제 새로고침하거나 시크릿 창으로 확인하세요.

#SSL#certbot#Let's Encrypt#인증서 갱신#트러블슈팅#HTTPS#Nginx
편집 안내 · Editorial Note

AI 도구가 초안 작성에 사용될 수 있습니다. 명령어의 실행 여부와 검증 환경은 각 가이드에 기재된 근거를 확인하세요. 적용 전 사용 중인 버전의 공식 문서를 확인하고, 오류는 이메일로 알려주세요. 이메일로 제보

주제 관련 공식 문서(자동 연결 · 문장별 근거 아님)NGINX 공식 문서 ↗OpenSSL 공식 문서 ↗

질문 & 답변 (Q&A)

이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.