HTTPS에서 3-way handshake(파란색)를 통해 TCP 연결이 맺어지면,
클라이언트와 서버가 암호화 통신을 어떻게 할 것인지 협상하는 과정(노란색)
클라이언트가 서버에 연결을 시도하며 전송하는 패킷
다음 포함:
- SSL 프로토콜 버전
- 세션 ID
- 클라이언트가 사용할 수 있는 `Cipher Suites` 목록
Cipher Suites
- 프로토콜, 데이터 암호화 알고리즘, 해싱 알고리즘이 나열된 규약 → 선택된 Cipher Suites에 따라 데이터 암호화
서버에서 클라이언트가 보낸 Cipher Suites중 하나를 선택해,
서버의 SSL 프로토콜 버전 & 세션 ID 함께 전송
서버의 SSL 인증서
서버의 공개키가 SSL 인증서 안에 없는 경우 `ServerKeyExchange`(서버가 직접 공개키 전달),
SSL 인증서가 있다면 `ServerKeyExchange` 생략하고, 서버의 작업이 완료됨을 알림
1. 서버가 보낸 SSL 인증서를 CA의 공개키를 사용해 복호화 (인증서 검증)
2. 검증이 완료되면 대칭키를 생성하고 서버의 공개키를 사용해 암호화해서 전송
- 여기서 생성되는 대칭키가 실제로 데이터를 암호화하는 키이자 SSL Handshake의 목적
클라이언트가 성공적으로 대칭키를 생성했으며 이후 메시지는 암호화해서 전송할 것을 알림,
서버도 대칭키 생성에 성공했음을 알림
클라이언트가 Handshake 내역을 해싱하고 암호화해서 전송,
서버는 복호화해서 확인 후 일치한다면 SSL Handshake 성공적으로 완료