Let's Encrypt 챌린지 타입

Let's Encrypt 챌린지 타입 (Challenge Types)

인증서를 받을 때 Let's Encrypt는 그 인증서의 도메인 이름을 당신이 통제한다는 걸 ACME 표준이 정의한 "챌린지"로 검증해요. 대부분은 ACME 클라이언트가 자동으로 처리하지만, 복잡한 설정을 해야 할 땐 이 개념을 알아두는 게 좋아요. 잘 모르겠다면 클라이언트 기본값이나 HTTP-01을 쓰면 돼요.

출처: https://letsencrypt.org/docs/challenge-types/

HTTP-01이 가장 흔한 챌린지예요. Let's Encrypt가 클라이언트에 토큰을 주면, 클라이언트가 http://<YOUR_DOMAIN>/.well-known/acme-challenge/<TOKEN> 파일에 그 토큰과 계정 키 지문을 넣어 두는 방식이에요. Let's Encrypt는 여러 관점에서 그 파일을 가져와 확인하고, 일치하면 발급을 진행해요. HTTP-01은 포트 80에서만 동작해요(임의 포트를 허용하면 보안이 약해지므로 ACME 표준이 금지). 리다이렉트는 최대 10개까지, http/https와 80/443 포트로만 따라가요. 장점은 자동화가 쉽고 호스팅 제공자가 CNAME된 도메인에 발급하기 좋으며, IP 주소 검증도 가능해요. 단점은 포트 80이 막힌 경우·와일드카드 미지원·여러 웹 서버에 파일을 다 배치해야 하는 점이에요.

DNS-01은 도메인의 _acme-challenge.<YOUR_DOMAIN>에 TXT 레코드를 넣어 DNS 통제를 증명해요. HTTP-01보다 설정은 더 어렵지만, HTTP-01이 못 하는 시나리오에서 쓸 수 있고 와일드카드 인증서를 발급할 수 있어요. 자동화·갱신이 중요하므로, DNS 제공자가 API를 제공할 때만 쓰는 게 맞아요. 주의할 점은 웹 서버에 DNS API 자격증명을 두면 서버 해킹 시 영향이 커진다는 거예요 — 범위를 좁힌 자격증명을 쓰거나 별도 서버에서 DNS 검증을 수행하고 인증서만 복사하는 게 모범 사례예요. 전파 시간(propagation time)이 지연 요인이에요.

TLS-ALPN-01은 TLS 레벨에서 호스트 기반 검증을 하고 싶은 TLS 종료 리버스 프록시 작성자(주로 대형 호스팅 제공자)를 위한 것이에요. 포트 443에서 커스텀 ALPN 프로토콜로 검증하고, 포트 80이 없어도 되고 IP 주소도 검증할 수 있지만, ACME 클라이언트 지원이 제한적이고 와일드카드는 불가능해요. 참고로 이전의 TLS-SNI-01은 보안이 부족하다고 판단되어 2019년 3월에 제거됐어요.

더 알아보기