어느 날 갑자기 내 사이트가 안 열립니다.
주소창에 빨간 경고. "연결이 비공개로 설정되어 있지 않습니다." 방문자한테도 똑같이 뜹니다. 심지어 "무시하고 접속" 버튼도 안 보여요. 그냥 벽이 서 있습니다.
저는 이걸 몇 주 동안 딴 데서 헤매고 있었습니다. 구글에 색인이 안 되길래 "콘텐츠가 부실한가?" 하고 글만 만지고 있었거든요. 근데 원인은 훨씬 단순하고 치명적인 데 있었습니다.
인증서는 신분증이고, 유효기간이 있다
SSL 인증서(사이트가 암호화 통신을 한다는 증명서)를 신분증이라고 생각해보세요.
신분증은 유효기간이 있죠. 만료되면 은행에서 안 받아줍니다. 아무리 내가 나여도요. 브라우저도 똑같습니다. 인증서가 만료된 사이트는 "이거 위조일 수도 있어" 하고 아예 문을 닫아버립니다.
Let's Encrypt라는 무료 인증서를 쓰면 유효기간이 90일입니다. 짧죠. 그래서 보통 자동 갱신을 걸어둡니다. 알아서 3개월마다 새 신분증을 받아오게요.
그런데 제 서버엔 그 자동 갱신 프로그램(certbot)이 아예 안 깔려 있었습니다.

어? 그럼 지금까지 어떻게 돌아갔지
이게 포인트예요. 예전에 서버를 한 번 재구축하면서 인증서 파일만 복원해뒀던 겁니다. 갱신 장치 없이요.
그러니까 남은 90일을 조용히 카운트다운하고 있었던 거죠. 재구축한 날로부터 딱 90일 뒤, 7개 도메인이 한날한시에 같이 죽었습니다. 폭탄 돌리기였는데 타이머가 켜진 줄도 몰랐던 겁니다.
고치는 건 생각보다 빨랐습니다. 서버에 certbot을 설치하지 않고도, 도커 이미지로 그때만 불러서 갱신할 수 있거든요.
docker run --rm \
-v /경로/certbot/conf:/etc/letsencrypt \
-v /경로/certbot/www:/var/www/certbot \
certbot/certbot renew
이걸로 끝인 줄 알았습니다. 근데 여기서 진짜 반전이 나옵니다.
절반만 살아났다 — SAN이라는 함정
갱신을 돌렸는데, 4개는 되고 3개는 실패했습니다.
로그를 보니 범인은 jenkins.XXXX.kr이라는 도메인이었어요. 이 도메인은 제가 외부 접속을 막으려고 DNS를 지워둔 상태였거든요. 그래서 갱신에 필요한 확인 작업이 실패한 겁니다. 여기까진 그럴 수 있어요.
문제는, 이 jenkins가 다른 인증서에 얹혀 타고 있었다는 겁니다.
SAN(하나의 인증서에 여러 도메인을 묶는 방식)이라는 게 있어요. 한 장의 신분증에 여러 명 이름을 같이 올려둔 거라고 보면 됩니다. 편하긴 한데, 함정이 있습니다. 그 중 한 명만 문제가 생겨도 신분증 전체가 재발급 거부됩니다.
제 경우 트래픽이 제일 많은 사이트가 하필 이 jenkins랑 한 인증서에 묶여 있었어요. jenkins 하나 때문에 멀쩡한 사이트까지 같이 갱신 실패한 거죠.

해결은 묶음을 푸는 거였습니다. 문제가 된 도메인을 빼고, 각 사이트를 단독 인증서로 다시 발급했습니다. 그랬더니 바로 살아났어요.
그래서 뭘 배웠냐면
솔직히 이번 일로 두 가지를 크게 느꼈습니다.
하나. 자동화는 걸어둔 걸로 끝이 아니라, 걸려 있는지 확인해야 끝이다. 저는 "당연히 갱신되겠지" 하고 몇 달을 방치했습니다. 정작 그 자동화가 존재하지도 않았는데요.
둘. 편하려고 묶은 게 위험을 묶는다. SAN으로 도메인을 한데 묶으면 관리가 편합니다. 근데 하나가 무너질 때 같이 무너집니다. 성격이 다른 도메인(특히 안 쓰는 도메인)은 따로 빼두는 게 낫더라고요.
마지막으로 재발 방지는 결국 이 한 줄이었습니다. 매주 한 번 갱신을 점검하는 예약 작업(cron)을 걸어두는 것. 진작 했어야 할 일이었죠.
한마디로, 인증서는 "설치하고 끝"이 아니라 "만료를 감시해야 하는 소모품"입니다. 혹시 Let's Encrypt 쓰시는 분이라면, 지금 바로 서버에서 certbot renew --dry-run 한 번 돌려보세요. 자동 갱신이 진짜 살아있는지, 그것부터 확인하는 게 오늘 할 수 있는 제일 값싼 보험입니다.
'서버, 인프라' 카테고리의 다른 글
| 서버가 털린 날 — 암호화폐 채굴 악성코드는 이렇게 들어왔다 (0) | 2026.09.24 |
|---|---|
| 왜 CI 서버(젠킨스)는 외부에 노출하면 안 될까 (0) | 2026.09.22 |
| 그래서 보안과 편의 사이, 어디에 서야 할까 (0) | 2026.06.21 |
| Jenkins 자동배포, 보안이랑 403이랑 한참 싸웠습니다 (0) | 2026.06.20 |
| 7개 도메인을 무중단으로 HTTPS 이전한 이야기 (0) | 2026.06.19 |