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