HTTP-01은 SSL 인증서를 받기 위한 가장 일반적인 ACME 챌린지 유형입니다. 인증 기관이 HTTP 포트 80을 통해 웹 서버에서 특정 파일을 가져와 도메인 관리 여부를 확인합니다. DNS-01보다 간단하지만 와일드카드 인증서에는 사용할 수 없습니다.
작동 원리
- Let’s Encrypt가 토큰(임의 문자열)을 제공합니다
http://yourdomain.com/.well-known/acme-challenge/{token}에 파일을 생성합니다- 파일 내용은 키 인가 — 토큰과 ACME 계정 키 지문의 조합입니다
- Let’s Encrypt가 공개 인터넷에서 이 URL을 가져옵니다
- 내용이 일치하면 챌린지를 통과하고 인증서가 발급됩니다
GetHTTPS를 사용하면 1단계와 3단계가 자동으로 처리됩니다 — 화면에 표시된 값으로 서버에 파일만 배치하면 됩니다.
챌린지 파일 배치 방법
SSH를 통해 (Linux/Nginx/Apache)
# 디렉토리 생성
mkdir -p /var/www/html/.well-known/acme-challenge/
# GetHTTPS의 정확한 값으로 파일 생성
echo "KEY_AUTHORIZATION_FROM_GETHTTPS" > /var/www/html/.well-known/acme-challenge/TOKEN_FROM_GETHTTPS
# 접근 가능한지 확인
curl http://yourdomain.com/.well-known/acme-challenge/TOKEN_FROM_GETHTTPS
cPanel 파일 관리자를 통해
public_html로 이동.well-known폴더 생성 → 그 안에acme-challenge폴더 생성- 토큰 값을 이름으로 하는 새 파일 생성
- 키 인가를 파일 내용으로 붙여넣기
- 권한이 644인지 확인 (웹 서버에서 읽기 가능)
FTP를 통해
- 사이트 루트에 연결
.well-known/acme-challenge/디렉토리 경로 생성- 키 인가가 포함된 토큰 이름의 텍스트 파일 업로드
서버 설정
일부 웹 서버는 .well-known의 파일을 제공하기 위해 설정이 필요합니다:
Nginx
# .well-known이 404를 반환하면 서버 블록에 추가
location /.well-known/acme-challenge/ {
root /var/www/html;
allow all;
}
Apache
Apache는 보통 기본적으로 .well-known을 제공합니다. 그렇지 않은 경우:
Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
<Directory "/var/www/html/.well-known/acme-challenge/">
AllowOverride None
Options None
Require all granted
</Directory>
Node.js / Express
app.use('/.well-known/acme-challenge', express.static('challenges'));
요구 사항
- 도메인이 서버의 공개 IP 주소로 연결되어야 합니다
- 포트 80이 열려 있어야 합니다 — Let’s Encrypt는 항상 HTTPS가 아닌 HTTP를 통해 검증
- 응답이 HTTP 200 OK를 반환해야 합니다
- 교차 도메인 리다이렉트 불가 — 같은 도메인의 HTTP→HTTPS 리다이렉트는 허용
- 파일이 인증 없이 접근 가능해야 합니다 (Basic Auth나 로그인 벽 없이)
HTTP-01을 사용해야 하는 경우
| 시나리오 | HTTP-01? |
|---|---|
| 단일 도메인 인증서 | ✅ 예 — 가장 간단한 옵션 |
| 도메인 + www 인증서 | ✅ 예 — 이름당 하나의 챌린지 |
와일드카드 인증서 (*.example.com) | ❌ 아니오 — DNS-01 사용 |
| 포트 80이 차단됨 | ❌ 아니오 — DNS-01 사용 |
| Cloudflare 프록시 뒤 | ⚠️ 먼저 DNS를 그레이 클라우드로 전환 필요할 수 있음 |
| 서버 접근 전혀 없음 | ❌ 아니오 — DNS-01 사용 (DNS 접근만 필요) |
HTTP-01 vs DNS-01
| HTTP-01 | DNS-01 | |
|---|---|---|
| 수행 작업 | 서버에 파일 배치 | DNS에 TXT 레코드 추가 |
| 필요한 접근 | 웹 서버 파일 시스템 | 도메인 DNS 설정 |
| 포트 요구사항 | 포트 80 개방 | 없음 |
| 와일드카드 지원 | ❌ | ✅ |
| 속도 | 즉시 (파일이 접근 가능한 경우) | 1-15분 (DNS 전파) |
| CDN 뒤에서 작동 | ⚠️ CDN 우회 필요할 수 있음 | ✅ 항상 작동 |
| 추천 용도 | 대부분의 단일 도메인 인증서 | 와일드카드, 서버 접근 없음, CDN 환경 |
문제 해결
챌린지 파일이 404를 반환
- 정확한 경로 확인 —
/.well-known/acme-challenge/TOKEN이어야 하며 추가 슬래시 없이 - 파일 권한 확인 — chmod 644
- Nginx: 설정이 점 파일을 차단할 수 있음. 위에 표시된
location블록 추가 - cPanel: 파일 관리자가
.well-known을 숨길 수 있음 — “숨김 파일 보기” 활성화
파일이 접근 가능한데 챌린지가 실패
- 네트워크 외부에서 확인: 다른 컴퓨터에서
curl http://yourdomain.com/.well-known/acme-challenge/TOKEN실행하거나 웹 기반 도구 사용 - DNS가 다른 서버를 가리킬 수 있음 —
dig +short yourdomain.com이 서버의 IP를 반환하는지 확인 - Cloudflare 프록시: 검증 중 일시적으로 DNS-only(그레이 클라우드)로 전환
포트 80이 차단됨
일부 호스트나 방화벽이 포트 80을 차단합니다. 옵션:
- 포트 80 개방 (검증 동안만이라도 일시적으로)
- DNS-01 챌린지로 전환 — 포트 80 불필요
- 호스팅 제공자에게 프록시를 통해
.well-known을 허용해달라고 요청
”too many requests” 오류
Let’s Encrypt의 요청 제한에 도달했습니다. 기다린 후 다시 시도하세요. GetHTTPS의 사전 검사는 제출 전에 파일 접근 가능 여부를 확인하여 낭비를 방지합니다.
자주 묻는 질문
인증서를 받은 후 챌린지 파일을 삭제해도 되나요?
네. 파일은 검증 중에만 필요합니다. 인증서가 발급되면 .well-known/acme-challenge/ 디렉토리와 내용을 삭제하세요. 갱신 시 새 파일을 만들게 됩니다.
파일이 HTTPS를 통해 제공되어야 하나요?
아닙니다. Let’s Encrypt는 사이트가 HTTPS를 지원하더라도 항상 **평문 HTTP(포트 80)**를 통해 HTTP-01을 검증합니다. 같은 도메인의 HTTP→HTTPS 리다이렉트는 따라가지만, 초기 요청은 항상 HTTP입니다.
하나의 인증서에 여러 도메인에 대해 HTTP-01을 사용할 수 있나요?
네. 인증서의 각 도메인에 대해 별도의 챌린지 파일이 필요합니다. example.com과 www.example.com에 대한 인증서를 받으려면 파일 두 개를 배치합니다 — 도메인당 토큰 하나. GetHTTPS가 순차적으로 처리합니다.
GetHTTPS의 “사전 검사”란 무엇인가요?
Let’s Encrypt에 제출하기 전에 GetHTTPS가 공개 인터넷에서(Google의 DNS-over-HTTPS를 통해) 챌린지 파일에 접근할 수 있는지 확인합니다. 이를 통해 요청 제한 횟수를 소모하기 전에 설정 오류를 잡을 수 있습니다 — 다른 브라우저 기반 도구에는 없는 기능입니다.