본문 바로가기
보안

[네트워크] SNI

by 뜨는 해 2020. 9. 21.

 

최근보다는 오래 되었지만, 굉장히 이슈가 있었던 문제가 있었다.

정부에서 SNI 감청을 통한 불법 접속을 끊겠다는 내용이었는데, 당시의 나로써는 별 거 아니라고 생각했었고, 사람들은 결국 SNI 감청을 우회할 수 있는 방법을 찾아냈다.

 

각설하고, 그렇다면 SNI란 뭘까?


서버 네임 인디케이션(Server Name Indication, SNI)은 컴퓨터 네트워크 프로토콜인 TLS의 확장으로, 핸드셰이킹 과정 초기에 클라이언트가 어느 호스트명에 접속하려는지 서버에 알리는 역할을 한다.[1] 이를 이용하면 같은 IP 주소와 TCP 포트 번호를 가진 서버로 여러 개의 인증서를 사용할 수 있게 되고, 따라서 모든 사이트가 같은 인증서를 사용하지 않아도 동일한 아이피로 여러 HTTPS 웹사이트(또는 TLS 상에서 돌아가는 다른 서비스)를 운영할 수 있게 된다.

 

어떤 서버로 접속할 때, 클라이언트 측에서 그 것을 알려주기 위한 것이 SNI인 것이다.

이를 이용해 하나의 서버에서 https를 사용가능케 한다고 한다.

 

왜 하나의 서버에서 SSL을 사용하게 만드냐면, 보통은 하나의 서버에서 여러개의 도메인을 서비스하는 경우가 있고, IP주소는 하나이기에 도메인 중 하나만이 SSL을 이용할 수 있다는 것.

 

 

그래서 SNI를 사용하면 IP 주소 1개만으로도 그 서버가 가진 여러개의 도메인에서 SSL을 사용할 수 있게 된다고 한다!


웹서버에 브라우저가 https로 접속하면, SSL 접속을 시도하게 되고, 가짜 사이트가 아닌지 확인하기 위해 서버로부터 SSL인증서를 가져온다고 한다.

 

이렇게 가져온 인증서를 이용해 실제 접속하려는 사이트와 같은지 도메인과 인증서를 비교하게 되고,

 

다를 경우에는 경고를 표시하게 된다.

 

이 과정에서 클라이언트가 서버와 핸드셰이크 과정 후 암호화된 통신을 하게 되는데, 이 과정 전에 일어나는 핸드셰이크 과정은 그저 평문으로 전송이 된다.

 

그렇다면 그러한 인증 과정 중에서 핸드셰이크 과정 중에 발생하는 패킷을 가로채 어디로 접속하는 지 확인을 하고 차단 대상이라면 막아버리는 형태라고 한다.

 

 

좀 더 자세하게 들어가보자면 이렇다고 한다.

 


  1. 클라이언트는 서버에서 TLS 연결을 요청하겠다고 보낸다. -> 이 과정에서 사용 가능한 암호화 방식도 보낸다.
  2. 서버에서는 클라이언트로부터의 요청을 확인 후, 암호화 방식을 결정해 클라이언트에게 알린다.
  3. 키의 교환이 이루어진다. (공개키 기반)
  4. 클라이언트가 GET 요청을 서버로부터 받은 키로 암호화 해 서버에 보낸다
  5. 서버 또한 동일한 방식으로 응답을 보낸다.

 

 

'보안' 카테고리의 다른 글

[보안] MD5 와 SHA의 차이  (0) 2020.09.17