[CS] TLS handshake
💭 예상 질문
- TLS Handshake란 무엇인가요?
- TLS Handshake에서 디지털 인증서는 어떤 역할을 하나요?
- TLS Handshake 과정을 간단히 설명해주세요.
- TLS Handshake가 완료된 후 데이터 전송은 어떤 방식으로 이루어지나요?
handshake 과정
- 클라이언트는 서버에게 client hello 메시지를 담아 서버로 보낸다. 이때 클라이언트가 지원하는 프로토콜 버전과 암호화 방식을 담아 함께 보낸다.
- 서버는 세션 ID와 CA 공개 인증서를 server hello 메시지와 함께 담아 응답한다. 통신 이후 사용할 대칭키가 생성되기 전에, CA 인증서에는 클라이언트에서 handshake 과정 속 암호화에 사용할 공개키를 담고 있다.
- 클라이언트 측은 서버에서 보낸 CA 인증서에 대해 유효한 지 CA 목록에서 확인한다.
- 클라이언트는 난수 바이트로 대칭 키를 생성하고 서버의 공개키로 암호화하여 보낸다.
- 만약 2번 단계에서 서버가 클라이언트 인증서를 함께 요구했다면, 클라이언트의 인증서와 클라이언트의 개인키로 암호화된 임의의 바이트 문자열을 함께 보내준다.
- 서버는 클라이언트의 인증서를 확인 후, 대칭키를 자신의 개인키로 복호화 후 대칭 마스터 키 생성에 활용한다.
- 클라이언트는 handshake 과정이 완료되었다는 finished 메시지를 서버에 보내면서, 지금까지 보낸 교환 내역들을 해싱 후 그 값을 대칭키로 암호화하여 같이 담아 보내준다.
- 서버도 동일하게 교환 내용들을 해싱한 뒤 클라이언트에서 보내준 값과 일치하는 지 확인한다. 일치하면 서버도 마찬가지로 finished 메시지를 이번에 만든 대칭키로 암호화하여 보낸다.
- 클라이언트는 해당 메시지를 대칭키로 복호화하여 서로 통신이 가능한 신뢰받은 사용자란 걸 인지하고, 앞으로 클라이언트와 서버는 해당 대칭키로 데이터를 안전하게 주고받을 수 있게 된다.
댓글남기기