TLS-Handshake

woogi·2024년 1월 22일
0

TLS Handshake

TLS 핸드셰이크는 HTTPS로 클라이언트와 서버가 처음 연결될때 진행되는 메시지 교환이다.
메시지를 교환하여 서로를 인식하고 검증하며 사용할 암호화 알고리즘을 구성하고 세션 키에 합의한다.

간단하게 말해서, 클라이언트와 서버가 TLS 암호화 통신을 시작할때 서로 확인하고 정보를 교환하는 과정이 악수와 비슷해서 생긴 이름이다.
이 핸드셰이크 단계에서 클라이언트는 서버의 인증서를 받아 실뢰할 수 있는 서버인지 확인하고 대칭키를 주고 받는 등의 과정을 거친다.


출처: https://www.cloudflare.com/ko-kr/learning/ssl/what-happens-in-a-tls-handshake/



TLS-Handshake는 위의 그림처럼 클라이언트와 서버가 메시지 교환을 한다.
위의 파랑색 SYN, SYN ACK, ACK는 HTTP가 TCP 기반의 통신이기 때문에 3-way handshake이고 아래의 노란색이 TLS handshake로 메시지를 교환하는 과정이다.

Wireshark를 통해서 실제 TLS 암호화 통신을 할때 어떻게 패킷이 오가는지 확인해 보려고 한다.

www.msn.com 홈페이지에 접속할때의 패킷정보이다.

1. Client Hello (Client -> Server)

클라이언트가 서버한테 Client Hello라는 메시지를 보낸다

  • Version
    Client에서 사용하는 TLS 버전
  • Cipher Suites
    Client가 지원하는 암호화 방식 리스트
  • Random
    클라이언트에서 생성한 난수, 나중에 대칭키를 만들 때 사용함

2. Server Hello (Server -> Client)


서버가 응답하여 클라이언트한테 Server Hello 메시지를 보낸다.

  • Version
    서버에서 사용하는 TLS 버전
  • Cipher Suite
    클라이언트의 cipher 리스트 중 하나를 선택
  • Random
    서버에서 생성한 난수, 나중에 대칭키를 만들 때 사용함

3. Certificate (Server -> Client)



서버의 인증서를 클라이언트에게 보내는 단계이다.

  • 첫번째 Certificate
    서버의 인증서
  • 두번째Certificate
    CA 인증서

4. Certificate Status (Server -> Client)


클라이언트는 이 메세지를 통해 서버의 인증서가 유효한지 검증한다. (OCSP는 온라인 인증서 상태 프로토콜의 약자로, 인증서 유효성 확인을 제공하는 방법)

5. Server Key Exchange (Server -> Client)

인증서의 공개 키 정보가 키 교환에 충분하지 않은 경우 서버는 클라이언트에 서버 키 교환 메시지를 보낸다.(ECDHE라는 key 쌍을 만들어 클라이언트에 보냄)

6. Server Hello Done (Server -> Client)

서버가 보낼 메세지를 모두 보냈다 라는 뜻으로 클라이언트에 메시지를 보낸다.

7. Client Key Exchange (Client -> Server)

클라이언트의 난수(Random)와 서버의 난수로 pre-master-secret(대칭키)를 생성한다.
생성한 대칭키는 서버의 공개키로 암호화해 서버로 전송한다.

8. Change Cipher Spec (Client -> Server)

협상된 키 및 알고리즘을 사용하여 암호화되어 전송될 것임을 나타내는 메시지이다.

9. Encrypted Handshake Message (Client -> Server)

클라이언트는 서버에게 TLS 핸드셰이크가 완료되었다는 메시지를 보낸다.

11. Application Data


클라이언트와 서버가 서로 전송하는 데이터를 암호화해서 보낸다.

참고

https://feel5ny.github.io/2019/12/08/HTTP_014_02/

https://babbab2.tistory.com/7

https://www.ibm.com/docs/en/sdk-java-technology/8?topic=handshake-tls-12-protocol

0개의 댓글

관련 채용 정보