Backend/Network

TLS Handshaking - 알기 쉽게 정리

petitCoding 2011. 5. 13. 10:36


TLS 에서 Server-Client간 연결 수립 과정을 정리하였다.

TLS Handshake 프로토콜에서는 다음 단계들을 거친다.

 


1.
클라이언트는 서버에게 "Client hello" 메시지를 전달한다. 이때, 클라이언트는 Cipher suits에서 지원하는 랜덤 값을 같이 첨부하여 보낸다.

2. 서버는 "Server hello" 메시지를 클라이언트에게 전송해 준다. 이때 서버도 랜덤 값을 같이 보낸다.

3. 서버는 자신의 인증서를 클라이언트에 보내어 클라이언트가 인증할 수 있도록 한다. 또한 이때,  클라이언트에게 인증서 양식을 요청할 수 있다.

4. 만약 서버가 클라이언트에게 인증서를 요청하였다면, 클라이언트는  인증서를 서버에게 전송한다.

5. 클라이언트는 서버가 준 인증서의 공개키를 가지고 임의의 Pre-Master Secret을 암호화 한 뒤, 이것을 서버에게 전송한다.

6. 서버가 Pre-Master Secret을 받으면, 서버와 클라이언트는 이 Pre-Master Secret을 가지고 각각 Master Secret과 세션 키를 생성한다.

7. 클라이언트는 새로 생성된 세션 키를 해싱 및 메시지 암호화에 사용하기 위해 "Change cipher spec"을 서버에게 전송한다. 이 때, "Client finished" 메시지도 함께 전송한다.

8. 서버는 "Change cipher spec"을 받은 뒤 클라이언트에게 "Server finished"메시지를 전송한다.


 * Change cipher spec : Record Layer에서 데이터를 암호화 할 때, 클라이언트-서버 간에 약속한 암호화 알고리즘을 사용한다는 것을 알려준다.



TLS 세션 재사용 하기

 

 
1.
클라이언트는 서버에게 "Client hello" 메시지를 전송한다. 이 때, 새션이 재 시작될 세션 ID를 사용한다.

2. 서버는 자신의 세션 캐시 목록에서 클라이언트의 세션 ID와 매칭되는 것이 있는지 확인한다. 만약 있다면, 서버는 연결을 재시작 할수 있으므로 "Server hello" 메시지를  클라이언트에게 전송한다.
만약 세션 ID를 찾지 못한다면, 서버는 새로운 세션 ID를 생성하며, 클라이언트-서버 간 새로 연결이 수립될 때처럼 핸드셰이크가 이루어 진다.

3.
클라이언트와 서버는 "Change cipher spec"을 다시 교환해야 하며, 이어서 "Client finished", "Server finished" 메시지를 주고 받는다. 

4. 이제 클라이언트-서버 간에 연결이 다시 이루어 졌고, 암호화 된 채널을 이용해 데이터를 교환할 수 있다.


반응형

'Backend > Network' 카테고리의 다른 글

SNMP Trap  (0) 2011.05.20
SNMP - MIB 정보 보기  (0) 2011.05.20
ARP  (0) 2011.05.13
Apach Bench - 아파치 서버 성능 검사 툴  (0) 2011.05.13
예약된 IP주소  (0) 2011.05.13