수정 약 3분

도메인 만료가 인증서 만료보다 위험한 이유

이 글의 순서 4개 절
  1. 무엇이 멈추고 무엇을 잃나
  2. 만료 뒤에 거치는 단계
  3. 감시는 도메인이 더 어렵다
  4. 최소한 해 둘 것

인증서 만료는 요란하다. 브라우저가 전면 경고를 띄우고 전화가 울리고, 30분쯤 소란을 떨고 나면 재발급으로 끝난다. 도메인 만료는 조용히 진행되다가 어느 선을 넘으면 돌이킬 수 없다.

무엇이 멈추고 무엇을 잃나

인증서 만료 도메인 만료
증상 브라우저 경고 (서비스는 살아 있음) DNS 자체가 죽음. 웹, 메일, API 전부
즉시 복구 재발급 몇 분~몇 시간 갱신하면 복구되나 DNS 캐시·파킹 전파로 수 시간~수일
최악 시나리오 없음 (재발급은 언제나 가능) 경매나 제3자 선점으로 영구 상실
부수 피해 신뢰도 하락 그 도메인 메일로 가입된 모든 계정의 비밀번호 리셋 탈취 가능

무서운 건 마지막 줄이다. 도메인을 잃으면 @example.com 메일이 남의 것이 된다. 그 메일로 가입한 AWS, GitHub, 레지스트라 계정의 비밀번호 재설정 메일이 전부 그쪽으로 간다. 서비스 장애에서 끝나지 않고 계정 침해로 번진다.

만료 뒤에 거치는 단계

만료일에 바로 뺏기지는 않는다. .com 같은 gTLD는 대부분 이렇게 흘러간다.

  1. 만료일: DNS가 멈추거나 파킹 페이지로 바뀐다. 이때 알아채면 다행이다
  2. 유예기간(Renewal Grace): 보통 0~45일이고 레지스트라 재량이다. 정상 가격으로 갱신할 수 있다
  3. 상환기간(Redemption Grace): 30일. 갱신은 되지만 상환 수수료(보통 $70~200)가 붙는다
  4. 삭제 대기(Pending Delete): 5일. 이제는 아무도 못 살린다
  5. 일반 풀 방출 또는 경매: 가치 있는 도메인은 드롭캐처가 초 단위로 선점한다

.kr은 단계가 다르고(만료 후 말소 절차) ccTLD마다 제각각이다. 유예를 며칠만 주는 TLD도 있다. 만료돼도 한 달은 여유가 있겠거니 하는 건 그 TLD를 확인하기 전까지는 도박이다.

감시는 도메인이 더 어렵다

인증서는 감시가 쉽다. 443에 접속하면 만료일이 나오니 openssl 한 줄이면 된다.

도메인은 WHOIS나 RDAP로 물어야 하는데, TLD마다 서버가 다르고 응답 형식도 제각각이다. WHOIS에는 레이트리밋이 있어서 도메인 수십 개를 매일 돌리면 차단당한다. ccTLD는 파편화가 심하다. .kr은 RDAP(rdap.nic.or.kr)로 만료일이 나오지만, RDAP를 지원하지 않거나 만료일을 감추는 ccTLD도 여전히 많다.

자동갱신을 켜 뒀다고 안심하기 쉬운데, 결제 카드가 만료되면 자동갱신이 조용히 멈춘다. 도메인 만료 사고에서 흔히 보는 원인이다.

그래서 도메인은 확인하는 법을 아는 것과 꾸준히 확인되고 있는 것 사이의 간극이 인증서보다 훨씬 크다.

최소한 해 둘 것

감시 우선순위를 정해야 한다면 도메인이 먼저다.

자동갱신은 켜 두고 결제수단은 이중으로 둔다. 카드 만료일이 도메인 만료일보다 먼저 오는지 확인하고, 레지스트라에 보조 결제수단을 등록할 수 있으면 등록한다.

알람은 만료일보다 훨씬 일찍 울리게 한다. 도메인은 상환 수수료와 경매 위험이 있어서 60~90일 전 알람이 정상이다. 만료일은 RDAP로 확인한다.

# gTLD 는 RDAP 표준 — 만료일(eventAction: expiration)
curl -sL https://rdap.org/domain/example.com \
  | python3 -c "import json,sys;[print(e['eventDate']) for e in json.load(sys.stdin)['events'] if e['eventAction']=='expiration']"

레지스트라 계정 자체를 지킨다. 도메인은 훔치는 것보다 계정을 뚫는 게 쉽다. 레지스트라 2FA는 필수로 걸고, 이전 잠금(transfer lock)은 켜 둔다.

인증서와 도메인은 같은 대시보드에서 본다. 둘 다 결국 이 서비스가 언제 죽느냐는 같은 질문이다. 인증서는 진단 툴로 바로 확인할 수 있다. 도메인 만료까지 묶어 매일 감시하려면 만료 감시 구독에 도메인을 넣으면 된다. 5개까지 무료다.