본문 바로가기
Dev/Network

[Network] SSL handshake

by 흰바다제비 2022. 9. 18.
728x90

파란색 블럭은 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는 종료되고, 이제 이 세션에서 서버와 클라이언트는 공유된 비밀 키를 이용하여 대칭적으로 암호화된 메시지를 교환할 수 있다.

 

 

 


참고

 

An overview of the SSL or TLS handshake

The SSL or TLS handshake enables the SSL or TLS client and server to establish the secret keys with which they communicate. This section provides a summary of the steps that enable the SSL or TLS client and server to communicate with each other. Agree on t

www.ibm.com

 

 

HTTPS 통신과정 쉽게 이해하기 #3(SSL Handshake, 협상)

고대 그리스에서는 타인에게 노출되어서는 안 될 중요한 정보를 보낼 때, 전달하는 이(사자)의 머리를 빡빡 깎아서 중요한 정보를 적은 후 머리가 자라서 글이 보이지 않으면 그제야 상대방에게

aws-hyoh.tistory.com

 

728x90

'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

댓글