[Web] TLS HandShake

DongDong·2022년 12월 6일
0

Web에 대한 이해

목록 보기
3/3

아래 게시글을 읽고 난 뒤 해당 포스팅을 보시면 이해하시는데 조금 더 도움이 될 것 같습니다.

https://velog.io/@qltkd5959/Web-HTTPS%EB%9E%80


🔎 TLS 핸드쉐이크란 ?

클라이언트가 웹 서버의 무결성을 확인하고 대칭키를 전달하는 일련의 과정을 TLS 핸드쉐이크라고 부르며, 사용자가 TLS를 사용하는 웹사이트를 접속하면 클라이언트와 웹 서버간에
TLS Handshake가 시작된다.

TLS Handshake는 서로 상대방이 존재하는지 , 상대방과 데이터를 주고받기 위해
어떠한 방식을 채용할 것인지를 정하는 과정이라고 할 수 있다.

TLS를 사용한다는 것은 접속하고자 하는 웹 서버에 대하여 아래 3가지를 보장받는 것이다.

  • 암호화 : 제 3자로부터 전송되는 데이터를 숨긴다.
  • 인증 : 정보를 교환하는 당사자가 요청된 당사자임을 보장한다.
  • 무결성 : 데이터가 위조되거나 변조되지 않았는지 확인한다.

📌 TLS 핸드쉐이크의 과정

📌 1. Client Hello

URL을 통해 접근 혹은 검색사이트를 통해 접근할 때 내부적으로 클라이언트가 서버에 접근하게 되는데, 이 단계를 Client Hello라고 부른다.

해당 단계는 다음과 같습니다.

  • 클라이언트 측에서 서버 측으로 랜덤한 값을 생성하여 전송합니다.
    ( 해당 랜덤 데이터는 추후에 사용됩니다. )

  • 클라이언트가 지원하는 암호화 방식을 서버 측에 전송합니다.
    왜냐하면 클라이언트(브라우저)가 모두 다르며 암호화 방식이 다양하기 때문입니다.

  • Session ID
    이전에 이미 Handshake를 진행하였다면 비용과 시간을 절약하기 위해서
    기존의 Session ID를 재활용하게 된다.

📌 2. Server Hello

클라이언트 측에서 먼저 Hello라고 인사를 했으니, 서버 측에서도 반갑다고 인사를 하는 과정입니다.
이러한 과정을 Server Hello라고 부릅니다.

  • 서버 측에서 클라이언트 측으로 랜덤한 값을 생성하여 전송합니다.
    ( 해당 랜덤 데이터는 추후에 사용됩니다. )

  • 서버가 선택한 클라이언트의 암호화 방식
    클라이언트가 보내온 암호화 방식 중 하나를 서버가 선택하는 과정을 의미합니다.
    이 때 서버 측은 자신도 사용할 수 있는 암호화 방식이면서 가장 안전한 방법을 선택합니다.

  • 인증서

📌 3. Server Certificate ~ Server Hello Done

Server Hello 단계에서 서버측이 클라이언트 측에 건낸 인증서를 검증하는 일련의 단계입니다.

클라이언트는 서버가 전송한 인증서가 어떤 CA로 인해 발급된 것인지 확인하고
브라우저에 내장되어있는 CA 리스트에 있는지 확인합니다.
인증서가 CA 리스트에 있다면 해당 CA에 대한 공개키로 인증서 복호화를 시도하게됩니다.
만약 복호화가 성공한다면 해당 인증서를 신뢰하게 되는 것입니다.
복호화가 성공했다는 의미는 CA에 의해 인증된 신뢰할 수 있는 서버라는 의미이기 때문입니다.

📌 4. Exchange Pre-master Secret

위 단계에서 서로 주고받은 랜덤 키를 이용하여 클라이언트는 Pre-master Secret이라는 대칭키를 생성합니다.

Pre-master Secret은 핸드 쉐이크가 끝나고 실제로 데이터를 전송하는 단계에서 안전한 방식으로 주고받을 수 있는 대칭키를 생성할 때 사용하게 됩니다.

랜덤 데이터를 서버로 그냥 전송하게되면 누가 가로챌 수 있기때문에
이 때 인증서 안에 있는 서버의 공개키를 사용합니다.
클라이언트에서 만든 Pre-master Secret를 암호화하고 암호화된걸 서버로 전송하여
중간에 유출 되더라도 Pre-master Secret를 암호화한 비밀키는 서버만 가지고 있기 때문에 해독할 수 없게 됩니다.

📌 5. Master Secret, Session Key의 생성

서버는 Pre-master Secret를 자신의 비밀 키로 복호화하는 과정을 거칩니다.
Pre-master Secret는 클라이언트가 만들었기 때문에 당연히 클라이언트는 알고있으며
서버도 자신의 비밀 키로 복호화하는 과정을 거쳐서 Pre-master Secret를 알게되었으므로
해당 키를 일련의 과정을 통해 Master Secret이라는 키는 만들게 되고
해당 값을 이용해 최종적으로 Session Key라는 Handshake 다음 단계에서
사용되는 대칭키가 되는 것입니다.

📌 6. Session 단계

위 단계에서 클라이언트와 서버는 이제 핸드쉐이크 단계가 끝났다는 것을 서로에게 알리고
Session 단계로 넘어오게 됩니다.

정보를 상대방에게 전달할 때 실제 데이터를 세션 키로 암호화해서 전송하게 되며
암호화 방식은 대칭키(세션키) 방식을 사용합니다.

공개키는 이상적인 암호화 방식이지만 그만큼 비용이 많이 들기 때문에
대칭키 방식과 혼합하여 사용하는 것입니다.

📌 7. Session 종료

세션이 종료가 되면 실제로 통신이 끝났음을 서로에게 알리고
세션 단계에서 사용했던 세션 키를 폐지하게 됩니다.
세션 키를 탈취당했더라도
세션의 수립과 종료는 짧은 시간에 일어나기때문에 암호가 해독되더라도
세션은 이미 종료된 이후이기 때문에 안전하게 통신이 가능하게 되는 것입니다.


참고 : https://www.youtube.com/watch?v=8R0FUF_t_zk

profile
중요한건 꺾이지 않는 마음

0개의 댓글