Web
SNI, Server Name Indication 란
ellapk
2025. 1. 5. 15:22
SNI 란?
SNI(Server Name Indication)를 쉽게 설명하면,
TLS 프로토콜의 일부로, 접속 도메인 이름을 지정하는 기능이다.
즉, 클라이언트가 HTTPS 연결을 할 때, "내가 접속하려는 도메인은 이거야!" 라고 서버에 알려주는 기술이다.
SNI 는 어디에 있는가?
HTTPS 통신 전 클라이언트와 서버가 핸드셰이크 하는 과정에서 동작한다.
왜 SNI 가 필요한가?
옛날에는 HTTPS를 사용하려면 서버 도메인마다 다른 IP 주소가 필요했다. 하지만 이제 SNI 덕분에, 하나의 IP 주소로 여러 도메인을 관리할 수 있게 되었다.
HTTPS는 암호화를 위해 인증서가 필요하고, 서버가 어떤 도메인을 요청받았는지 알아야 적절한 인증서를 제공한다.
이 과정에서 SNI가 사용된다.
- SNI가 없는 경우: "서버야, 나 연결하고 싶어!" → 서버는 "누구...?" → 연결 실패 🚫
- SNI가 있는 경우: "서버야, 나 example.com에 연결하고 싶어!" → 서버는 "좋아 example.com 인증서 줄게!" → 연결 성공 ✅
거의 모든 최신 브라우저, 서버 소프트웨어(Nginx, Apache)등 클라우드 서비스(AWS, Cloudflare 등)에서 기본적으로 지원한다.
SNI 단점
- -어떤 나라나 기관이 특정 도메인을 차단할 때, SNI 정보를 이용해서 차단할 수 있음
ex) "누군가 https://blocked.com에 접속하려고 한다!" → "SNI에 blocked.com이 보이니까 차단!" - SNI 정보는 암호화되지 않고 평문(Plain text)으로 전달되기 때문에, 감시나 차단이 쉽다.
->해결 방안 : 도메인 프론팅
SNI의 진짜 목적지 도메인을 숨기는 방법
1. 브라우저는 SNI에 다른 도메인 이름을 넣는다. 차단된 blocked.com 대신, 차단되지 않은 front.com을 넣는다
2. 서버 쪽에서는 요청을 받은 후, 실제로는 blocked.com에 연결하도록 처리함으로서, 검열 시스템은 front.com만 보고 실제 목적지인 blocked.com은 모른다.