HTTPS에서 클라이언트와 서버간 통신 전 SSL 인증서로 신뢰성 여부를 판단하기 위해 연결하는 방식
- 클라이언트는 서버에게 client hello 라는 메시지를 담아 서버로 보낸다. 이때 암호화된 정보를 함께 담는데 버전, 암호 알고리즘, 압축 방식 등을 담는다.
- 서버는 클라이언트가 보낸 암호 알고리즘과 압축 방식을 받아 세션ID와 CA(공개인증서)를 server hello 메시지와 함께 담아 응답한다. 이 CA인증서에는 앞으로 통신 이후 사용할 대칭키가 생성되기 전, 클라이언트에서 handshaking 과정 속 암호화에 사용할 공개키를 담고 있다.
- 클라이언트 측은 서버에서 보낸 CA인증서에 대해 유효한지 CA목록에서 확인하는 과정을 진행
- CA인증서에 대한 신뢰성이 확보되었다면 클라이언트는 난수 바이트를 생성하여 서버의 공개키로 암호화한다. 이 난수 바이트는 대칭키를 정하는데 사용이 되며 앞으로 서로 메시지를 통신할 때 암호화하는데 사용
- 2번 단계에서 서버가 클라이언트 인증서를 함께 요구했다면 클라이언트의 인증서와 클라이언트의 개인키로 암호화된 임의의 바이트 문자열을 함께 보낸다.
- 서버는 클라이언트의 인증서를 확인 후 난수 바이트를 자신의 개인키로 복호화 후 대칭 마스터 키 생성에 활용한다.
- 클라이언트는 handshaking 과정이 완료되었다는 finished 메시지를 서버에 보내면서 지금까지 보낸 교환 내역들을 해싱 후 그 값을 대칭키로 암호화하여 같이 담아 보내준다.
- 서버도 동일하게 교환 내용들을 해싱한 뒤 클라이언트에서 보내준 값과 일치하는지 확인하고 일치한다면 서버도 마찬가지로 finished 메시지를 이번에 만든 대칭키로 암호화하여 보낸다.
- 클라이언트는 해당 메시지를 대칭키로 복호화하여 서로 통신이 가능한 신뢰받는 사용자란걸 인지하고 앞으로 클라이언트와 서버는 해당 대칭키로 데이터를 주고 받을 수 있게 된다.
'기초 CS 정리' 카테고리의 다른 글
Blocking/Non-Blocking 과 Synchronous/Asynchronous (0) | 2023.02.11 |
---|---|
로드 밸런싱(Load Balancing) (0) | 2023.02.10 |
HTTP & HTTPS (0) | 2023.02.08 |
대칭키와 공개키 (0) | 2023.02.07 |
TCP/IP의 흐름제어, 혼합제어 (1) | 2023.02.05 |