반응형
SNI (Server Name Indication)
SNI는 TLS(Transport Layer Security) 프로토콜의 확장 기능으로, 클라이언트가 TLS 핸드셰이크 시작 시 접속하려는 호스트명(도메인)을 서버에 알려주는 메커니즘입니다.
왜 필요한가?
하나의 서버(하나의 IP 주소)에서 여러 도메인의 HTTPS 사이트를 호스팅하는 경우를 생각해 보세요:
| IP 주소 | 호스팅 도메인 |
|---|---|
203.0.113.1 |
example.com, shop.example.com, blog.example.com |
TLS 핸드셰이크는 HTTP 요청보다 먼저 일어나기 때문에, 서버는 HTTP의 Host 헤더를 보기 전에 어떤 인증서를 제시해야 할지 알 수 없습니다. SNI가 없으면 서버는 올바른 인증서를 선택할 방법이 없습니다.
동작 원리
클라이언트 서버
│ │
│──── ClientHello ──────────────────────────▶│
│ (SNI: "shop.example.com") │
│ │ ← SNI 값을 보고
│ │ 해당 도메인의 인증서 선택
│◀──── ServerHello + Certificate ────────────│
│ (shop.example.com 인증서) │
│ │
│ ... TLS 핸드셰이크 완료 ... │
│ │
│──── 암호화된 HTTP 요청 ──────────────────▶│- 클라이언트가
ClientHello메시지에 접속하려는 호스트명을 평문으로 포함시킵니다. - 서버는 해당 호스트명에 맞는 SSL/TLS 인증서를 선택하여 응답합니다.
- 이후 정상적인 TLS 핸드셰이크가 진행됩니다.
주요 특징
| 항목 | 설명 |
|---|---|
| 정의 | RFC 6066에 정의된 TLS 확장 |
| 위치 | TLS ClientHello 메시지 내 |
| 암호화 여부 | ❌ 평문 (암호화되지 않음) |
| 지원 | 거의 모든 최신 브라우저 및 서버에서 지원 |
보안 이슈: SNI는 평문
SNI 필드는 암호화되지 않기 때문에, 네트워크 중간에서 사용자가 어떤 도메인에 접속하는지 엿볼 수 있습니다. 이를 이용한 것이 SNI 기반 차단(SNI Filtering)입니다.
대응 기술: ECH (Encrypted Client Hello)
이전에 ESNI(Encrypted SNI)로 불리던 기술이 발전하여 현재는 ECH라는 이름으로 표준화가 진행 중입니다.
ClientHello전체를 암호화하여 SNI를 포함한 메타데이터를 보호- DNS의 HTTPS 레코드를 통해 서버의 공개키를 배포
- TLS 1.3 기반으로 동작
실무에서의 활용
- 웹 호스팅: 하나의 IP로 수백 개의 HTTPS 사이트 운영 가능
- CDN: Cloudflare, AWS CloudFront 등에서 SNI를 활용해 인증서 라우팅
- 로드밸런서: SNI 값을 기반으로 트래픽을 적절한 백엔드로 분배
- 네트워크 필터링: 일부 국가/기관에서 SNI 값을 검사하여 특정 사이트 차단
반응형
'Network' 카테고리의 다른 글
| HTTP2 멀티플렉스 스트림 (0) | 2025.08.24 |
|---|---|
| Http3 (0) | 2023.01.12 |
| API Gateway (0) | 2021.04.20 |
| GSLB (1) | 2021.04.09 |
| CDN (0) | 2021.04.08 |