- TCP 3 Way Handshake
- 클라이언트는 서버에게 자신이 지원하는 Cipher Suite를 서버에게 알려준다. (Client Hello)
- 서버는 클라이언트에게 자신이 지원하는 Cipher Suite를 응답해 준다. (Server Hello 시작)
- 서버는 RSA 공개키가 포함된 서버 인증서를 클라이언트에게 전달한다.
- 만약 서버가 클라이언트 인증서를 요구할 것이라면, 이에 대한 요청도 함께 전달한다. (Server Hello 완료)
- 클라이언트는 인증서를 요구받은 경우 인증서를 서버에게 전송한다.
- 클라이언트는 전송받은 서버 인증서를 검증(각종 속성의 일치여부, 해지여부, Root CA 체인 검증 등)한다.
- 클라이언트는 대칭 암호화에 사용할 PreMasterSecret을 생성하여 서버의 공개키로 암호화해 서버에 전송한다.
- 서버는 수신한 PreMasterSecret를 자신의 개인키로 복호화한다.
- 서버는 협상된 최종 Cipher를 적용하여 통신할 것을 알리는 종결 메시지를 발송한 후 데이터 전송단계로 넘어간다.
- 클라이언트도 협상된 최종 Cipher를 적용하여 통신할 것을 알리는 종결 메시지를 발송한 후 데이터 전송단계로 넘어간다.
- 이후의 데이터 전송은 PreMasterSecret으로부터 생성된 세션 키를 통해 암/복호화된다.
참고자료