[HTTP] SSL Handshake

JY·2023년 4월 12일
0

HTTP

목록 보기
1/1

SSL Handshake

파란색 네모와 노란색 네모는 네트워크 상에서 전달되는 IP 패킷이다. 파란색에 해당하는 것들은 TCP 레이어의 3-way Handshake로, HTTP는 TCP 기반의 프로토콜이므로 SSL Handshake에 앞서 TCP 연결을 생성하고 있는 것이다.


1. (클라이언트 → 서버) ClientHello
클라이언트가 서버에 연결을 시도할 때 보내는 패킷이다. Cipher Suite(암호화 스위트, 사용할 수 있는 알고리즘 정보) 등의 정보를 담아서 보낸다.

2. (서버 → 클라이언트) ServerHello
암호화 스위트 중 하나를 선택하여 클라이언트에게 알린다. 클라이언트가 서버에게 보내는 패킷에는 암호화 스위트가 여러 개지만, 서버가 클라이언트에게 보내는 패킷에는 선택된 하나의 암호화 스위트만 담겨있는 것을 알 수 있다.

3. (서버 → 클라이언트) Certificate
서버는 ServerHello 패킷 외에 Certificate 패킷도 보낸다. 이 패킷에는 서버의 SSL 인증서가 담겨있다.

4. 클라이언트에서 서버의 SSL 인증서 검증
클라이언트에서 서버의 인증서를 검증한다. 이 인증서는 CA의 개인키로 암호화되었기 때문에 CA의 공개키를 이용해서 복호화한다. 이때, 복호화가 되었다는 것은 인증서가 해당 CA에서 발급되었다는 것이 검증된 것이다.

5. (클라이언트 → 서버) Client Key Exchange
클라이언트는 데이터를 암호화하기 위한 대칭키를 생성한다. 생성한 대칭키를 서버에게 전달해야 하는데, SSL 인증서를 통해 받은 서버의 공개키로 암호화하여 서버에게 전달한다.

6. (클라이언트 ↔︎ 서버) Change Cipher Spec
서버는 클라이언트로부터 5번에서 전달한 키를 받았고, 이는 서버의 공개키로 암호화되었으므로 서버의 비밀키로 복호화할 수 있다. 이제 서버와 클라이언트 모두 동일한 대칭키를 가지고 있으므로 통신할 준비가 완료되었다는 의미로 서로에게 Change Cipher Spec을 보낸다.



참고

https://nuritech.tistory.com/25
https://steady-coding.tistory.com/512

profile
🙋‍♀️

0개의 댓글