1. What is TLS?
TLS(Transport Layer Security) 통신 프로토콜은 네트워크에서 데이터를 안전하게 주고받기 위한 암호화 프로토콜로 실제 데이터를 주고 받기 전 암호화 기본 요소에 동의하는 HandShake 과정을 통해 안전한 데이터 교환을 진행한다.
2. TLS HandShake Overview
TCP 연결이 완료된 이후부터 TLS Handshake가 시작된다. 전체 흐름은 다음과 같다:
- ClientHello (Client ➡️ Server)
- ServerHello + Certificate + ServerHelloDone (Server ➡️ Client)
- Client Key Exchange (Pre-Master Secret Key Share) (Client ➡️ Server)
- ChangeCipherSpec + Finished (Client ↔️ Server)

해당 과정이 수행된 이후 모든 데이터는 합의된 알고리즘과 세션 키를 사용해 암호화되어 전송된다.
3. TLS Handshake in Detail
3.1. ClientHello (Client ➡️ Server)
클라이언트는 TLS 연결을 시작하기 위해 ClientHello 메시지를 서버에 전송한다. ClientHello 메시지는 서버에게 클라이언트가 지원가능한 버전, 방식, 조건 등을 전달하는 역할을 하며, 서버가 어떤 암호화 방식과 프로토콜을 사용할지 결정할 수 있도록 정보를 제공하는 데 중점을 둔다.
[ClientHello에 포함되는 주요 필드]
- Version: 지원하는 TLS 버전
- Session ID: 세션 재사용을 위한 ID
- Client Random: 난수 (키 생성에 사용)
- Cipher Suites: 지원하는 암호화 알고리즘 목록
- Compression Methods: 압축 방식
- Extensions: 다양한 기능 확장을 위한 필드
- SNI (Server Name Indication): 요청 도메인 정보
- Supported Groups: 키 교환에 사용 가능한 그룹
- Signature Algorithms: 서명 알고리즘
- ALPN (Application-Layer Protocol Negotiation): HTTP/2 등 선택
- Supported Versions: TLS 1.2, 1.3 등
- Session Ticket: 세션 재개에 사용
- Key Share: TLS 1.3 키 교환용 공개키

3.2. ServerHello + Certificate (Server ➡️ Client)
서버는 위 정보를 기반으로 선택한 옵션들을 포함한 ServerHello를 전송하고, 자신을 인증하기 위한 Certificate(인증서)도 함께 보낸다.
[ServerHello 패킷에 포함되는 주요 필드]
- Version: 서버가 선택한 TLS 버전
- Session ID: 세션 식별자 (ClientHello에 대한 응답으로 echo)
- Server Random: 키 생성을 위한 랜덤 값
- Cipher Suite: 서버가 선택한 암호화 알고리즘
- Compression Method: 선택된 압축 방식 (대부분 NULL)
- Extensions: 다양한 기능 확장을 위한 필드
- 클라이언트와 협의된 확장 옵션들 (SNI echo, ALPN, Key Share 등)

3.3. Client Key Exchange (Pre-Master Secret Key Share)
Client Key Exchange 단계에서는 클라이언트가 Pre-Master Secret Key를 생성하고 이를 서버의 공개키로 암호화한 뒤 전송한다.
🔑 Pre-Master Secret Key란?
Pre-Master Secret Key는 TLS 세션 중 최종 세션 키를 생성하기 위한 중간 키 값이다. 해당 값은 클라이언트가 임의로 생성하며, 서버와 클라이언트가 이미 교환한 Client Random과 Server Ransom 값과 함께 사용되어 최종적으로는 Master Secret, Session Key(대칭키)로 파생된다.
3.4. ChangeCipherSpec + Finished
이제 클라이언트와 서버는 서로 암호화 설정을 마쳤다는 것을 알리고, 암호화된 통신을 시작할 준비를 한다.
- ChangeCipherSpec 메시지를 통해 이후부터는 암호화된 메시지를 사용하겠다고 선언
- 이어서 Finished 메시지를 주고 받으며 Handshake가 정상적으로 완료되었음을 검증
Reference
1. Exploring JARM An Active TLS Fingerprinting Algorithm - Trend Micro(Link)
2. Monitor TLS/SSL: Certificates, Ciphers, Expiration and Spoofing - Exoprise(Link)
3. TLS Fingerprinting with JA3 and JA3S - SalesForce(Link)
'Network' 카테고리의 다른 글
NAT(Network Address Translation)란? (0) | 2023.11.21 |
---|
1. What is TLS?
TLS(Transport Layer Security) 통신 프로토콜은 네트워크에서 데이터를 안전하게 주고받기 위한 암호화 프로토콜로 실제 데이터를 주고 받기 전 암호화 기본 요소에 동의하는 HandShake 과정을 통해 안전한 데이터 교환을 진행한다.
2. TLS HandShake Overview
TCP 연결이 완료된 이후부터 TLS Handshake가 시작된다. 전체 흐름은 다음과 같다:
- ClientHello (Client ➡️ Server)
- ServerHello + Certificate + ServerHelloDone (Server ➡️ Client)
- Client Key Exchange (Pre-Master Secret Key Share) (Client ➡️ Server)
- ChangeCipherSpec + Finished (Client ↔️ Server)

해당 과정이 수행된 이후 모든 데이터는 합의된 알고리즘과 세션 키를 사용해 암호화되어 전송된다.
3. TLS Handshake in Detail
3.1. ClientHello (Client ➡️ Server)
클라이언트는 TLS 연결을 시작하기 위해 ClientHello 메시지를 서버에 전송한다. ClientHello 메시지는 서버에게 클라이언트가 지원가능한 버전, 방식, 조건 등을 전달하는 역할을 하며, 서버가 어떤 암호화 방식과 프로토콜을 사용할지 결정할 수 있도록 정보를 제공하는 데 중점을 둔다.
[ClientHello에 포함되는 주요 필드]
- Version: 지원하는 TLS 버전
- Session ID: 세션 재사용을 위한 ID
- Client Random: 난수 (키 생성에 사용)
- Cipher Suites: 지원하는 암호화 알고리즘 목록
- Compression Methods: 압축 방식
- Extensions: 다양한 기능 확장을 위한 필드
- SNI (Server Name Indication): 요청 도메인 정보
- Supported Groups: 키 교환에 사용 가능한 그룹
- Signature Algorithms: 서명 알고리즘
- ALPN (Application-Layer Protocol Negotiation): HTTP/2 등 선택
- Supported Versions: TLS 1.2, 1.3 등
- Session Ticket: 세션 재개에 사용
- Key Share: TLS 1.3 키 교환용 공개키

3.2. ServerHello + Certificate (Server ➡️ Client)
서버는 위 정보를 기반으로 선택한 옵션들을 포함한 ServerHello를 전송하고, 자신을 인증하기 위한 Certificate(인증서)도 함께 보낸다.
[ServerHello 패킷에 포함되는 주요 필드]
- Version: 서버가 선택한 TLS 버전
- Session ID: 세션 식별자 (ClientHello에 대한 응답으로 echo)
- Server Random: 키 생성을 위한 랜덤 값
- Cipher Suite: 서버가 선택한 암호화 알고리즘
- Compression Method: 선택된 압축 방식 (대부분 NULL)
- Extensions: 다양한 기능 확장을 위한 필드
- 클라이언트와 협의된 확장 옵션들 (SNI echo, ALPN, Key Share 등)

3.3. Client Key Exchange (Pre-Master Secret Key Share)
Client Key Exchange 단계에서는 클라이언트가 Pre-Master Secret Key를 생성하고 이를 서버의 공개키로 암호화한 뒤 전송한다.
🔑 Pre-Master Secret Key란?
Pre-Master Secret Key는 TLS 세션 중 최종 세션 키를 생성하기 위한 중간 키 값이다. 해당 값은 클라이언트가 임의로 생성하며, 서버와 클라이언트가 이미 교환한 Client Random과 Server Ransom 값과 함께 사용되어 최종적으로는 Master Secret, Session Key(대칭키)로 파생된다.
3.4. ChangeCipherSpec + Finished
이제 클라이언트와 서버는 서로 암호화 설정을 마쳤다는 것을 알리고, 암호화된 통신을 시작할 준비를 한다.
- ChangeCipherSpec 메시지를 통해 이후부터는 암호화된 메시지를 사용하겠다고 선언
- 이어서 Finished 메시지를 주고 받으며 Handshake가 정상적으로 완료되었음을 검증
Reference
1. Exploring JARM An Active TLS Fingerprinting Algorithm - Trend Micro(Link)
2. Monitor TLS/SSL: Certificates, Ciphers, Expiration and Spoofing - Exoprise(Link)
3. TLS Fingerprinting with JA3 and JA3S - SalesForce(Link)
'Network' 카테고리의 다른 글
NAT(Network Address Translation)란? (0) | 2023.11.21 |
---|