최근 불법 사이트 긴급차단·접속차단 제도와 관련된 뉴스를 보면서, HTTPS 사이트는 어떤 방식으로 차단되는지 궁금해졌다.
HTTPS는 통신 내용이 암호화된다고 알고 있었기 때문에, 처음에는 “암호화된 사이트도 어떻게 차단할 수 있을까?”라는 의문이 들었다.
조사해보니 HTTPS 통신 내용 자체를 들여다보는 것이 아니라, TLS 연결 초기에 노출될 수 있는 SNI 정보를 이용해 차단할 수 있다는 것을 알게 되었다.
이번 글에서는 SNI가 무엇인지, 그리고 SNI 기반 차단이 어떤 원리로 동작하는지 간단히 정리해보려고 한다.
HTTPS는 HTTP에 TLS 암호화를 적용한 통신 방식이다. 사용자가 웹사이트와 주고받는 로그인 정보, 게시글 내용, 결제 정보 등은 암호화되어 보호된다.
하지만 HTTPS라고 해서 모든 정보가 완전히 숨겨지는 것은 아니다. 암호화 통신을 시작하기 전, 클라이언트와 서버는 먼저 TLS Handshake 과정을 거친다.
이 과정에서 클라이언트는 서버에 접속하기 위한 여러 정보를 전달하는데,
TLS 연결 초기 단계에서는 사용자가 접속하려는 도메인 정보가 SNI 필드에 포함되어 암호화되지 않은 평문(Plaintext) 상태로 노출될 수 있다.
즉, HTTPS는 연결이 확립된 후 주고받는 데이터는 암호화하지만, 연결을 시작하는 과정에서 “어떤 도메인에 접속하려는지”에 대한 정보는 중간 네트워크 장비가 확인할 수 있다.
SNI는 Server Name Indication의 약자로, 클라이언트가 TLS 연결을 시작할 때 접속하려는 서버 이름을 알려주는 기능이다.
하나의 IP 주소에서 여러 HTTPS 사이트를 운영하는 경우, 서버는 클라이언트가 어떤 도메인에 접속하려는지 알아야 적절한 인증서를 선택할 수 있다. 이때 사용되는 정보가 SNI이다.
예를 들어 같은 IP에서 아래 사이트들이 운영된다고 가정해보자.
서버는 SNI 값을 보고 클라이언트가 어떤 도메인에 접속하려는지 구분할 수 있다.
문제는 이 SNI 값이 TLS Handshake 단계에서 전달되기 때문에, 기존 TLS 환경에서는 암호화된 데이터 통신이 시작되기 전에 노출될 수 있다는 점이다.
SNI 필드 차단은 TLS Handshake 초기에 보이는 SNI 값을 확인해, 접속하려는 도메인이 차단 대상인지 판단하는 방식이다.
흐름은 다음과 같다.
즉, SNI 차단은 사용자가 사이트에서 어떤 내용을 보는지 확인하는 것이 아니라, 접속하려는 도메인 정보를 기준으로 차단하는 방식이다.
📌 참고: SNI 노출을 줄이는 ECH(Encrypted ClientHello)
최근에는 SNI를 포함한 ClientHello 정보를 암호화하려는 ECH(Encrypted ClientHello) 기술도 등장했다.
ECH가 적용되면 기존 TLS 환경에서 노출될 수 있었던 SNI 정보도 보호할 수 있다.
HTTPS는 웹 통신 내용을 암호화해 보호하는 기술이다. 하지만 기존 TLS 환경에서는 연결 초기에 SNI 값이 노출될 수 있고, 이를 통해 사용자가 어떤 도메인에 접속하려는지 확인할 수 있다.
SNI 차단은 HTTPS 본문을 복호화하는 방식이 아니라, TLS Handshake 과정에서 보이는 SNI 값을 기준으로 접속을 차단하는 방식이다.
정리하면 다음과 같다.
이번 주제를 통해 HTTPS를 이해할 때는 단순히 “암호화되어 있다”는 사실만 볼 것이 아니라, 어떤 정보가 보호되고 어떤 정보가 노출될 수 있는지 구분해서 보는 것이 중요하다는 점을 알 수 있었다.