프로그래밍/서버, DBMS

Let's Encrypt 인증은 HTTP-01, DNS-01, TLS-ALPN-01 중 무엇을 써야 할까? 선택 기준 정리

포도알77 2026. 5. 11. 12:26
반응형

Let's Encrypt 인증은 HTTP-01, DNS-01, TLS-ALPN-01 중 무엇을 써야 할까? 선택 기준 정리

Let's Encrypt로 인증서를 발급할 때는 ACME challenge 방식이 먼저 맞아야 한다. 2026년 5월 11일 기준 Let's Encrypt 공식 문서와 RFC를 보면, 일반적으로 많이 쓰는 선택지는 HTTP-01, DNS-01, TLS-ALPN-01 세 가지다.

차이는 단순히 설정 위치가 아니라 발급 가능한 인증서 종류, 필요한 포트, 자동화 방식, 다중 서버 환경에서의 운영 난이도에 있다. 이 글은 공식 문서 기준으로 각 방식의 동작과 선택 기준을 정리한다.

세 방식의 차이를 먼저 보면?

방식 검증 위치 필수 포트 와일드카드 주요 용도
HTTP-01 웹 서버의 /.well-known/acme-challenge/ 경로 80 불가 일반 웹 서버, 단일 사이트
DNS-01 DNS TXT 레코드 _acme-challenge 없음 가능 와일드카드, 포트 80 사용이 어려운 환경
TLS-ALPN-01 TLS handshake와 ALPN 443 불가 TLS 종료 프록시, CDN, 로드밸런서

위 표의 와일드카드 가능 여부와 포트 요구사항은 Let's Encrypt challenge types 문서와 RFC 8555, RFC 8737에서 확인할 수 있다.

HTTP-01은 언제 적합할까?

HTTP-01은 가장 흔한 방식이다. Let's Encrypt는 클라이언트가 웹 서버의 http://<도메인>/.well-known/acme-challenge/<TOKEN> 경로에 응답을 준비하면, 여러 지점에서 해당 파일을 가져와 도메인 제어 여부를 검증할 수 있다고 설명한다.

공식 문서 기준으로 이 방식은 TCP 80번 포트에서 동작해야 하며, 와일드카드 인증서 발급에는 사용할 수 없다. 또한 여러 웹 서버가 뒤에 있는 구조라면 검증 파일이 모든 서버에서 일관되게 노출되어야 한다.

HTTP-01이 무난한 경우

  • 일반적인 웹 사이트나 API 서버처럼 이미 HTTP 서비스를 운영 중인 경우
  • 포트 80을 열 수 있고, .well-known 경로 제어가 가능한 경우
  • 와일드카드 인증서가 필요하지 않은 경우

HTTP-01이 맞지 않을 수 있는 경우

  • ISP 정책이나 방화벽 때문에 80번 포트를 열 수 없는 경우
  • 백엔드가 여러 대라서 검증 파일을 모든 노드에 맞추기 어려운 경우
  • *.example.com 같은 와일드카드 인증서가 필요한 경우

DNS-01은 왜 와일드카드에 필요할까?

DNS-01은 웹 서버 대신 DNS에 TXT 레코드를 추가해 도메인 제어를 증명한다. RFC 8555는 검증용 이름으로 _acme-challenge.<도메인> 아래에 TXT 값을 두는 절차를 정의하고, Let's Encrypt 문서는 이 방식이 와일드카드 인증서 발급을 가능하게 한다고 설명한다.

*.example.com이 필요하면 사실상 먼저 검토할 방식은 DNS-01이다. 반대로 일반 단일 도메인만 필요하다면 반드시 DNS-01을 써야 하는 것은 아니다.

DNS-01을 먼저 검토할 상황

  • 와일드카드 인증서가 필요한 경우
  • 80번 포트를 외부에 열 수 없는 경우
  • 정적 사이트 호스팅, 내부 서비스, 프라이빗 백엔드처럼 HTTP 검증 경로 제어가 어려운 경우

DNS-01에서 운영상 주의할 점은?

Let's Encrypt는 자동 발급과 자동 갱신이 중요하므로, DNS-01은 DNS 제공업체의 API로 TXT 레코드를 자동화할 수 있을 때 특히 의미가 크다고 설명한다. 수동으로 레코드를 바꾸는 방식은 가능하더라도 갱신 자동화 측면에서는 불리하다.

또 이 방식은 DNS 전파 시간의 영향을 받을 수 있다. 따라서 짧은 발급 성공만 보지 말고, 사용 중인 DNS 제공업체가 API와 적절한 TTL 운영을 지원하는지도 같이 확인하는 편이 안전하다.

TLS-ALPN-01은 무엇이 다를까?

TLS-ALPN-01은 HTTP 계층이 아니라 TLS 계층에서 검증한다. RFC 8737에 따르면 ACME 서버는 443번 포트로 접속해 acme-tls/1 ALPN과 대상 도메인 SNI를 사용하고, 클라이언트는 검증 전용 인증서를 제시해야 한다.

Let's Encrypt는 이 방식이 대부분의 사용자보다는 TLS 종료 리버스 프록시, CDN, TLS-terminating load balancer 같은 환경에 더 적합하다고 설명한다. HTTP 라우팅을 건드리지 않고 TLS 레이어만 제어할 수 있을 때 장점이 있다.

TLS-ALPN-01이 유리한 경우

  • 80번 포트를 열 수 없지만 443번 포트는 제어 가능한 경우
  • 여러 백엔드 앞단에서 TLS 종료 장비가 일괄적으로 인증을 처리하는 경우
  • HTTP 애플리케이션 설정을 건드리지 않고 인증 검증을 처리해야 하는 경우

TLS-ALPN-01의 한계는?

  • 와일드카드 검증에는 사용할 수 없다.
  • 검증 시점에 443 포트의 TLS 응답을 직접 제어해야 한다.
  • 다중 서버 환경에서는 각 검증 대상이 일관된 TLS 응답을 내놓아야 한다.

결국 무엇을 기준으로 고르면 될까?

Let's Encrypt 문서는 확신이 없으면 클라이언트 기본값이나 HTTP-01을 따르라고 안내한다. 이를 바탕으로 실무 기준을 단순화하면 다음처럼 볼 수 있다.

  • 일반 웹 서버이고 와일드카드가 필요 없으면 HTTP-01이 기본 선택지다.
  • 와일드카드가 필요하거나 80번 포트를 쓸 수 없으면 DNS-01을 먼저 본다.
  • TLS 종료 프록시나 CDN 계층에서 검증을 끝내야 하면 TLS-ALPN-01이 더 자연스럽다.

자주 나오는 질문

Q. 리버스 프록시 뒤에 여러 웹 서버가 있으면 어떤 방식이 안전할까?

정답이 하나로 고정되지는 않는다. 다만 Let's Encrypt 문서상 HTTP-01TLS-ALPN-01은 여러 서버가 동일한 검증 응답을 제공해야 하므로, 앞단 프록시나 로드밸런서에서 일괄 제어가 가능해야 운영이 단순해진다. 그렇지 않다면 DNS 제어를 자동화한 DNS-01이 더 단순할 수 있다.

Q. 포트 443만 열려 있으면 HTTP-01도 가능한가?

아니다. RFC 8555는 HTTP-01 검증 요청이 HTTP 서버의 TCP 80번 포트로 가야 한다고 정의한다. 443만 열려 있다면 DNS-01이나 TLS-ALPN-01을 검토해야 한다.

Q. 와일드카드가 없는데도 DNS-01을 써도 될까?

가능하다. 다만 공식 문서 기준으로 DNS-01의 핵심 장점은 와일드카드 지원과 HTTP 포트 의존성 회피다. 일반 단일 사이트라면 HTTP-01이 더 단순할 수 있고, DNS-01은 DNS API 자동화가 준비되어 있을 때 특히 편하다.

정리

HTTP-01, DNS-01, TLS-ALPN-01은 모두 ACME 표준 안에 있지만 적합한 환경이 다르다. 일반 웹 서비스는 HTTP-01, 와일드카드나 DNS 중심 자동화는 DNS-01, TLS 종료 계층 중심 운영은 TLS-ALPN-01으로 생각하면 판단이 빨라진다.

가장 중요한 기준은 포트 제약, 와일드카드 필요 여부, 그리고 검증 지점을 애플리케이션과 DNS, TLS 중 어디에서 안정적으로 자동화할 수 있는가다.

참고 자료

728x90
페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사