[Network] TLS Handshake에 대한 정리

SSL (Secure Sockets Layer)이란?

안전한 통신을 위해 클라이언트와 서버 간의 암호화 및 인증을 제공하는 프로토콜.

 

TLS (Transport Layer Security)란?

네트워크 통신에서 SSL보다 개선된 보안 기능과 알고리즘을 제공하는 SSL의 후속 프로토콜.

일반적으로, 웹사이트의 주소가 “https://”로 시작하는 경우는 TLS 암호화 프로토콜을 사용한다.

 

TLS의 목적

암호화 (Encryption)

데이터를 암호화하여 제3자가 중간에서 정보를 감시하거나 변조하는 것을 방지.

클라이언트와 서버 간의 통신은 대칭 키 암호화 방식이나 비대칭 키 암호화 방식 중 하나를 사용하여 암호화.

인증 (Authentication)

디지털 인증서를 사용하여 통신 상대방의 신원을 확인.

클라이언트와 서버는 핸드셰이크를 통해 서로의 인증을 수행하고 안전한 연결을 설정.

무결성 보호 (Integrity Protection)

데이터의 무결성을 보호하기 위해 해시 함수를 사용하여 메시지 다이제스트를 생성하고 전송.

수신 측에서는 이 다이제스트를 확인하여 데이터가 중간에서 변경되지 않았음을 검증.

 

TLS Handshake

TLS 암호화를 사용하는 통신 세션을 실행하는 프로세스.

클라이언트와 서버는 메시지를 교환하여 서로를 인식하고 서로를 검증하며 사용할 암호화 알고리즘을 구성하고 세션키에 합의한다.

TLS Handshake는 TCP HandShake가 먼저 일어난 이후에 일어난다.

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

과정

  1. 클라이언트가 서버로 ClientHello 메시지를 전송하면서 TLS HandShake가 시작한다. ClientHello에는 클라이언트가 지원하는 TLS 버전, 지원되는 암호화 방식들, 난수 등이 포함된다.
  2. 서버에서는 ClientHello 메시지의 응답으로 ServerHello 메시지를 전송한다. ServerHello에는 서버에서 사용하는 TLS 버전, 클라이언트가 보낸 암호화 방식들 중에 서버가 사용 가능한 암호화 방식, 서버에서 선택한 암호 제품군, 난수 등이 포함된다.
  3. 서버의 인증서를 클라이언트에게 전송한다(Certificate). 클라이언트는 이 메시지를 통해 서버의 인증서가 무결한지 검증한다.
  4. 클라이언트서버의 인증서에 대한 검증이 끝났으면 이전에 주고받았던 클라이언트의 난수와 서버의 난수를 조합하여 pre master secret(대칭키)를 생성하고 이 키를 서버의 공개키로 암호화한다.
  5. 서버가 보내야 하는 메시지를 다 보냈다면 ServerHelloDone 메시지를 전송한다.
  6. 클라이언트는 만들어둔 pre master secret 키를 서버의 공개키로 암호화한 것을 서버에게 전송한다. (ClientKeyExChange)
  7. 서버클라이언트가 서로 이제부터 전송되는 메시지는 “협상된 알고리즘과 키(세션키)를 이용하여 암호화하겠다”라는 알림 메시지(ChangeCipherSpec)를 전송한다.
  8. 클라이언트서버 간의 TLS Handshake를 성공적으로 마치면 Finished 메시지를 보낸다.