TSL/SSL HandShake
클라이언트와 서버 간에 안전한 연결을 설정하기 위한 과정으로 TLS(Transport Layer Security) 또는 SSL(Secure Sockets Layer) 프로토콜에서 사용된다.
TLS는 SSL의 후속 버전으로, SSL 보다 안전하고 강력한 암호화 기능을 제공한다.
TLS/SSL HandShake 과정
- 클라이언트 Hello
- 클라이언트가 서버에게 연결을 시작하기 위해 "client hello" 메시지를 보낸다.
- 이 메시지에는 클라이언트의 TLS/SSL 버전, 지원하는 암호화 알고리즘, 압축 방식 등의 정보가 포함된다.
- 서버 Hello
- 서버는 "client hello" 메시지를 받고, "server hello" 메시지를 생성하여 클라이언트에게 보낸다.
- 이 메시지에는 서버의 TLS/SSL 버전, 선택된 암호화 알고리즘, 압축 방식 등의 정보가 포함된다.
- 또한, 서버는 공개키 인증서와 세션 ID를 클라이언트에게 제공한다.
- 인증서 검증
- 클라이언트는 받은 공개키 인증서의 유효성을 검증한다.
- 클라이언트는 신뢰할 수 있는 인증 기관(CA)의 공개키를 사용하여 인증서의 서명을 확인한다.
- 인증서의 도메인 이름과 실제 서버의 도메인 이름을 비교하여 일치 여부를 확인한다.
- secret key 생성
- 클라이언트는 클라이언트 랜덤 데이터, 서버 랜덤 데이터, 세션 ID, 클라이언트와 서버의 암호화 알고리즘 등을 조합하여 secret key를 생성한다.
- 이 키는 이후 대칭키를 생성하는데 사용된다.
- 클라이언트 인증서 보내기
- 만약 2번 단계에서 서버가 클라이언트 인증서를 추가로 요구했다면, 클라이언트의 인증서와 클라이언트의 개인키로 암호화된 임의의 바이트 문자열을 함께 보낸다.
- 대칭키 생성
- 서버는 클라이언트의 인증서를 확인한 다음, secret key를 자신의 개인 키로 복호화한 후 대칭 마스터 키 생성에 활용한다.
- 클라이언트의 finished 메시지 전송
- 클라이언트는 handshake 과정이 완료되었다는 "finished" 메시지를 서버에 보내면서, 지금까지 보낸 교환 내역들을 해싱 후 그 값을 대칭키로 암호화하여 같이 담아 보낸다.
- 서버의 finished 메시지 전송
- 서버도 교환 내용들을 해싱하고 클라이언트에서 보내준 값과 일치하는지 확인한다. 일치한다면 "finished" 메시지를 대칭키로 암호화하여 보낸다.
- 메시지 교환
- 클라이언트는 해당 메시지를 대칭키로 복호화하여 서로 통신이 가능하며 신뢰받는 사용자라는 것을 확인하고 앞으로 클라이언트와 서버는 해당 대칭키로 데이터를 주고 받을 수 있게 된다.
[참고] https://gyoogle.dev/blog/computer-science/network/TLS%20HandShake.html
'Computer Science > Network' 카테고리의 다른 글
[Network] 로드 밸런싱 (Load Balancing) (0) | 2023.07.16 |
---|---|
[Network] HTTP & HTTPS (0) | 2023.07.07 |
[Network] 대칭키 & 비대칭키 (0) | 2023.07.07 |
[Network] UDP (User Datagram Protocol) (0) | 2023.06.30 |
[Network] TCP/IP 흐름제어 & 혼잡제어 (0) | 2023.06.30 |