TLS 핸드셰이크와 3-way 핸드셰이크는 둘 다 서버와 클라이언트가 "통신 준비"를 위해 하는 과정이지만, 완전히 다른 계층, 목적, 방식을 가진 서로 다른 handshake.
✅ 1. TCP 3-way Handshake (전송 계층, 연결을 위한 handshake)
📌 언제 발생하냐?
- 모든 TCP 기반 통신에서 발생 (HTTP, HTTPS 둘 다 포함)
- 클라이언트와 서버가 "연결(connection)"을 맺기 위해 수행함
📦 흐름
- SYN – 클라이언트: 나 연결할게!
- SYN-ACK – 서버: 좋아, 나도 준비됐어!
- ACK – 클라이언트: 확인했어, 이제 시작하자!
🔗 이렇게 해서 TCP 소켓이 연결되면, HTTP나 TLS 같은 상위 프로토콜이 그 위에서 동작할 수 있음
✅ 2. TLS Handshake (애플리케이션 계층, 암호화를 위한 handshake)
📌 언제 발생하냐?
- HTTPS 통신을 시작할 때 (즉, HTTP over TLS)
- 목적은: 암호화에 필요한 세션 키를 서로 합의하기 위해
📦 TLS 1.2 기준 흐름 요약 (단순화)
- ClientHello
- 브라우저(클라이언트)가 지원하는 암호화 방식 목록, 랜덤값, TLS 버전 등 전송
- ServerHello
- 서버가 선택한 암호화 방식, 서버 인증서(공개키 포함), 랜덤값 전송
- 인증서 검증
- 클라이언트가 인증서 유효성 검사 (신뢰할 수 있는 CA인지 등)
- Pre-Master Key 생성 + 암호화
- 클라이언트가 세션 키 후보(Pre-Master Key)를 만들어서
- 서버의 공개키로 암호화해 서버에 전송