HTTPS 통신을 위해서는 클라이언트가 서버 인증서를 확인하고 서로의 암호화 규칙을 정하여 통신을 시작해야한다.
이 과정은 SSL/TLS Handshake라고 불린다.
이는 대칭 키와 공개 키의 단점을 보완하고 장점을 살리기 위함이다.
대칭 키 암호화 방식은 비용이 싸다는 장점이 있지만, 비밀스럽게 키를 공유해야 한다.
공개 키 암호화 방식은 공개 키가 공유되어도 서버만 복호화 가능하지만 비용이 비싸다.
클라이언트는 서버에 Client Hello
로 연결을 시도하며 자신이 사용 가능한 암호화 방식들을 담아 보낸다. 이는 Cipher Suite에 들어있다.
서버는 클라이언트에 Server Hello
로 응답하며 요청한 암호화 알고리즘들 중 하나를 선택하여 알린다.
Certificate
는 서버가 자신의 인증서를 클라이언트에 전달하는 것이다. 인증서는 CA의 공개 키로 복호화가 가능하며 이를 통해 진위 여부를 판별할 수 있다.
만약 인증서에 서버의 공개 키가 없다면 Server Key Exchange
로 전달하며 생략 가능하다. Client Hello
에 따른 모든 응답이 끝나면 Server Hello Done
을 보낸다.
클라이언트는 서버와 둘만 알고있는 암호화 방식을 정하여(대칭 키) 서버의 공개키로 암호화해 서버로 보낸다. 이 과정을 Client Key Exchange
라 한다.
클라이언트, 서버 모두 Change Ciper Spec
으로 준비 완료를 알리고 Finished
로 종료한다.