Cloudflare를 CDN/프록시로 사용할 때, 방문자는 Cloudflare의 엣지 서버에 연결됩니다. 하지만 Cloudflare와 오리진 서버 간의 연결은 어떻게 될까요? 오리진에 인증서가 없으면 해당 연결이 암호화되지 않아 HTTPS의 목적이 무효화됩니다.
Cloudflare SSL 모드 설명
| 모드 | 방문자 → Cloudflare | Cloudflare → 오리진 | 보안 수준 |
|---|---|---|---|
| Off | HTTP | HTTP | ❌ 암호화 없음 |
| Flexible | HTTPS ✅ | HTTP ❌ | ⚠️ 거짓 보안감 |
| Full | HTTPS ✅ | HTTPS (미검증) | ⚠️ 암호화되지만 인증서 검증 없음 |
| Full (Strict) | HTTPS ✅ | HTTPS (검증) ✅ | ✅ 권장 |
“Flexible”은 위험합니다. 방문자에게는 자물쇠가 보이지만, Cloudflare→오리진 연결은 평문 HTTP입니다. 해당 네트워크 경로에 있는 누구나 트래픽을 읽을 수 있습니다. 항상 **Full (Strict)**를 사용하세요.
Let’s Encrypt 인증서로 Full (Strict) 설정하기
최선의 방법: 오리진에 실제 공개 신뢰 인증서를 설치하고 Full (Strict)를 활성화합니다.
1단계: Let’s Encrypt 인증서 발급
GetHTTPS에서 도메인의 무료 인증서를 발급받습니다. HTTP-01 챌린지가 오리진에 도달하도록 Cloudflare 프록시를 일시적으로 비활성화(DNS 설정에서 주황색 구름 → 회색 구름)하거나, 프록시 상태와 관계없이 작동하는 DNS-01을 사용해야 합니다.
DNS-01 방식 (프록시 변경 불필요):
- GetHTTPS에서 DNS-01 챌린지를 선택합니다
- Cloudflare DNS에
_acme-challengeTXT 레코드를 추가합니다 - 검증 후 인증서를 다운로드합니다
HTTP-01 방식:
- Cloudflare DNS에서 도메인의 주황색 구름 → 회색 구름(DNS 전용)을 클릭합니다
- GetHTTPS에서 HTTP-01 챌린지를 완료합니다
- 인증서를 받은 후 주황색 구름(프록시)을 다시 활성화합니다
2단계: 오리진 서버에 설치
일반적인 방법으로 Nginx 또는 Apache에 인증서를 설치합니다.
3단계: Cloudflare에서 Full (Strict) 활성화
- Cloudflare 대시보드 → 도메인으로 이동합니다
- SSL/TLS → 개요
- **Full (Strict)**를 선택합니다
이제 Cloudflare가 연결 전에 오리진에 유효하고 신뢰할 수 있는 인증서가 있는지 확인합니다.
대안: Cloudflare Origin CA 인증서
Cloudflare는 자체 Origin CA 인증서를 제공합니다 — Cloudflare만 신뢰하는 무료 인증서로, 브라우저에서 직접 신뢰하지는 않습니다.
발급 방법
- Cloudflare 대시보드 → SSL/TLS → 오리진 서버
- 인증서 만들기를 클릭합니다
- 키 유형(RSA 또는 ECDSA)과 유효 기간(최대 15년)을 선택합니다
- 인증서와 개인키를 다운로드합니다
- 오리진 서버에 설치합니다
Let’s Encrypt와의 장단점 비교
| Cloudflare Origin CA | Let’s Encrypt (GetHTTPS 경유) | |
|---|---|---|
| 신뢰 대상 | Cloudflare만 | 모든 브라우저 (공개 신뢰) |
| 유효 기간 | 최대 15년 | 90일 |
| 자동 갱신 필요 | 아니오 (긴 유효 기간) | 예 (60-90일마다) |
| Cloudflare 없이 사용 | ❌ | ✅ |
| 브라우저 직접 접근 | ❌ (오류 표시) | ✅ |
| 비용 | 무료 | 무료 |
Cloudflare Origin CA 사용: 오리진이 항상 Cloudflare 뒤에 있고 갱신 관리를 전혀 하고 싶지 않을 때.
Let’s Encrypt 사용: Cloudflare를 우회할 가능성이 있거나(유지보수, 마이그레이션), 오리진에 직접 접근해야 하거나, 어디서나 작동하는 인증서가 필요할 때.
Full (Strict) 작동 확인
설정 후 연결이 완전히 암호화되었는지 테스트합니다:
- Cloudflare 대시보드 → SSL/TLS → 개요에 “Full (Strict)“가 표시되어야 합니다
- 사이트를 방문 → 방문자에게 Cloudflare의 인증서가 표시된 자물쇠가 보여야 합니다
- 오리진 직접 확인 (Cloudflare 우회):
Let’s Encrypt(또는 Origin CA) 인증서가 포함된 유효한 HTTPS 응답이 반환되어야 합니다.curl -I --resolve yourdomain.com:443:YOUR_ORIGIN_IP https://yourdomain.com
자주 묻는 질문
Flexible 모드만 사용하면 안 되나요?
Flexible 모드는 방문자→Cloudflare 연결은 암호화하지만 Cloudflare에서 오리진으로의 트래픽은 평문 HTTP로 전송합니다. 이는 다음을 의미합니다:
- ISP, 호스팅 제공업체 또는 Cloudflare 엣지와 서버 사이의 네트워크에 있는 누구나 모든 트래픽을 읽을 수 있음
- 방문자는 자물쇠를 보고 안전하다고 생각하지만, 백엔드 연결은 보호되지 않음
- 로그인 페이지, 결제 양식 또는 민감한 데이터에 특히 위험
오리진 인증서가 도메인과 정확히 일치해야 하나요?
Full (Strict) 모드에서는 그렇습니다 — 오리진 인증서가 Cloudflare가 연결하는 도메인에 대해 유효해야 합니다. example.com에 대한 Let’s Encrypt 인증서는 작동합니다. 자체 서명 인증서나 다른 도메인의 인증서는 작동하지 않습니다.
와일드카드 오리진 인증서를 사용할 수 있나요?
네. 오리진의 *.example.com 와일드카드 인증서는 Cloudflare를 통해 프록시되는 모든 서브도메인에 대해 Full (Strict)에서 작동합니다.
오리진 인증서가 만료되면 어떻게 되나요?
Cloudflare의 Full (Strict) 모드는 인증서 유효성을 확인합니다. 오리진 인증서가 만료되면 Cloudflare가 안전한 연결을 설정할 수 없어 사이트에 526 오류(Invalid SSL Certificate)가 표시됩니다. 이를 방지하려면 만료 모니터링을 설정하세요.