Computer Science/Network

[Network] TSL/SSL HandShake

dbssk 2023. 7. 7. 19:59

TSL/SSL HandShake

클라이언트와 서버 간에 안전한 연결을 설정하기 위한 과정으로 TLS(Transport Layer Security) 또는 SSL(Secure Sockets Layer) 프로토콜에서 사용된다.

TLSSSL의 후속 버전으로, SSL 보다 안전하고 강력한 암호화 기능을 제공한다.

TLS/SSL HandShake 과정

  1. 클라이언트 Hello
    • 클라이언트가 서버에게 연결을 시작하기 위해 "client hello" 메시지를 보낸다.
    • 이 메시지에는 클라이언트의 TLS/SSL 버전, 지원하는 암호화 알고리즘, 압축 방식 등의 정보가 포함된다.
  2. 서버 Hello
    • 서버는 "client hello" 메시지를 받고, "server hello" 메시지를 생성하여 클라이언트에게 보낸다.
    • 이 메시지에는 서버의 TLS/SSL 버전, 선택된 암호화 알고리즘, 압축 방식 등의 정보가 포함된다.
    • 또한, 서버는 공개키 인증서와 세션 ID를 클라이언트에게 제공한다.
  3. 인증서 검증
    • 클라이언트는 받은 공개키 인증서의 유효성을 검증한다.
    • 클라이언트는 신뢰할 수 있는 인증 기관(CA)의 공개키를 사용하여 인증서의 서명을 확인한다.
    • 인증서의 도메인 이름과 실제 서버의 도메인 이름을 비교하여 일치 여부를 확인한다.
  4. secret key 생성
    • 클라이언트는 클라이언트 랜덤 데이터, 서버 랜덤 데이터, 세션 ID, 클라이언트와 서버의 암호화 알고리즘 등을 조합하여 secret key를 생성한다.
    • 이 키는 이후 대칭키를 생성하는데 사용된다.
  5. 클라이언트 인증서 보내기
    • 만약 2번 단계에서 서버가 클라이언트 인증서를 추가로 요구했다면, 클라이언트의 인증서와 클라이언트의 개인키로 암호화된 임의의 바이트 문자열을 함께 보낸다.
  6. 대칭키 생성
    • 서버는 클라이언트의 인증서를 확인한 다음, secret key를 자신의 개인 키로 복호화한 후 대칭 마스터 키 생성에 활용한다.
  7. 클라이언트의 finished 메시지 전송
    • 클라이언트는 handshake 과정이 완료되었다는 "finished" 메시지를 서버에 보내면서, 지금까지 보낸 교환 내역들을 해싱 후 그 값을 대칭키로 암호화하여 같이 담아 보낸다.
  8. 서버의 finished 메시지 전송
    • 서버도 교환 내용들을 해싱하고 클라이언트에서 보내준 값과 일치하는지 확인한다. 일치한다면 "finished" 메시지를 대칭키로 암호화하여 보낸다.
  9. 메시지 교환
    • 클라이언트는 해당 메시지를 대칭키로 복호화하여 서로 통신이 가능하며 신뢰받는 사용자라는 것을 확인하고 앞으로 클라이언트와 서버는 해당 대칭키로 데이터를 주고 받을 수 있게 된다.

[참고] https://gyoogle.dev/blog/computer-science/network/TLS%20HandShake.html