TLS 서버 이름 표시의 작동 방식인 SNI란?
TLS SNI(Server Name Indication)란?
개요
TLS(Transport Layer Security)는 인터넷에서 데이터를 암호화하여 안전하게 통신할 수 있도록 하는 프로토콜입니다. TLS를 사용할 때, 하나의 IP 주소에서 여러 개의 도메인을 호스팅하는 웹 서버(예: 가상 호스팅 환경)에서는 클라이언트가 요청하는 정확한 도메인을 알지 못하면 올바른 인증서를 제공할 수 없습니다.
이를 해결하기 위해 등장한 것이 **SNI(Server Name Indication, 서버 이름 표시)**입니다.
SNI의 작동 방식
SNI는 TLS 핸드셰이크 과정에서 클라이언트가 접속하려는 서버의 도메인 이름(호스트명)을 명시적으로 전달하는 기능입니다. 이를 통해 서버는 클라이언트가 요청하는 도메인에 맞는 적절한 TLS 인증서를 제공할 수 있습니다.
1️⃣ 클라이언트가 TLS 핸드셰이크 시작
- 클라이언트(예: 웹 브라우저)는 서버와 보안 연결을 설정하려고 ClientHello 메시지를 전송합니다.
- 이 메시지에 SNI 필드를 포함하여 요청하는 도메인(예: example.com)을 서버에 전달합니다.
2️⃣ 서버가 SNI 정보 확인
- 서버는 SNI 필드를 확인하고 해당 도메인에 적절한 TLS 인증서를 선택합니다.
3️⃣ TLS 핸드셰이크 완료
- 서버가 올바른 인증서를 반환하면, 클라이언트와 서버 간의 TLS 암호화 통신이 정상적으로 설정됩니다.
SNI가 중요한 이유
가상 호스팅(Virtual Hosting) 지원
- 하나의 서버에서 여러 개의 도메인을 호스팅할 때, SNI가 없으면 서버는 어떤 인증서를 반환해야 할지 알 수 없습니다.
- SNI를 사용하면 하나의 IP 주소에서 여러 개의 TLS 인증서를 사용할 수 있어, 여러 도메인을 동일한 서버에서 안전하게 운영할 수 있습니다.
TLS 기반 보안 정책 적용 가능
- 프록시 서버나 보안 솔루션(예: WAF, Istio)에서 SNI를 기반으로 트래픽을 필터링하고, 보안 정책을 설정할 수 있습니다.
- 예를 들어, 특정 도메인에 대한 TLS 연결을 차단하거나, 로깅할 수 있습니다.
HTTPS 확산 및 비용 절감
- SNI가 등장하기 전에는 각 도메인마다 별도의 IP 주소가 필요했지만, 이제는 하나의 IP에서 여러 TLS 사이트를 운영할 수 있어 IP 비용을 절감할 수 있습니다.
SNI 지원 여부
지원하는 브라우저 및 운영체제
- 대부분의 최신 웹 브라우저(Chrome, Firefox, Edge, Safari)와 운영체제(Windows, macOS, Linux, Android, iOS)는 SNI를 기본적으로 지원합니다.
미지원 환경
- 일부 구형 브라우저(Internet Explorer 6 이하)와 운영체제(Windows XP SP2 이하)는 SNI를 지원하지 않습니다.
SNI 활용 사례
CDN(Content Delivery Network) 및 클라우드 서비스
- Cloudflare, AWS CloudFront, Nginx 등은 SNI를 활용해 하나의 서버에서 여러 TLS 인증서를 관리합니다.
프록시 및 보안 솔루션
- Istio, Envoy, HAProxy 같은 서비스는 SNI를 기반으로 트래픽을 라우팅하고, 특정 도메인에 대한 접근을 제어합니다.
기업 내부 네트워크 보안
- 방화벽 및 네트워크 보안 솔루션에서 SNI 정보를 이용하여 허용된 도메인만 TLS 통신을 허용하는 등의 정책을 적용할 수 있습니다.
결론
SNI(Server Name Indication)는 TLS 핸드셰이크에서 클라이언트가 접속하려는 도메인을 서버에 알려주는 기능으로, 가상 호스팅 지원, 보안 정책 적용, 비용 절감 등 다양한 이점을 제공합니다. 현재 대부분의 웹 서비스와 보안 시스템에서 필수적으로 사용되고 있으며, 클라우드 및 네트워크 환경에서 중요한 역할을 하고 있습니다.