[ODOP:15]Handshake TLS 1.2

TLS 1.2 에서 Handshake 를 하는 과정을 기록 합니다.

동작 시점

사용자가 HTTPS 를 통해 웹 사이트를 탐색 하고 브라우저가 처음 해당 웹 사이트의 원본 서버를 쿼리 할 때 동작 전송 계층과 애플리케이션 계층 사이에서 동작하며 TCP 는 TLS 를 Application 으로 인식하며 Application 은 TLS 를 TCP 로 인식한다

TLS 핸드 셰이크는 TCP 핸드셰이크를 통해 TCP 연결이 수립 된 후 발생한다

핸드셰이크 단계

아래의 과정은 총 4번의 왕복으로 완수됨 상세한 설명을 위해 총 9 단계로 나누어 설명

  1. TCP 핸드셰이크로 인해 TCP 연결 수립
  2. Client Hello (Client -> Server)
    • 'hello' 메시지를 보내며 핸드셰이크 시작
    • 클라는 자신이 지원하는 [[Cipher suite]] list(알고리즘 집합) 를 서버에게 전송
      • TLS 버전, 암호화 제품군, 클라이언트 무작위(바이트 문자열. 대칭 키 생성에 사용 됨)
  3. Server Hello (Server -> Client)
    • 서버 자신의 TLS 인증서, 서버에서 선택 한 암호화 제품군, 서버에서 생성 한 무작위 바이트 문자열을 포함하여 클라이언트에게 전달
  4. Certificate (Client) :
    • 서버에서 받은 TLS 인증서의 발행 기관을 통해 검증
      • 보통 로컬에 저장 된 신뢰된 인증 기관(CA) 목록과 비교하여 이루어짐
      • 인증서 변조, 유효성 체크
    • 서버에서 사용하는 공개 키 습득
  5. Premaster secret (Client -> Server)
    • premaster secret(예비 마스터 암호) 라고 하는 무작위 바이트 문자열을 하나 더 전송
    • premaster secret 는 공개 키로 암호화 되어 있음
    • 서버가 소유한 개인 키 로만 해독 가능
  6. Private key used (Server)
    • 서버가 소유한 공개키로 premaster secret(예비 마스터 암호) 를 해독
  7. Session key created (Server, Client)
    • 서버 무작위 , 클라이언트 무작위, Premaster Secret(예비 마스터 암호) 를 사용하여 세션 키 생성
  8. Client is ready(Client -> Server)
    • 클라이언트가 세션 키로 암호화 된 'finished' 메시지를 서버로 전송
  9. Server is ready(Server -> Client)
    • 서버가 세션 키로 암호화 된 'finished' 메시지를 클라이언트로 전송
  10. Secure symmetric encryption achieved
    • 핸드셰이크가 완료 되었으며, 세션 키를 사용하여 통신이 계속 됨

출처