TLS/SSL Handshake

코난·2023년 12월 6일
0

CS 면접 정리

목록 보기
20/67

SSL/TLS Handshake

  • HTTPS 통신에서 클라이언트가 서버에 접속하면 서버는 클라이언트에게 SSL 인증서 정보를 전달하고, 해당 인증서가 확인된 이후에 내부에 존재하는 공개키를 활용해 세션키를 생성하고 이를 활용해서 통신하는 과정을 SSL/TLS Handshake라고 함
  • SSL은 Secure Socket Layer, TLS는 Transport Layer Security
  • TLS는 SSL의 취약성을 해결한 버전의 프로토콜임(SSL이 TLS의 이전버전이라고 생각하면 됨)
  • HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서 HTTP는 SSL와 통신하고 SSL이 TCP와 통신하게 됨.

  • 파란색 부분은 TCP layer의 3-way handshake
  • 노란색 부분은 SSL Handshake


1. Client Hello

  • handshake의 시작으로 클라이언트가 서버로 hello 메세지를 전송함
  • 클라이언트가 지원하는 TLS(SSL) 버전, 지원되는 암호 제품군(Cipher Suite), 그리고 무작위 바이트 문자열인 client random이 메세지에 포함됨
  1. Server Hello
  • Client Hello 메세지에 대한 응답 메세지
  • 서버의 SSL 인증서, 서버에서 선택한 암호 제품군(Chosen Cipher Suite), 서버에서 생성한 무작위 바이트 문자열인 server random이 메세지에 포함됨
  1. Verify Server Certificate
  • 클라이언트가 서버의 SSL 인증서를 인증서 발행기관(CA)을 통해 검증
  • 서버가 인증서에 명시된 서버인지, 클라이언트가 상호작용중인 서버가 실제 해당 도메인의 소유자인지 확인
  1. Client Key Exchange
  • 클라이언트는 서버의 SSL 인증서에서 공개키를 받음
  • 검증이 완료되면 The premaster secret라고 하는 무작위 바이트 문자열을 공개키로 암호화하여 전송
  1. Send Client Certificate
  • 서버가 클라이언트의 인증서를 요구한다면 서버의 인증서와 같은 방식으로 암호화를 진행해 함께 전송
  1. Verify Client Certificate
  • 서버가 클라이언트로부터 받은 The premaster secret을 서버의 개인키를 통해 해독
  1. Client Finished
  • 클라이언트가 client random, server random, The premaster secret를 이용해 대칭키로 활용할 세션키를 생성(master seceret)
  • 클라이언트가 세션키로 암호화된 finished 메세지를 전송함
  • Change Cipher Spec 메세지를 송심함으로써 이 메세지 이후의 통신은 암호키를 사용해서 진행한다는 것을 의미
  1. Server Finished
  • 서버가 client random, server random, The premaster secret를 이용해 대칭키로 활용할 세션키를 생성(master seceret)
  • 서버가 세션키로 암호화된 finished 메세지를 전송함
  • Change Cipher Spec 메세지를 송심함으로써 이 메세지 이후의 통신은 암호키를 사용해서 진행한다는 것을 의미
  1. Exchange messages
  • handshake가 완료되고, 세션키를 이용해 메세지를 주고받음

참고

https://inuplace.tistory.com/1086
https://loosie.tistory.com/718

profile
몸은 커졌어도, 머리는 그대로... 하지만 불가능을 모르는 명탐정 현아! 진실은 언제나 하나!

0개의 댓글