Study/Network

SNI와 HTTPS: TCP Proxy 설정에서의 차이점

Dream Amal 2024. 7. 8.

최근 Proxy 서버를 설정하는 과정에서

SSL 인증서가 없는 도메인에 대해 TCP Proxy를 구축하면서

SNI(Server Name Indication)를 인식할 수 있도록

nginxstream_ssl_preread_module을 사용해봤다.

 

[NginX] NGINX 소스 컴파일로 설치하기

Nginx 로 TPC Proxy를 구축하기 위해서는 stream모듈을 사용해야 합니다.기존 RPM 관리 도구 (dnf, yum) 를 사용하여 nginx를 설치할 경우 stream 모듈을 활용할 수 없습니다.때문에 소스 컴파일을 통해 nginx를

dream-coding.tistory.com

 

이를 통해 SNI와 DNS, 그리고 HTTPS의 차이점에 대해 명확히 이해할 필요가 있었다.

이번 포스팅에서는 이들 개념의 차이점을 자세히 알아보도록 하겠다.

SNI (Server Name Indication)

SNI(Server Name Indication)는 TLS/SSL 프로토콜의 확장 기능으로,

클라이언트가 서버에 접속할 때 어떤 호스트명(도메인 이름)에 대한 요청인지 서버에 전달해주는 역할을 한다.

SNI는 TLS 핸드셰이크 초기 단계에서 서버에 전달되며,

이를 통해 서버는 적절한 SSL 인증서를 선택하여 제공할 수 있다.

SNI의 주요 기능

  • 서버 멀티 호스팅: 한 IP 주소에서 여러 도메인에 대해 SSL을 제공할 수 있다.
  • 초기 핸드셰이크에서 도메인 인식: SNI를 통해 서버는 클라이언트가 접근하려는
    도메인을 초기 핸드셰이크 과정에서 인식할 수 있다.

DNS (Domain Name System)

DNS(Domain Name System)는 도메인 이름과 IP 주소를 매핑해주는 시스템이다.

클라이언트는 도메인 이름을 통해 접속하려는 서버의 IP 주소를 DNS 서버를 통해 얻는다.

DNS의 주요 기능

  • 도메인 이름 해석: 사람이 읽기 쉬운 도메인 이름을 IP 주소로 변환한다.
  • 분산 구조: DNS 서버는 전 세계에 분산되어 있어, 특정 도메인의 IP 주소를 쉽게 찾을 수 있다.

HTTPS (HyperText Transfer Protocol Secure)

HTTPS(HyperText Transfer Protocol Secure)는 HTTP에 SSL/TLS 프로토콜을 결합한 것이다.

HTTPS는 데이터 전송 중에 도청과 변조를 방지하기 위해 사용된다.

HTTPS의 주요 기능

  • 데이터 암호화: 전송되는 데이터는 암호화되어 중간에서 도청해도 내용을 알 수 없다.
  • 서버 인증: 클라이언트는 SSL 인증서를 통해 서버의 신뢰성을 확인할 수 있다.
  • 데이터 무결성: 전송되는 데이터가 중간에서 변조되지 않았음을 보장한다.

SNI와 HTTPS의 차이점

SNI와 HTTPS는 서로 다른 기능과 목적을 가진다. 여기서 중요한 차이점을 명확히 알아두자.

도메인 인식 시점

  • SNI: TLS 핸드셰이크 초기 단계에서 클라이언트가 요청하는 도메인을 서버에 전달한다.
    이를 통해 서버는 해당 도메인에 맞는 인증서를 선택할 수 있다.
  • HTTPS: TLS 핸드셰이크가 완료되고, SSL 인증서를 통해 보안 연결이 확립된 후에
    HTTP 프로토콜로 데이터를 주고받는다.

역할과 목적

  • SNI: 서버가 여러 도메인에 대해 SSL을 제공할 수 있도록 한다.
    한 서버가 여러 도메인에 대해 다른 인증서를 사용할 수 있게 해준다.
  • HTTPS: 데이터 전송의 보안을 제공한다.
    데이터를 암호화하고, 서버의 신원을 인증하며, 데이터의 무결성을 보장한다.

TCP Proxy에서 SNI 사용의 이유

TCP Proxy를 설정할 때, stream_ssl_preread_module을 사용하여 SNI 정보를 읽어오는 이유는 다음과 같다:

초기 핸드셰이크 단계에서 도메인 정보 확보

SNI를 사용하면 TLS 핸드셰이크 초기 단계에서 클라이언트가 접근하려는 도메인 정보를 얻을 수 있다.
이를 통해 TCP Proxy는 SSL 인증서를 사용하지 않고도 도메인 정보를 기반으로
적절한 백엔드 서버로 트래픽을 전달할 수 있다.

SSL 인증서 없이 도메인 기반 라우팅

stream_ssl_preread_module을 통해 SNI 정보를 읽어오면,

TCP Proxy는 SSL 인증서를 사용하지 않고도 도메인 기반 라우팅을 할 수 있다.

이는 SSL 인증서가 없는 상황에서도 다양한 도메인에 대한 트래픽을 올바른 백엔드 서버로 전달할 수 있게 해준다.

요약

  • SNI: TLS 핸드셰이크 초기 단계에서 클라이언트가 접근하려는 도메인을 서버에 전달해주는 기능.
    이를 통해 서버는 적절한 SSL 인증서를 선택할 수 있다.
  • DNS: 도메인 이름과 IP 주소를 매핑해주는 시스템.
  • HTTPS: HTTP에 SSL/TLS를 결합하여 데이터 전송 중 보안을 제공하는 프로토콜.
  • TCP Proxy에서 SNI 사용: SNI를 통해 SSL 인증서 없이도 도메인 기반 라우팅이 가능하다.
    초기 핸드셰이크 단계에서 도메인 정보를 확보하여 적절한 백엔드 서버로 트래픽을 전달할 수 있다.
728x90

댓글