개발/네트워크

SSL/TLS란 무엇인가? 개발자가 꼭 알아야 할 HTTPS 통신 원리

Mr.Lee 하루 2026. 6. 4. 08:52

TLS Handshake란 무엇인가? 개발자도 쉽게 이해하는 HTTPS 연결 과정

HTTPS 통신을 공부하다 보면 다음과 같은 용어를 자주 만나게 됩니다.

  • SSL Handshake
  • TLS Handshake
  • Handshake Failure
  • SSLHandshakeException

그런데 정작 Handshake가 무엇인지 정확히 설명할 수 있는 사람은 많지 않습니다.

이번 글에서는 TLS Handshake의 개념을 초보자도 이해할 수 있도록 쉽게 설명해보겠습니다.


Handshake란?

Handshake를 우리말로 번역하면 "악수"입니다.

사람과 사람이 처음 만났을 때를 생각해 보겠습니다.

A : 안녕하세요.
B : 안녕하세요.
A : 저는 누구입니다.
B : 저도 누구입니다.
A : 서로 믿을 수 있겠네요.
B : 네, 이제 이야기합시다.

처음 만난 사람과 바로 중요한 이야기를 하지 않습니다.

먼저 서로를 확인하고 신뢰를 쌓은 뒤 대화를 시작합니다.

컴퓨터도 마찬가지입니다.

웹 브라우저와 서버가 처음 연결될 때 바로 데이터를 주고받지 않습니다.

먼저

  • 상대방 확인
  • 암호화 방식 결정
  • 보안 검증

을 수행합니다.

이 과정을 TLS Handshake라고 합니다.


왜 Handshake가 필요한가?

예를 들어 인터넷 뱅킹 사이트에 접속했다고 가정해 보겠습니다.

내 PC
 ↓
인터넷
 ↓
은행 서버

은행 서버라고 생각하고 접속했는데 사실은 해커 서버라면 어떻게 될까요?

아이디와 비밀번호를 모두 빼앗길 수 있습니다.

그래서 데이터를 주고받기 전에

너 진짜 은행 서버 맞아?

를 먼저 확인해야 합니다.

또한

앞으로 어떤 방식으로 암호화할까?

도 결정해야 합니다.

이 과정을 Handshake에서 수행합니다.


Handshake를 일상생활로 이해하기

친구와 비밀 대화를 한다고 생각해 보겠습니다.

1단계

친구에게 전화를 겁니다.

나 : 여보세요?

2단계

상대방이 응답합니다.

친구 : 응, 나야.

3단계

정말 친구가 맞는지 확인합니다.

나 : 우리 어제 뭐 먹었지?

친구 : 치킨 먹었잖아.

4단계

암호를 정합니다.

나 : 앞으로 "사과"는 100만원이란 뜻으로 하자.

친구 : 좋아.

5단계

이제 비밀 대화를 시작합니다.

사과를 보내줘.

실제로는

100만원 보내줘.

라는 의미입니다.


TLS Handshake 실제 과정

컴퓨터는 아래 순서로 동작합니다.

Client Hello

브라우저가 서버에게 말합니다.

안녕하세요.

저는 TLS 1.2, TLS 1.3을 지원합니다.

이런 암호화 방식을 사용할 수 있습니다.

Server Hello

서버가 응답합니다.

좋습니다.

TLS 1.3을 사용하겠습니다.

AES256 암호화를 사용하겠습니다.

인증서 전달

서버가 자신의 신분증을 보여줍니다.

제가 진짜 이 서버입니다.

인증서 검증

브라우저가 신분증을 확인합니다.

이 인증서가 진짜인가?

위조된 것은 아닌가?

만료되지는 않았는가?

암호화 키 생성

양쪽이 비밀 암호를 만듭니다.

앞으로 이 암호를 사용합시다.

통신 시작

이제 비로소 HTTPS 통신이 시작됩니다.

로그인
회원가입
결제
API 호출

등의 데이터가 암호화되어 전송됩니다.


Handshake 실패란?

Handshake 도중 문제가 생기면 실제 데이터 전송이 시작되지도 못합니다.

대표적인 예시는 다음과 같습니다.


TLS 버전 불일치

클라이언트 : TLS 1.0 지원

서버 : TLS 1.2 이상만 허용

결과

Handshake Failure

인증서 문제

인증서 만료
인증서 위조
신뢰할 수 없는 인증서

결과

PKIX path building failed

암호화 방식 불일치

서버 : AES256 사용

클라이언트 : AES256 미지원

결과

SSLHandshakeException

Handshake는 언제 발생할까?

많은 사람들이 모든 요청마다 Handshake가 발생한다고 생각합니다.

실제로는 그렇지 않습니다.

최초 연결 시에만 발생합니다.

브라우저
 ↓
Handshake 수행
 ↓
HTTPS 연결 생성
 ↓
API 요청 100번 수행

이미 연결이 유지되는 동안에는 Handshake를 다시 하지 않습니다.

그래서 첫 연결이 조금 느리고 이후 요청은 빠르게 처리됩니다.


개발자가 기억해야 할 핵심

TLS Handshake는 단순히 연결하는 과정이 아닙니다.

서버와 클라이언트가 서로를 확인하고 안전한 통신 방법을 결정하는 과정입니다.

즉,

Handshake
 ↓
신뢰 확인
 ↓
암호화 방식 결정
 ↓
보안 연결 생성
 ↓
데이터 전송 시작

순서로 진행됩니다.

HTTPS 통신 오류가 발생했다면 실제 API 로직보다 먼저 TLS Handshake 단계에서 문제가 발생한 것은 아닌지 확인하는 것이 중요합니다.