TLS handshake

이상우·2022년 1월 5일
0

TLS handshake란?

TLS는 안전한 인터넷 통신을 위한 암호화 프로토콜이다. 그리고 TLS 핸드셰이크는 TLS 암호화를 사용하는 통신 세션을 실행하는 프로세스이다. 통신 양측은 TLS 핸드셰이크 중에 메시지를 교환하여 서로를 인식하고, 서로를 검증하며, 사용할 암호화 알고리즘을 구성하고, 세션 키를 합의한다. 오래전에는 SSL(Secure Sockets Layer)이라고 하였지만, TLS(Transport Layer Security)로 대체되었다.

TLS handshake 발생 시점

TLS 핸드셰이크는 사용자가 HTTPS를 통해 웹 사이트를 탐색하고 브라우저가 처음 해당 웹 사이트의 원본 서버를 쿼리하기 시작할 때마다 발생한다. 다른 통신이 API 호출 및 HTTPS를 통한 DNS 쿼리를 포함하는 HTTPS를 사용할 때에도 항상 TLS 핸드셰이크가 발생한다. TLS 핸드셰이크는 TCP 연결이 TCP 핸드셰이크를 통해 열린 후에 발생한다.

*DNS란?
우리는 인터넷을 이용하여 검색이나 웹 서핑 , 이메일 등을 사용할 때 도메인 이름(www. Naver. com)을 웹 브라우저의 주소창에 입력하고 네이버에 접속을 한다. 즉 실제 naver. com 서버는 숫자로 구성된 IP 주소로 통신하지만, 우리는 기억하기 쉬운 도메인 이름을 사용하는 것 그럼 우리가 입력한 도메인 주소(www. naver .com)를 숫자인 IP 주소로 변환하는 과정이 필요한데 이것을 담당하는 시스템이 DNS라고 한다.

TLS handshake가 이루어지는 단계

1.'client hello' 메시지: 클라이언트가 서버로 "헬로" 메시지를 전송하면서 핸드셰이크를 개시한다. 이 메시지에는 클라이언트가 지원하는 TLS 버전, 지원되는 암호 제품군, 그리고 "클라이언트 무작위"라고 하는 무작위 바이트 문자열이 포함된다.

2.'server hello' 메시지: 클라이언트 헬로 메시지에 대한 응답으로 서버가 서버의 SSL 인증서, 서버에서 선택한 암호 제품군, 그리고 서버에서 생성한 또 다른 무작위 바이트 문자열인 "서버 무작위"를 포함하는 메시지를 전송한다.

3.인증: 클라이언트가 서버의 SSL 인증서를 인증서 발행 기관을 통해 검증한다. 이를 통해 서버가 인증서에 명시된 서버인지, 그리고 클라이언트가 상호작용 중인 서버가 실제 해당 도메인의 소유자인지를 확인한다.

4.예비 마스터 암호: 클라이언트가 "예비 마스터 암호"라고 하는 무작위 바이트 문자열을 하나 더 전송한다. 예비 마스터 암호는 공개 키로 암호화되어 있으며, 서버가 개인 키로만 해독할 수 있다. (클라이언트는 서버의 SSL 인증서를 통해 공개 키를 받는다.)

5.개인 키 사용: 서버가 예비 마스터 암호를 해독한다.

6.세션 키 생성: 클라이언트와 서버가 모두 클라이언트 무작위, 서버 무작위, 예비 마스터 암호를 이용해 세션 키를 생성한다. 모두 같은 결과가 나와야 한다.

7.클라이언트 준비 완료: 클라이언트가 세션 키로 암호화된 "완료" 메시지를 전송한다.

8.서버 준비 완료: 서버가 세션 키로 암호화된 "완료" 메시지를 전송한다.

9.안전한 대칭 암호화 성공: 핸드셰이크가 완료되고, 세션 키를 이용해 통신이 계속 진행된다.

참고 사이트

profile
구상한것을 구현할 수 있는 개발자가 되고 싶습니다.

0개의 댓글