TLS/SSL handshake
HTTPS 통신에서 클라이언트와 서버 간 통신 전에, SSL 인증서로 신뢰성 여부를 판단하기 위해 연결하는 방식을 말한다.
진행 순서
- C : “Client Hello”
- 컴퓨터 버전, 암호 알고리즘 목록, 사용 가능한 압축 방식을 전송한다.
- S : “Server Hello”
- 받은 목록 중에서 암호 알고리즘, 압축 방식을 선택한다 + 세션 ID와 CA에서 사인한 서버의 공개 인증서를 전송한다.
- C
- 서버가 보낸 SSL 인증서가 CA 목록에 있는 지 확인한다.
- SSL이 확인되면 C - S 사이에 사용할 대칭키를 생성하기 위해 난수 바이트를 생성해 서버의 공개키로 암호화하여 전송한다. 이 난수 바이트는 대칭키를 생성할 때 활용된다.
- 만약 2번 단계에서 서버가 클라이언트 인증서를 함께 요구했다면, 클라이언트의 인증서와 클라이언트의 개인키로 암호화된 임의의 바이트 문자열을 함께 보내준다.
- S
- 클라이언트가 보낸 대칭키를 서버의 개인키로 복호화하여, 대칭 마스터 키 생성에 활용한다.
- C : “finished”
- 클라이언트는 handshake 과정이 완료되었다는 “finished” 메시지를 서버에 보내면서, 지금까지 보낸 교환 내역들을 해싱 후 그 값을 대칭키로 암호화하여 같이 담아 보내준다.
- S : “finished”
- 서버도 동일하게 교환 내용들을 해싱한 뒤 클라이언트에서 보내준 값과 일치하는지 확인한다. 일치하면 서버도 “finished” 메시지를 만든 대칭키로 암호화하여 보낸다.
- 클라이언트는 해당 메시지를 대칭키로 복호화하여 서로 통신이 가능한 신뢰받은 사용자라는 것을 인지하고, 앞으로 클라이언트와 서버는 해당 대칭키로 데이터를 주고받을 수 있게 된다.
'Computer Science > Network' 카테고리의 다른 글
OSI 7 Layer - 1 Physical Layer, 2 Data link Layer (0) | 2024.03.17 |
---|---|
CORS란 무엇인가요? (0) | 2024.01.12 |
HTTP & HTTPS (0) | 2023.10.25 |
대칭키 & 비대칭키 (0) | 2023.10.24 |
TCP & UDP (0) | 2023.10.24 |