TSL/SSL HandShake

ujin·2022년 11월 20일
0

네트워크

목록 보기
7/9

우리는 사이트 주소에서 https://를 본적이 있다. 예전에는 URI가 http로 시작하는 사이트가 전부였지만, 요즘 사이트는 대부분 https로 시작한다. 이렇게 https를 통한 인터넷 접속은, 브라우저를 실행 중인 우리 컴퓨터가 해당 사이트의 서버와 암호화 통신을 하고 있다는 것을 의미한다. https를 이용한 인터넷 접속은 SSL(TSL)을 이용한 것이라고 보면 된다. 즉, SSL 암호화 통신은 ‘SSL(Secure Socket Layer)’ 또는 ‘TSL(Transport Layer Security)’라는 보안 프로토콜을 통해 클라이언트(브라우저)오 서버(웹서버)가 보안이 향상된 통신을 하는 것을 말한다.

HTTPS와 SSL은 같은 것인가?

우선, HTTPS와 SSL은 다르다. SSL과 TSL는 ‘보안 계층’이라는 독립적인 프로토콜 계층을 만들어, 위 그림과 같이 응용 계층과 전송 계층 사이에 속하게 된다. HTTPS는 SSL 또는 TSL 위에 HTTP 프로토콜을 얹어 보안된 HTTP 통신을 하는 프로토콜이다. 즉, SSL과 TSL는 HTTP뿐만 아니라 FTP, SMTP와 같이 다른 프로토콜에도 적용할 수 있으며, HTTPS는 TSL와 HTTP가 조합된 프로토콜만을 가리킨다. SSL과 TSL는 같은 의미의 단어이다. TSL가 SSL이 후속 버전이지만, SSL이 일반적으로 더 많이 사용되는 용어이다.

SSL(Secure Socket Layer)

Secure Socket Layer의 약자로, 직역하면 암호화 소켓층이다. 1994년 Netscape사에서 처음 개발되어 3.0 버전까지 존재한다.

SSL이란, 웹 서버와 클라이언트의 통신 암호화 프로토콜이다.

SSL이 적용되지 않은 통신의 경우, 위 그림과 같이 평문(Plain Text)가 그대로 전송된다. 만약 제 3자가 어떠한 방식으로든 통신 패킷을 탈취할 경우, 그 내용을 쉽게 확인할 수 있다.

SSL을 적용한다면 이러한 문제를 기술적으로 해결할 수 있다. 요청을 암호화해서 보내므로 통신 패킷이 탈취되도 복호화 키가 없으면 원래 내용을 알 수 없기 때문이다.

특징

  1. URL 프로토콜은 https이며, 기본 포트는 443이다.
  2. 통신 데이터가 암호화되어, 패킷이 탈취되는 사고가 발생해도 데이터를 지킬 수 있다.
  3. SSL 인증서를 통해 도메인의 신뢰성을 검증할 수 있다.
  4. 데이터 송/수신 과정에서 암/복호화가 발생하므로 속도가 느리다.

TSL/SSL HandShake

HTTPS 통신 과정에서도 송신자와 수신자가 암호화 통신을 하기 위한 방법과 수단에 대해 공유한다. 즉 데이터를 암호화할 대칭키(비밀키)를 타인에게 노출시키지 않고 Client가 Server에게 전송하기 위해 협상을 벌이는 것이다. SSL HandShake(TSL HandShake)가 그 방법으로, 송신자와 수신자가 암호화된 데이터를 교환하기 위한 일렬의 협상과정을 의미한다. 협상과정에는 SSL 인증서 전달, 대칭키(비밀키) 전달, 암호화 알고리즘 결정, SSL/TLS 프로토콜 결정 등이 포함된다.

파란색 칸과 노란색 칸은 네트워크 상에서 전달되는 IP Packet을 표현한 것이다.

맨 윗줄의 SYN, SYN ACK, ACK는 TCP layer의 3-way handshake로 HTTPS가 TCP 기반의 프로토콜이기 때문에 암호화 협상에 앞서 연결을 생성하기 위해 실시한는 과정이고 아래 노란색 상자의 패킷들이 SSL HandShake이다.

순서대로 보기

  1. 암호화 알고리즘(Ciper Suite) 결정
  2. 데이터를 암호화할 대칭키(비밀키) 전달

클라이언트 1)

Client Hello

: 클라이언트가 먼저 서버에 접속해서 말을 건다.

브라우저 주소창에서 네이버를 치면 브라우저는 네이버 웹 서버에 접속을 시도

TCP연결을 위한 3-way handshake를 수행한 브라우저는 네이버가 HTTPS를 사용하는 것을 알게 되고 다음의 정보를 보냄

  • 브라우저가 사용하는 SSL 혹은 TSL 버전 정보
  • 브라우저가 지원하는 암호화 방식 모음(안전한 키 교환, 전달 대상 인증, 암호화 알고리즘, 메세지 무결성 확인 알고리즘)
  • 브라우저가 순간적으로 생성한 임의의 난수
  • 만약 이전에 SSL HandShake가 완료된 상태라면, 그 때 생성된 세션 아이디
  • 기타 확장 정보

서버 2)

Server Hello

: 서버 또한 위의 인사에 응답하면서, 다음 정보를 클라이언트에 제공한다.

  • 브라우저 암호화 방식 정보 중에서, 서버가 지원하고 선택한 암호화 방식
  • 서버의 공개키가 담긴 SSL 인증서
  • 서버가 순간적으로 생성한 임의의 난수
  • 클라이언트 인증서 요청 (선택 사항)

클라이언트 3)

브라우저는 서버의 SSL 인증서가 믿을만한지 확인한다.

등록된 CA가 아니거나, 등록된 CA가 만든 인증서처럼 꾸몄다면 경고

클라이언트 4)

브라우저는 자신이 생성한 난수와 서버의 난수를 사용하여 Premaster Secret을 만든다.

웹 서버 인증서에 딸려온 웹 사이트의 공개키로 암호화하여 서버로 전송한다.

서버 5)

서버는 사이트의 비밀키로 브라우저가 보낸 Premaster Secret값을 복호화

복호화한 값을 master secret 값으로 저장함. 이것을 사용해서 방금 브라우저가 만들어진 연결에 고유한 값을 부여하기 위한 세션 키를 생성함. 세션 키는 대칭키 암호화에 사용하고 이걸 사용해서 브라우저와 서버 사이에 주고받는 데이터를 암호화하고 복호화한다.

서버/클라이언트 6)

SSL HandShake를 종료하고 HTTPS 통신을 시작한다.

브라우저와 서버는 SSL HandShake가 정상적으로 완료되었고 이제 웹 상에서 데이터를 세션 키를 사용하여 암호화/복호화하며 HTTPS 프로토콜을 통해 주고받을 수 있다.

profile
개발공부일기

0개의 댓글