인증서 만료가 계속 생기는 이유
SSL(정확히는 TLS) 인증서는 ‘이 도메인이 진짜고 통신이 암호화된다’는 증명서입니다. 유효기간이 있어서 때가 되면 새로 받아야 하는데, 처음 설치한 사람이 떠났거나, 결제 카드가 바뀌었거나, 자동 갱신 스크립트가 어느 순간 조용히 실패하면서 만료가 됩니다. 사이트가 멀쩡해 보여도 인증서는 특정 날짜에 갑자기 끊기는 게 특징이에요.
업체·전 담당자가 세팅
카드 만료·서버 이전·DNS 변경
알림 없음·로그만 남음
웹 경고창·앱 연결 실패
이미 만료돼서 사이트·앱이 멈춘 상태라면 이 글보다 먼저 도메인·SSL 만료로 먹통일 때 응급 대응을 보세요. 이 글은 ‘다시는 안 터지게’ 만드는 쪽입니다.
내 사이트는 어떤 경우인가 — 3가지 유형
| 유형 | 예 | 인증서 관리 주체 | 할 일 |
|---|---|---|---|
| 관리형 호스팅·플랫폼 | Firebase Hosting, Vercel, Netlify, 카페24·아임웹 기본 도메인 | 플랫폼이 자동 발급·갱신 | 커스텀 도메인 연결 상태만 확인 |
| 웹호스팅 + 내 도메인 | 카페24·가비아·닷홈 웹호스팅 | 호스팅 관리 화면에서 신청(무료/유료) | 자동 갱신 옵션 켜기, 만료일 메모 |
| 직접 운영 서버 | AWS EC2·네이버클라우드·자체 서버의 Nginx/Apache | 내가(certbot 등) | 자동 갱신 타이머 + 알림 + 재시작 훅 |
직접 운영 서버 — 무료 인증서 설치 순서
Let's Encrypt는 무료이고 자동화를 전제로 설계된 인증서입니다. 유효기간이 90일로 짧은 대신 certbot이 알아서 갱신합니다. Ubuntu + Nginx 기준 순서입니다.
# Ubuntu + Nginx
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
# 자동 갱신이 실제로 되는지 모의 실행
sudo certbot renew --dry-run
# 타이머가 켜져 있는지
systemctl list-timers | grep certbot
# 갱신 뒤 Nginx가 새 인증서를 읽도록 (훅 파일)
echo 'systemctl reload nginx' | sudo tee /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
‘지금 자동 갱신이 돌고 있나’ 확인하는 법
설치한 사람이 나든 남이든, 아래 세 가지를 확인하면 현재 상태를 알 수 있습니다.
- 만료일 직접 조회 — 브라우저 주소창 자물쇠 → 인증서 보기, 또는 서버에서
openssl로 확인. - 갱신 로그 —
/var/log/letsencrypt/letsencrypt.log에 최근 날짜의 성공/실패 기록이 있는지. - 마지막 갱신 날짜 — 발급일이 90일 넘게 안 바뀌었는데 Let's Encrypt라면 자동 갱신이 멈춘 겁니다.
# 남은 만료일 확인 (어디서든 실행 가능)
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
| openssl x509 -noout -dates
만료 전에 알려주는 장치 붙이기
권장 조합
- 외부 업타임 모니터링(SSL 만료 알림 기능 포함)이 매일 확인
- 만료 14일·7일 전 이메일·메신저 알림
- 도메인 등록 만료도 같은 곳에서 함께 감시
- 담당자 바뀌어도 알림 수신자는 공용 메일로
이것만으론 부족
- 인증기관의 만료 안내 메일만 믿기(스팸함·퇴사자 메일로 감)
- 캘린더에 날짜만 적어두기
- “자동이니까 괜찮겠지”
앱이 있다면 — API 서버 인증서를 따로 챙기기
홈페이지는 멀쩡한데 앱만 안 되는 경우가 있습니다. 앱이 쓰는 API 서버(api.example.com)의 인증서가 홈페이지와 다른 서버·다른 인증서라서, 그쪽만 만료된 거예요. 앱은 브라우저처럼 ‘경고를 무시하고 계속’이 없어서 연결 실패로 바로 멈춥니다. 또 앱에 인증서를 고정(pinning)해 둔 경우엔 인증서를 갱신해도 앱 업데이트 없이는 연결이 안 되니, 핀을 쓸 땐 교체 계획을 함께 세워야 합니다.
자주 묻는 질문
SSL 인증서는 무료로 설치할 수 있나요?
네. Let's Encrypt 같은 무료 인증서로 대부분의 홈페이지·API 서버에 충분합니다. 유효기간이 90일이라 자동 갱신 설정이 필수이고, 많은 호스팅·클라우드가 이 무료 인증서를 자동으로 발급·갱신해 줍니다.
자동 갱신을 설정했는데 왜 만료됐나요?
갱신 후 웹서버 재시작(reload) 훅이 없어서 새 인증서를 못 읽었거나, DNS·방화벽이 바뀌어 발급 검증이 실패했거나, 서버 이전 때 타이머가 함께 안 옮겨진 경우가 흔합니다. certbot renew --dry-run과 갱신 로그로 원인을 확인하세요.
카페24·가비아 호스팅은 어떻게 하나요?
호스팅 관리 화면에 보안서버(SSL) 메뉴가 있어 무료 또는 유료 인증서를 신청하고 자동 갱신을 켤 수 있습니다. 메뉴 이름과 위치는 호스팅사마다 달라서 ‘보안서버 인증서’ 항목을 찾아 만료일과 자동 갱신 여부를 확인하세요.
앱 서버 인증서도 같은 방법인가요?
방법은 같지만, 앱은 경고를 무시할 수 없어 만료 즉시 연결이 끊깁니다. API 서버 도메인의 만료일을 홈페이지와 별도로 관리하고, 인증서 고정(pinning)을 쓰고 있다면 교체 전에 앱 업데이트 계획을 함께 세워야 합니다.
인증서·도메인 만료, 다음엔 미리 알게 해두세요
사이트·앱 도메인 목록만 주시면 각 인증서 만료일과 자동 갱신 상태를 확인하고, 만료 전에 알림이 가도록 모니터링을 붙여드립니다.
문의: appmonster.kr@gmail.com
함께 보기: 도메인·SSL 만료로 앱·웹이 먹통일 때 · 오래된 앱 보안 점검 5가지 · 방치된 앱 점검 체크리스트 · iOS 인증서 만료로 앱이 안 열릴 때