본문으로 건너뛰기

SNI

1 Server Name Indication (SNI)

1.1. SNI란 무엇인가?

  • Server Name Indication(SNI)은 TLS(Transport Layer Security) 프로토콜의 확장 기능으로, 클라이언트가 서버와의 보안 연결을 설정할 때 서버에게 요청하는 도메인 이름을 알려주는 역할을 합니다.
  • 이 기능은 하나의 서버(또는 IP 주소)가 여러 개의 SSL/TLS 인증서를 사용하여 다양한 도메인 이름을 처리할 수 있게 해줍니다.

1.2. SNI의 필요성

  • 과거에는 하나의 서버나 IP 주소에서 하나의 SSL/TLS 인증서만 사용할 수 있었습니다.
  • 이는 동일한 서버에서 여러 도메인을 호스팅하려는 서비스 제공자에게 큰 제약이었습니다.
  • SNI는 이러한 문제를 해결하며, 다음과 같은 장점이 있습니다:
    • 여러 도메인 지원: 하나의 서버에서 여러 도메인을 처리할 수 있으며, 각 도메인에 대해 개별적인 SSL/TLS 인증서를 사용할 수 있습니다.
    • 유연성 증가: 서비스 제공자는 단일 IP 주소로 여러 보안 웹사이트를 제공할 수 있습니다.
    • 비용 절감: IP 주소를 추가로 구매할 필요 없이 여러 도메인을 호스팅할 수 있어 비용을 절감할 수 있습니다.

1.3. SNI의 작동 방식

  • SNI는 TLS 핸드셰이크 과정에서 사용됩니다.
  • 보안 연결이 시작될 때, 클라이언트는 ClientHello 메시지를 서버에 보냅니다.
  • 이 메시지에는 클라이언트가 접속하려는 도메인 이름이 포함되어 있으며, 서버는 이 정보를 바탕으로 적절한 SSL/TLS 인증서를 선택합니다. 구체적인 과정은 다음과 같습니다:
  1. ClientHello 메시지
    • 클라이언트는 서버와의 보안 연결을 설정하기 위해 ClientHello 메시지를 보냅니다. 이 메시지에는 클라이언트가 지원하는 암호화 방식, 프로토콜 버전, 무작위 값(random), 그리고 SNI 확장 필드가 포함됩니다.
    • SNI 확장 필드에는 클라이언트가 접속하려는 도메인 이름이 명시되어 있습니다.
  2. ServerHello 메시지
    • 서버는 클라이언트의 ClientHello 메시지를 수신하고, SNI 확장 필드에 포함된 도메인 이름을 확인합니다.
    • 서버는 해당 도메인에 적합한 SSL/TLS 인증서를 선택한 후, 이를 포함한 ServerHello 메시지를 클라이언트에게 응답으로 보냅니다.
  3. 보안 연결 설정
    • 서버가 선택한 인증서를 클라이언트에 전달하고, 클라이언트는 이를 바탕으로 서버의 신원을 확인합니다. 양측이 보안 연결을 설정하는 과정이 완료됩니다.

1.4. SNI와 ELB의 연관 관계

  • Amazon Web Services(AWS)의 Elastic Load Balancing(ELB) 서비스는 Application Load Balancer(ALB)와 Network Load Balancer(NLB)를 포함합니다.
  • ELB는 트래픽을 여러 백엔드 서버로 분산시키는 역할을 하며, SNI와의 통합을 통해 다양한 도메인에 대해 고유한 SSL/TLS 인증서를 사용할 수 있습니다.

1.4.1. ELB와 SNI의 작동 방식

  • Application Load Balancer (ALB)
    • ALB는 HTTP, HTTPS 트래픽을 처리하며, SNI를 지원합니다.
    • 클라이언트가 SNI를 통해 특정 도메인을 요청하면, ALB는 해당 도메인에 맞는 SSL/TLS 인증서를 선택합니다.
    • ALB는 각 도메인에 대해 서로 다른 인증서를 설정할 수 있으며, 이를 통해 여러 웹사이트를 하나의 로드 밸런서에서 관리할 수 있습니다.
  • Network Load Balancer (NLB)
    • NLB는 주로 TCP, UDP, TLS 트래픽을 처리하며, SNI를 지원합니다. NLB는 TLS 연결을 종료하거나 패스스루(pass-through) 방식으로 TLS 트래픽을 전달할 수 있으며, SNI를 사용하여 올바른 인증서를 선택합니다.
    • 이를 통해 NLB는 다양한 도메인에 대해 별도의 TLS 설정을 적용할 수 있습니다.

1.4.2. SNI와 ELB의 장점

  • 보안 강화: ELB는 SNI를 통해 각 도메인에 맞는 인증서를 사용하므로, 보안 수준을 강화할 수 있습니다.
  • 유연한 관리: 다양한 도메인에 대해 각각의 SSL/TLS 설정을 할 수 있어, 여러 도메인을 호스팅하는 경우에도 유연하게 관리할 수 있습니다.
  • 단일 ELB로 여러 도메인 처리: SNI 덕분에 하나의 ELB에서 여러 도메인을 처리할 수 있어 인프라 관리가 간편해집니다.

1.5. SNI의 이점과 한계

1.5.1. 이점

  • SSL/TLS 관리 간소화: 서비스 제공자는 SNI를 통해 단일 서버에서 여러 SSL/TLS 인증서를 관리할 수 있습니다.
  • IP 주소 절약: SNI를 통해 여러 도메인을 하나의 IP 주소로 처리할 수 있어, IP 주소 부족 문제를 해결할 수 있습니다.
  • 유연한 호스팅: 하나의 서버에서 여러 웹사이트를 호스팅할 수 있어 인프라 관리가 용이합니다.

1.5.2. 한계

  • 구형 클라이언트의 호환성 문제: SNI는 대부분의 최신 브라우저와 클라이언트에서 지원되지만, 매우 오래된 클라이언트에서는 지원되지 않을 수 있습니다.
  • 평문으로 전송: SNI 정보는 TLS 핸드셰이크의 초기 단계에서 평문으로 전송되므로, 도메인 이름이 노출될 수 있습니다.

1.6. 결론

  • SNI는 현대 웹 환경에서 매우 중요한 역할을 하고 있습니다.
  • 이를 통해 서비스 제공자는 보다 유연하고 경제적으로 여러 도메인을 호스팅할 수 있으며, SSL/TLS 인증서 관리의 복잡성을 줄일 수 있습니다.
  • ELB와의 통합을 통해 SNI는 다양한 도메인에 대해 개별적인 보안 설정을 가능하게 하며, 특히 AWS 환경에서 유용하게 사용됩니다.
  • 다만, SNI를 사용할 때는 구형 클라이언트와의 호환성 문제를 고려해야 합니다.
  • SNI는 보안과 유연성을 동시에 제공하는 핵심 기술로, 웹 개발자와 시스템 관리자에게 필수적인 개념입니다.