TLS/SSL Handshake
TLS(Transport Layer Security)와 SSL(Secure Sockets Layer)은 인터넷 통신에서 데이터의 기밀성과 무결성을 보장하기 위한 보안 프로토콜
TLS는 SSL의 업그레이드된 버전
- 클라이언트와 서버 간에 안전한 통신을 설정하기 위해 사용됨
TLS/SSL Handshake의 사용 사례
- 웹 브라우징 : HTTPS를 통해 웹사이트에 접속할 때, TLS는 데이터를 암호화하여 기밀성을 보장함
- 이메일 전송 : IMAP, POP3, SMTP와 같은 프로토콜을 사용하는 이메일 클라이언트에서 TLS는 STARTTLS 명령어를 사용하여 보안을 추가함
- VPN 연결 : 원격 액세스를 위한 안전한 터널링을 통해 기밀성과 무결성을 유지함
- VoIP 통신 : 안전한 음성 및 화상 통화를 위한 암호화를 제공함
TLS/SSL Handshake의 작동 방식

- 클라이언트 Hello
- 클라이언트 시작 : 클라이언트(예: 웹 브라우저)는 TLS/SSL 연결을 시작하기 위해 서버에 ClientHello 메시지를 보냄
- 메시지 내용
- 클라이언트가 지원하는 TLS 버전
- 사용할 수 있는 Cipher Suites(암호화 알고리즘 목록, 예: RSA, ECDSA)
- 클라이언트가 생성한 무작위 값(Random Value)
Client -> Server: ClientHello
- 서버 Hello
- 서버 응답 : 서버는 ServerHello 메시지를 통해 응답함
- 메시지 내용
- 선택된 TLS 버전
- 선택된 Cipher Suite
- 세션 ID(Session ID)
- 서버가 생성한 무작위 값(Random Value)
Server -> Client: ServerHello
- 서버 인증 및 키 교환
- 서버 인증서 전송 : 서버는 클라이언트에게 자신의 디지털 인증서(공개 키 함)를 전송함. 이 인증서는 클라이언트가 서버의 신원을 확인하는 데 사용됨
- 서버 키 교환 : 서버는 선택된 암호화 알고리즘에 따라 키 교환 메커니즘을 사용하여 클라이언트에게 메시지를 보냄
- 서버 완료 : 서버는 ServerHelloDone 메시지를 보내 핸드쉐이크의 해당 단계를 완료함
Server -> Client: Certificate, ServerKeyExchange, ServerHelloDone
- 클라이언트 키 교환
- 클라이언트 확인 : 클라이언트는 서버의 인증서를 확인함
- Pre-Master Secret 전송 : 클라이언트는 서버의 공개 키를 사용하여 암호화된 Pre-Master Secret을 서버에 전송함. 이는 이후 세션 키를 생성하는데 사용됨
Client -> Server: ClientKeyExchange
- 세션 키 생성
- 세션 키 계산 : 클라이언트와 서버는 Pre-Master Secret과 양쪽의 랜덤 값을 사용하여 동일한 세션 키를 독립적으로 생성함
- 세션 키 사용 준비 : 클라이언트와 서버는 ChangeCipherSpec 메시지를 교환하여 세션 키를 사용해 암호화된 통신을 시작함. 이어서 Finished 메시지를 보내 핸드쉐이크가 성공적으로 완료되었음을 확인함
Client -> Server: ChangeCipherSpec, Finished
Server -> Client: ChangeCipherSpec, Finished
- 안전한 통신 시작
- 데이터 암호화 전송 : 클라이언트와 서버는 이제 생성된 세션 키를 사용하여 모든 후속 데이터를 암호화하고 복호화하여 안전한 통신을 수행함
Client <-> Server: Encrypted Data Communication
용어
- TLS (Transport Layer Security)
- 인터넷에서 데이터가 안전하게 전송되도록 보호하는 보안 기술
- 웹사이트를 HTTPS로 시작하게 하고, 데이터를 암호화하여 해커가 중간에서 데이터를 훔쳐보거나 변조할 수 없게 만듬
- SSL의 후속 버전으로, 데이터의 기밀성, 무결성, 인증을 보장함
- SSL (Secure Sockets Layer)
- TLS의 이전 버전으로, 인터넷 초기에 사용되었던 보안 프로토콜
- 데이터를 암호화하여 안전하게 전송했지만, 몇 가지 심각한 보안 취약점이 발견되면서 더 이상 사용되지 않고, 현재는 모두 TLS로 업그레이드됨
- Handshake (핸드쉐이크)
- 클라이언트(예: 웹 브라우저)와 서버(예: 웹사이트)가 안전한 연결을 설정하기 위해 서로 인사를 나누고 보안 설정을 협상하는 과정
- 이 과정에서는 어떤 암호화 방식을 사용할지 정하고, 필요한 키(암호화 키)를 교환하며, 서로의 신분을 확인하는 작업이 이루어짐
- 핸드쉐이크가 완료되면 클라이언트와 서버 간의 안전한 통신이 시작됨
- Cipher Suite (암호 스위트)
- TLS/SSL 연결에서 사용할 암호화 알고리즘의 묶음
- 예를 들어, 데이터를 암호화할 때 사용할 알고리즘(RSA, ECDSA)과 데이터의 무결성을 확인할 때 사용할 해시 알고리즘(SHA-256) 등이 포함됨
- 클라이언트와 서버는 핸드쉐이크 동안 사용할 암호 스위트를 결정함
- Pre-Master Secret (프리-마스터 시크릿):
- 클라이언트가 서버와의 세션 동안 사용할 "비밀 키"를 만드는 데 필요한 임시 정보
- 클라이언트는 이 정보를 서버의 공개 키로 암호화해서 서버에 보내며, 둘 사이에서만 알 수 있도록 보안 처리를 함
- Pre-Master Secret은 Session Key를 생성하는 데 사용되며, 클라이언트와 서버 간에만 공유되는 비밀 정보임
- Session Key (세션 키):
- 클라이언트와 서버가 한 번 안전한 연결이 설정되면 데이터를 암호화하고 복호화하는 데 사용하는 대칭 키
- 이 키는 핸드쉐이크 과정에서 만들어진 프리-마스터 시크릿을 기반으로 생성되며, 세션이 유지되는 동안 안전한 통신을 보장함
- Certificate (인증서):
- 신뢰할 수 있는 제3자(예: 인증 기관(CA, Certificate Authority))가 발행한 디지털 문서로, 서버나 클라이언트의 신원을 확인하는 데 사용됨
- 예를 들어, 웹사이트가 신뢰할 수 있는 사이트인지 브라우저가 확인할 때 이 인증서를 사용함
- 일반적으로 인증서는 서버의 공개 키와 소유자 정보가 포함되어 있음
- ChangeCipherSpec (암호화 사양 변경 메시지):
- 핸드쉐이크 과정에서 클라이언트와 서버가 서로에게 "이제부터는 우리가 협상한 대로 암호화된 통신을 시작하겠다"라고 알리는 신호
- 이 메시지 이후부터 모든 통신은 협상된 암호화 방식으로 보호됨