TLS/SSL Handshake는 클라이언트와 서버가 안전한 통신을 설정하기 위해 서로 인증하고, 암호화된 세션을 시작하는 과정이다. 이 과정에서 대칭 키를 생성하고 안전하게 공유하기 위한 메커니즘을 사용하여 이후의 데이터 통신을 암호화한다.
ㅇ 핸드쉐이크의 목적
- 인증
클라이언트가 서버의 신뢰성을 확인하고, 서버 인증서를 통해 서버가 신뢰할 수 있는 엔티티임을 증명 - 암호화된 통신 채널 설정
대칭 암호화 키를 안전하게 생성하고 공유하여, 그 이후의 통신이 암호화될 수 있게한다. - 무결성 보장
통신 중 데이터가 변경되지 않았음을 보장한다.
ㅇ 핸드쉐이크의 과정
- 클라이언트는 서버에게 client hello 메세지를 담아 서버로 보낸다.
이 때 암호화된 정보를 함께 담는다. (버전, 암호 알고리즘, 압축 방식 등) - 서버는 클라이언트가 보낸 암호 알고리즘과 압축 방식을 받고 세션 ID와 CA 공개 인증서를 server hello 메세지에 담아 응답한다.
- 클라이언트 측은 서버에서 보낸 CA인증서에 대해 유효한지 CA 목록에서 확인하는 과정을 진행한다.
- CA 인증서에 대한 신뢰성이 확보되었다면, 클라이언트는 난수 바이트를 생성하여 서버의 공개키로 암호화한다. 이 난수 바이트는 대칭 키를 정하는데 사용이 되고, 앞으로 서로 메세지를 통신할 때 암호화하는데 사용된다.
- 만약 2번 단계에서 서버가 클라이언트 인증서를 함께 요구했다면, 클라이언트의 인증서와 클라이언트의 개인키로 암호화된 임의의 바이트 문자열을 함께 보낸다.
- 서버는 클라이언트의 인증서를 확인 후 난수 바이트를 자신의 개인키로 복호화 후 대칭 마스터 키 생성에 활용한다.
- 클라이언트는 handshake 과정이 완료되었다는 finished 메세지를 서버에 보내면서, 지금까지 보낸 교환 내역들을 해싱 후 그 값을 대칭키로 암호화하여 같이 담아 보내준다.
- 서버도 동일하게 교환 내용들을 해싱한 뒤 클라이언트에서 보내준 값과 일치하는지 확인한다. 일치하면 서버도 마찬가지로 finished 메세지를 이번에 만든 대칭키로 암호화하여 보낸다.
- 클라이언트는 해당 메세지를 대칭키로 복호화하여 서로 통신이 가능한 신뢰받은 사용자란 걸 인지하고, 앞으로 클라이언트와 서버는 해당 대칭키로 데이터를 주고 받을 수 있게 된다.
'Network' 카테고리의 다른 글
CS 네트워크 Blocking, Non-blocking, Sync, Async (0) | 2024.10.17 |
---|---|
CS 네트워크 로드밸런싱 (1) | 2024.10.17 |
CS 네트워크 HTTP & HTTPS (0) | 2024.10.15 |
CS 네트워크 대칭키 & 공개키(비대칭키) (1) | 2024.10.15 |
CS 네트워크 TCP & UDP (0) | 2024.10.15 |