파란색 블럭은 TCP의 3-way handshake 과정을 표현한 것이고, 노란색 블럭은 SSL handshake를 표현한 것이다.
+) TCP의 3-way handshake 에 대한 자세한 설명은 이전 게시물을 참고
2022.08.24 - [Dev/Network] - [Network] TCP 3-way handshake
SSL handshake의 과정을 간단하게 정리하고, 이어서 자세히 설명한다.
ClientHello(암호화 알고리즘 나열 및 전달) → Serverhello(암호화 알고리즘 선택) → Server Certificate(인증서 전달) → Client Key Exchange(데이터를 암호화 할 대칭 키 전달) → Client / ServerHello done (정보 전달 완료) → Finished(SSL Handshake 종료)
※ 서버는 CA에 사이트 정보와 공개 키를 전달하여 인증서를 받았고, 클라이언트는 브라우저에 CA 공개 키가 내장되어 있다고 가정
1. 클라이언트는 "client hello" 메시지를 보낸다. 이 메시지는 SSL 버전 및 클라이언트의 선호도에 따라 클라이언트가 지원하는 CipherSuites와 같은 암호화 정보를 나열한 것이다. 여기에는 후속 계산에 사용되는 임의의 바이트 문자열(Random byte string)도 포함되어 있다. 프로토콜은 "client hello"가 클라이언트가 지원하는 데이터 압축 방법을 포함할 수 있도록 한다.
2. 서버는 "server hello" 메시지로 응답한다. 이 메시지는 클라이언트가 제공한 목록에서 서버가 선택한 CipherSuite, 세션 ID 및 다른 임의의 바이트 문자열을 포함한다. 또한 서버는 서버의 디지털 인증서도 보낸다. 서버에서 클라이언트 인증을 위한 디지털 인증서가 필요한 경우, 서버는 지원되는 인증서 유형 목록과 허용되는 CA(인증 기관)의 고유 이름을 포함하는 "client certificate request" 을 보낸다.
3. 클라이언트는 서버의 디지털 인증서를 확인한다. 클라이언트는 서버가 보낸 CA의 개인 키로 암호화된 이 인증서를 CA의 공개 키를 사용하여 복호화한다.
4. 클라이언트는 데이터 암호화에 사용할 대칭 키(비밀 키)를 생성한 후 서버의 공개 키로 암호화하여 서버에 보낸다. 여기서 전달된 대칭 키가 SSL handshake의 목적이며, 가장 중요한 수단인 데이터를 실제로 암호화할 비밀 키이다.
5. 클라이언트는 handshake의 클라이언트 부분이 완료되었음을 나타내는 "finished" 메시지를 비밀 키로 암호화하여 서버에 보낸다.
6. 서버는 handshake의 서버 부분이 완료되었음을 나타내는 "finished" 메시지를 비밀 키로 암호화하여 서버에 보낸다.
7. handshake는 종료되고, 이제 이 세션에서 서버와 클라이언트는 공유된 비밀 키를 이용하여 대칭적으로 암호화된 메시지를 교환할 수 있다.
참고
'Dev > Network' 카테고리의 다른 글
[Network] NAT (0) | 2022.09.17 |
---|---|
[Network] SSH와 Telnet의 차이점 (0) | 2022.09.16 |
[Network] Network Layer (0) | 2022.09.14 |
[Network] Transport Layer (0) | 2022.09.13 |
[Network] OSI 7 layers (0) | 2022.09.12 |
댓글