🔒

DNS-PERSIST-01은 어떻게 동작하나?

Let's Encrypt의 지속적 DNS 인증 레코드로 반복 검증 제거

기존 DNS-01 챌린지는 인증서를 발급하거나 갱신할 때마다 _acme-challenge. TXT 레코드를 새로 생성해야 했습니다. 이를 위해 DNS API 자격증명을 ACME 클라이언트에 제공해야 하고, DNS 전파 지연도 문제였습니다. DNS-PERSIST-01은 _validation-persist.example.com TXT 레코드에 CA의 URI와 ACME 계정 URI를 한 번만 설정하면, 이후 인증서 발급/갱신 시 CA가 이 레코드를 확인하여 도메인 소유권을 인증합니다. DNS 변경이 발급 경로에서 완전히 제거되어, DNS API 자격증명 노출 없이 자동 갱신이 가능해집니다.

구조 다이어그램

기존 DNS-01 방식 (매번 반복)
🖥️
ACME Client
토큰 요청
🏛️
Let's Encrypt
TXT 검증
🌐
DNS Server
_acme-challenge.
매번 변경 필요!
VS
DNS-PERSIST-01 방식 (한 번 설정, 계속 재사용)
🖥️
ACME Client
certbot 등
발급 요청 DNS 변경 없음!
🏛️
Let's Encrypt CA
계정 URI 대조
TXT 조회
🌐
DNS Server
_validation-persist.
한 번 설정 OK
핵심: <strong>_validation-persist.</strong> TXT 레코드에 CA + 계정 URI를 한 번만 설정하면,<br>이후 발급/갱신 시 <strong>DNS API 호출 없이</strong> 인증 완료
# TXT 레코드 예시
_validation-persist.example.com. TXT
  "acme-challenge=persist;
   ca=https://acme-v02.api.letsencrypt.org/directory;
   account=https://acme-v02.api.letsencrypt.org/acct/12345;
   policy=wildcard;
   persistUntil=2027-01-01T00:00:00Z"
주요 옵션 설명
ca 허용할 CA의 ACME directory URL (여러 CA 동시 허용 가능)
account 인증서 발급을 허용할 ACME 계정 URI
policy wildcard: 하위 도메인 포함, exact: 해당 도메인만
persistUntil 이 인증 레코드의 유효 기간 (만료 후 재설정 필요)

동작 흐름

1

기존 DNS-01: 발급 요청 → CA가 랜덤 토큰 발급 → _acme-challenge. TXT 레코드 생성 → DNS 전파 대기 → 검증

2

_validation-persist.example.com TXT 레코드에 CA URI + ACME 계정 URI 설정 (한 번만)

3

ACME 클라이언트가 Let's Encrypt에 인증서 발급 요청

4

Let's Encrypt가 _validation-persist. TXT 레코드 조회 → 계정 일치 확인

5

도메인 소유권 인증 완료 → 인증서 발급 (DNS 변경 없음)

6

갱신 시에도 동일 레코드 재사용 → DNS API 호출 불필요

장점

  • 인증서 발급/갱신 시 DNS 변경 불필요
  • DNS API 자격증명 노출 위험 감소
  • 와일드카드 인증서에도 적용 가능
  • persistUntil로 인증 만료 시점 제어
  • 여러 CA를 동시에 허용 가능

단점

  • ACME 계정 키 보호가 더 중요해짐 (키 유출 = 무단 발급 가능)
  • 2026 Q2 이후 Let's Encrypt 지원 예정 (아직 대기)
  • DNSSEC 필수가 아니어서 DNS 스푸핑 위험 존재
  • 지속적 인증이므로 키 유출 시 즉시 레코드 제거 필요

사용 사례

IoT 디바이스 대량 인증서 배포 멀티테넌트 SaaS 플랫폼 (고객 도메인 인증서) 대량 인증서 자동 발급/갱신 LAN 내부 서버 인증서 (DNS API 접근 불가 환경) 홈랩/자가 호스팅 자동화