[ODOP:15]Handshake TLS 1.2
TLS 1.2 에서 Handshake 를 하는 과정을 기록 합니다.
동작 시점
사용자가 HTTPS 를 통해 웹 사이트를 탐색 하고 브라우저가 처음 해당 웹 사이트의 원본 서버를 쿼리 할 때 동작 전송 계층과 애플리케이션 계층 사이에서 동작하며 TCP 는 TLS 를 Application 으로 인식하며 Application 은 TLS 를 TCP 로 인식한다
TLS 핸드 셰이크는 TCP 핸드셰이크를 통해 TCP 연결이 수립 된 후 발생한다
핸드셰이크 단계
아래의 과정은 총 4번의 왕복으로 완수됨 상세한 설명을 위해 총 9 단계로 나누어 설명
- TCP 핸드셰이크로 인해 TCP 연결 수립
- Client Hello (Client -> Server)
- 'hello' 메시지를 보내며 핸드셰이크 시작
- 클라는 자신이 지원하는 [[Cipher suite]] list(알고리즘 집합) 를 서버에게 전송
- TLS 버전, 암호화 제품군, 클라이언트 무작위(바이트 문자열. 대칭 키 생성에 사용 됨)
- Server Hello (Server -> Client)
- 서버 자신의 TLS 인증서, 서버에서 선택 한 암호화 제품군, 서버에서 생성 한 무작위 바이트 문자열을 포함하여 클라이언트에게 전달
- Certificate (Client) :
- 서버에서 받은 TLS 인증서의 발행 기관을 통해 검증
- 보통 로컬에 저장 된 신뢰된 인증 기관(CA) 목록과 비교하여 이루어짐
- 인증서 변조, 유효성 체크
- 서버에서 사용하는 공개 키 습득
- 서버에서 받은 TLS 인증서의 발행 기관을 통해 검증
- Premaster secret (Client -> Server)
- premaster secret(예비 마스터 암호) 라고 하는 무작위 바이트 문자열을 하나 더 전송
- premaster secret 는 공개 키로 암호화 되어 있음
- 서버가 소유한 개인 키 로만 해독 가능
- Private key used (Server)
- 서버가 소유한 공개키로 premaster secret(예비 마스터 암호) 를 해독
- Session key created (Server, Client)
서버 무작위
,클라이언트 무작위
,Premaster Secret(예비 마스터 암호)
를 사용하여 세션 키 생성
- Client is ready(Client -> Server)
- 클라이언트가 세션 키로 암호화 된
'finished'
메시지를 서버로 전송
- 클라이언트가 세션 키로 암호화 된
- Server is ready(Server -> Client)
- 서버가 세션 키로 암호화 된
'finished'
메시지를 클라이언트로 전송
- 서버가 세션 키로 암호화 된
- Secure symmetric encryption achieved
- 핸드셰이크가 완료 되었으며, 세션 키를 사용하여 통신이 계속 됨