서론
SNI(Server Name Indication)는 SSL/TLS 프로토콜의 확장 기능으로, 가장 쉽게 이해하기 위해선 네트워크 통신할 때 암호화가 된다면 그 안에 데이터의 값이 무엇인지 알 수 없는데 SNI 필드를 확인하여 특정 사이트 및 트래픽 등을 확인할 수 있다. 쉽게 말하면 네이버에 네트워크 통신할 때 암호화가 되어 데이터 값을 볼 수 없지만 SNI 필드에는 네이버라는 것이 나와 있어 네이버의 트래픽인 것을 유추할수 있는 개념이다.
본론
SNI (Server Name Indication)는 SSL/TLS 프로토콜의 확장 기능으로, 클라이언트가 서버에 접속할 때 어떤 호스트 이름에 접근하고자 하는지를 서버에 알리기 위해 사용, 하나의 IP 주소에서 여러 SSL/TLS 인증서를 사용할 수 있도록 하기 위해 사용한다.
SNI 필요성
공유 호스팅 환경
- 하나의 서버에서 여러 도메인을 호스팅하는 경우 SNI가 없으면 서버는클라이언트가 접속을 시도하는 도메인을 알 수 없기 때문에 다른 인증서를 선택할 수 없다.
SSL/TLS HandShake
- 전통적인 SSl/TLS 핸드셰이크는 암호화가 시작되기 전에 클라이언트가 서버에 접속하려는 호스트 이름을 서버에 알리지 않는데 SNI는 이 부분을 해결한다.
SNI 동작방식
1. 클라이언트 요청
- 클라이언트가 SSL/TLS 연결을 시작할 때, 'ClientHello' 메시지에 접속하려는 호스트 이름 포함
2. 서버 응답
- 서버는 'ClientHello' 메시지에서 호스트 이름을 확인, 해당 호스트 이름에 맞는 인증서를 선택하여 'ServerHello' 메시지에서 응답
3. 핸드셰이크 완료
- 핸드셰이크 과정은 선택된 인증서를 기반으로 진행
SNI 장점
- SNI를 지원하는 서버는 하나의 IP 주소에서 여러 SSL/TLS 인증서를 사용
- 서버 설정이 단순해지고, 추가 IP 주소 없이도 여러 도메인을 안전하게 호스팅
- 별도의 IP 주소를 할당할 필요가 없어 비용 절감
SNI 단점
- SNI를 지원하지 않는 구형 클라이언트에서는 작동 하지 않음
- SNI 필드는 암호화되지 않으므로 네트워크 상에서 호스트 이름 노출
결론
SNI는 SSL/TLS 환경에서 다수의 도메인을 하나의 IP 주소로 호스팅할 수 있게 해주는 중요한 기술이다.
최신 웹 서버와 클라이언트는 대부분 SNI를 지원하여, 유연하고 비용 효율적인 보안 설정을 할 수 있다
하지만 구형 시스템과는 호환이 되지않고 호스트 이름이 노출되어 통신 데이터의 사용자 및 서버가 누구인지 알 수 있다.
사실 패킷 감청? 또는 도청? 같이 IP 별로 어떤 프로그램을 사용하는 지 알 수 있으니 위험할 수도 있고, 공격 대상이 될 수도 있어 뭐가 맞고 틀린 건 없지만, 그래도 SNI 필드에 관련하여 숙지를 하고 있는 게 좋다.
'정보보안 > 네트워크 기초' 카테고리의 다른 글
Windows와 Unix/Linux에서 ping을 이용한 IP 대역 스캔: 범위 지정 방법 정리(prefix) (2) | 2024.10.31 |
---|---|
와이어샤크(wireshark)를 통한 패킷 분석 (IP Spoofing, SYN,ACK Flooding, Half-Open Scan 첨부) (0) | 2024.10.04 |
IP(Internet Protocol) 및 게이트웨이(Gateway, GW) (0) | 2024.07.31 |
NAT 및 포트 포워딩(Port Forwarding) (0) | 2024.07.29 |
버추얼박스(VirtualBox) NAT Network 설정 (0) | 2024.07.22 |