HTTPS에서 클라이언트와 서버간 통신 전 SSL 인증서로 신뢰성 여부를 판단하기 위해 연결하는 방식
순서
클라이언는 서버에게 client hello
메세지를 담아 서버로 전송.
이 때 암호화된 정보(버전, 암호알고리즘, 압축방식 등)을 담는다.
서버는 클라이언트가 보낸 암호알고리즘과 압축방식을 받고, 세션ID
와 CA인증서
를 server hellp
메세지와 함께 담아 응답.
이 CA인증서
에는 handshake 과정 속 암호화에 사용할 공개키를 담고 있다.
클라이언트는 CA인증서
유효성 검사 진행 ( 자신의 CA 목록을 확인하여 )
CA인증서
신뢰성 확보되었다면, 클라이언트는 난수 바이트를 생성하여 서버의 공개키로 pre master secret 키
생성
이는 대칭키를 정하는 데 사용이 되고, 앞으로 서로 메시지를 통신할 때 암호화하는데 사용된다.
만약 2번단계에서 서버가 클라이언트 인증서를 함께 요구했다면,
클라이언트의 인증서와 클라이언트의 개인키로 암호화된 pre master secret 키
를 보낸다.
서버는 클라이언트의 인증서를 확인 후 , 수신한 pre master secret 키
를 자신의 개인키(비밀키)로 복호화 후
대칭 마스터 키
생성
클라이언트는 handshake 과정이 완료되었다는 finished
메시지를 서버에 보내면서, 지금까지 보낸 교환 내역들을 해싱 후 그 값을 대칭키로 암호화하여 같이 담아 보낸다.
서버도 동일하게 교환 내용들을 해싱 후 클라이언트에서 보내준 값과 일치하는 지 확인한다. 일치하면 서버도 마찬가지로 finished
메시지를 대칭 마스터 키
로 암호화하여 보낸다.
클라이언트는 해당 메시지를 대칭키로 복호화하여 서로 통신이 가능한 신뢰받은 사용자란 걸 인지하고, 클라이언트와 서버는 앞으로 해당 대칭키 ( 대칭 마스터키
) 로 데이터를 주고받을 수 있게 된다.
이 대칭 마스터 키
를 이용하여 session key
를 만들게 된다.
이후 데이터를 주고 받을 떄 session key를 대칭키 방식으로 이용하여 통신하게 됩니다.
통신이 끝나면 세션키 폐기한다.