브라우저에서 HTTPS 통신을 하는 방법

8/9/2024

SSL/TLS 핸드셰이크 과정 이해하기

SSL/TLS 핸드셰이크는 클라이언트와 서버 간의 안전한 통신을 설정하기 위해 수행되는 일련의 단계입니다. 이 과정은 양측이 서로를 확인하고, 이후의 데이터 전송을 암호화할 세션 키를 생성하는 데 필요한 중요한 절차를 포함합니다. 아래는 SSL/TLS 핸드셰이크 과정의 주요 단계입니다.

1. 클라이언트 헬로(Client Hello)

클라이언트가 서버에 연결을 시도할 때, 첫 번째로 "Client Hello" 메시지를 보냅니다. 이 메시지에는 다음과 같은 정보가 포함됩니다:

  • 클라이언트가 지원하는 TLS 버전
  • 사용 가능한 암호화 알고리즘(사이퍼 스위트) 목록
  • 클라이언트 난수(무작위 바이트 문자열)

2. 서버 헬로(Server Hello)

서버는 "Server Hello" 메시지로 클라이언트의 요청에 응답합니다. 이 메시지에는 다음과 같은 정보가 포함됩니다:

  • 서버의 SSL 인증서
  • 서버가 선택한 TLS 버전
  • 서버가 선택한 암호화 알고리즘
  • 서버 난수(무작위 바이트 문자열)

3. 서버 인증서 검증

클라이언트는 서버로부터 받은 SSL 인증서를 검토합니다. 인증서는 신뢰할 수 있는 인증 기관(CA)에 의해 발급되었으며, 클라이언트는 이를 통해 서버가 실제로 인증서에 명시된 도메인의 소유자인지를 확인합니다.

4. 예비 마스터 시크릿 전송(Client Key Exchange)

클라이언트는 "Client Key Exchange" 메시지를 통해 예비 마스터 시크릿(무작위 바이트 문자열)을 생성합니다. 이 시크릿은 서버의 공개 키를 사용해 암호화되며, 서버에 전송됩니다. 서버의 공개 키는 서버의 SSL 인증서에 포함되어 있습니다.

5. 예비 마스터 시크릿 복호화

서버는 자신의 개인 키를 사용하여 클라이언트가 보낸 예비 마스터 시크릿을 복호화합니다. 이 과정에서 개인 키는 오직 서버만이 가지고 있어야 하며, 이를 통해 클라이언트와 서버 간의 기밀성을 유지합니다.

6. 세션 키 생성

클라이언트와 서버는 서로의 난수(클라이언트 난수, 서버 난수)와 예비 마스터 시크릿을 조합하여 동일한 세션 키를 생성합니다. 이 세션 키는 대칭 키 암호화를 위해 사용되며, 이후의 데이터 전송을 암호화하는 데 활용됩니다.

7. 클라이언트 완료 메시지 전송(Client Finished)

클라이언트는 생성된 세션 키를 사용해 암호화된 "Finished" 메시지를 서버에 전송합니다. 이 메시지는 클라이언트 측에서 핸드셰이크 과정이 성공적으로 완료되었음을 나타냅니다.

8. 서버 완료 메시지 전송(Server Finished)

서버 또한 세션 키를 사용하여 암호화된 "Finished" 메시지를 클라이언트에 전송합니다. 이로써 양측 모두 핸드셰이크가 완료되었음을 확인합니다.

위의 과정을 통해 클라이언트와 서버는 안전한 통신 채널을 설정하게 됩니다. 이후의 모든 데이터 전송은 생성된 세션 키를 사용하여 암호화되며, 이를 통해 기밀성과 무결성을 보장합니다. SSL/TLS 핸드셰이크는 웹 보안에서 매우 중요한 역할을 합니다.

© 2025 Mingu Kim. All rights reserved.