[Network] SSL Handshake

olwooz·2023년 2월 6일
0

Network

목록 보기
5/5
post-thumbnail

SSL Handshake

HTTPS에서 3-way handshake(파란색)를 통해 TCP 연결이 맺어지면,
클라이언트와 서버가 암호화 통신을 어떻게 할 것인지 협상하는 과정(노란색)

ClientHello

클라이언트가 서버에 연결을 시도하며 전송하는 패킷

다음 포함:

- SSL 프로토콜 버전
- 세션 ID
- 클라이언트가 사용할 수 있는 `Cipher Suites` 목록

Cipher Suites - 프로토콜, 데이터 암호화 알고리즘, 해싱 알고리즘이 나열된 규약 → 선택된 Cipher Suites에 따라 데이터 암호화

ServerHello

서버에서 클라이언트가 보낸 Cipher Suites중 하나를 선택해, 
서버의 SSL 프로토콜 버전 & 세션 ID 함께 전송

Certificate

서버의 SSL 인증서

ServerHelloDone

서버의 공개키가 SSL 인증서 안에 없는 경우 `ServerKeyExchange`(서버가 직접 공개키 전달),
SSL 인증서가 있다면 `ServerKeyExchange` 생략하고, 서버의 작업이 완료됨을 알림

ClientKeyExchange

1. 서버가 보낸 SSL 인증서를 CA의 공개키를 사용해 복호화 (인증서 검증)
2. 검증이 완료되면 대칭키를 생성하고 서버의 공개키를 사용해 암호화해서 전송
  - 여기서 생성되는 대칭키가 실제로 데이터를 암호화하는 키이자 SSL Handshake의 목적

ChangeCipherSpec

클라이언트가 성공적으로 대칭키를 생성했으며 이후 메시지는 암호화해서 전송할 것을 알림,
서버도 대칭키 생성에 성공했음을 알림

Finished

클라이언트가 Handshake 내역을 해싱하고 암호화해서 전송,
서버는 복호화해서 확인 후 일치한다면 SSL Handshake 성공적으로 완료

0개의 댓글