CS 지식

[CS 지식22.] TLS Handshake와 인증서 구조

Somaz 2025. 9. 10. 08:08
728x90
반응형

Overview

이번 글에서는 HTTPS 통신의 핵심이 되는 TLS Handshake인증서 구조에 대해 알아본다.

 

우리는 매일 브라우저에서 `https://` 로 시작하는 웹사이트에 접속하며 암호화된 통신을 사용하지만, 이 통신이 실제로 어떻게 안전하게 동작하는지 정확히 이해하기는 쉽지 않다.

 

이 글에서는 다음과 같은 질문에 답한다.

  • TLS는 왜 안전한가?
  • TLS Handshake 과정에서 무슨 일이 일어나는가?
  • 인증서(Certificate)는 어떤 정보를 담고 있으며 왜 필요한가?
  • 인증서 교체(Renewal) 시 고려해야 할 것들은?

 

이 밖에도 TLS Handshake에 관련된 다양한 내용에 대해서 알아볼 예정이다!

 

 

 

 

 

📅 관련 글

2023.01.13 - [CS 지식] - [CS 지식1.] 웹 브라우저의 동작원리

2023.02.23 - [CS 지식] - [CS 지식2.] DNS의 동작원리(Domain Name System)

2023.03.06 - [CS 지식] - [CS 지식3.] HTTP / HTTPS 란?

2023.03.07 - [CS 지식] - [CS 지식4.] OSI 7계층 & TCP/IP 4계층이란?

2023.03.17 - [CS 지식] - [CS 지식5.] 가상화란?

2023.05.24 - [CS 지식] - [CS 지식6.] HTTP 메서드(Method)란? / HTTP Status Code

2023.12.05 - [CS 지식] - [CS 지식7.] Kubernetes 구성요소와 Pod 생성 방식이란?

2023.12.19 - [CS 지식] - [CS 지식8.] 프로세스(Process)와 스레드(Thread)란?

2023.12.30 - [CS 지식] - [CS 지식9.] 클라우드 컴퓨팅이란?(Public & Private Cloud / IaaS SaaS PaaS / Multitenancy)

2024.01.05 - [CS 지식] - [CS 지식10.] 웹1.0(Web1.0) vs 웹2.0(Web2.0) vs 웹3.0(Web3.0)

2024.02.02 - [CS 지식] - [CS 지식11.] NAT(Network Address Translation)란?

2024.05.22 - [CS 지식] - [CS 지식13.] 동기 및 비동기 처리란?

2024.05.23 - [CS 지식] - [CS 지식14.] 3tier 아키텍처란?

2024.08.28 - [CS 지식] - [CS 지식15.] SSR vs CSR vs ISR vs SSG

2024.11.09 - [CS 지식] - [CS 지식16.] stdin(표준입력) vs stdout(표준출력) vs stderr(표준에러)

2024.11.11 - [CS 지식] - [CS 지식17.] IPsec vs SSL/TLS

2024.11.22 - [CS 지식] - [CS 지식18.] Quantum Computing(양자 컴퓨팅)

2025.04.01 - [CS 지식] - [CS 지식19.] C/C++ 개발자도 다시 보는 메모리 구조

2025.04.02 - [CS 지식] - [CS 지식20.] OS 캐시와 디스크 I/O: MySQL, Redis 퍼포먼스 분석

2025.04.02 - [CS 지식] - [CS 지식21.] top에 나오는 load average, 진짜 뜻은?

2025.04.09 - [CS 지식] - [CS 지식22.] TLS Handshake와 인증서 구조

 

 

 


 

 

HTTPS와 TLS의 관계

HTTPS는 HTTP over TLS의 약자입니다. 쉽게 말해, HTTP에 보안 계층(TLS)을 추가한 것이 HTTPS이다. 이 보안 계층은 우리가 보내는 정보를 암호화해 제3자가 도청하거나 변조할 수 없게 만든다.

  • HTTP: 데이터를 평문으로 전송
  • HTTPS: TLS 프로토콜로 암호화된 채널을 통해 데이터 전송

 

2023.03.06 - [CS 지식] - [CS 지식3.] HTTP / HTTPS 란?

 

 

 

 

 

TLS Handshake란?

TLS Handshake는 클라이언트(브라우저)와 서버가 안전한 통신을 시작하기 전, 서로 암호화 방식과 인증을 협상하는 과정이다.

 

 

 

 

Handshake 과정 요약

 

  1. Client Hello
    • 지원 가능한 암호화 방식(cipher suite), TLS 버전, 랜덤값 등을 보냄
  2. Server Hello
    • 선택한 암호화 방식, 서버 인증서, 서버 랜덤값 등을 보냄
  3. Certificate 검증
    • 클라이언트는 서버 인증서의 유효성(신뢰, 유효 기간, 만료 등)을 확인
  4. Pre-Master Secret 생성 및 공유
    • 공개키 방식(RSA/EC)을 통해 비밀 키를 안전하게 교환
  5. Session Key 생성
    • 양측은 Pre-Master Secret과 Random 값으로 Session Key를 생성
  6. Finished
    • 서로 "Finished" 메시지를 교환하고 암호화된 통신 시작

 

주의: TLS 1.3부터는 더 빠르고 안전하게 설계되었으며 일부 절차가 간소화된다.

 

 

 

 

 

 

TLS 1.2 vs TLS 1.3 간단 비교

항목 TLS 1.2 TLS 1.3
핸드셰이크 라운드 최소 2-RTT 1-RTT (성능 향상)
지원 암호화 방식 다양한 cipher suite 강력한 방식만 채택 (RSA 없음)
암호화 범위 핸드셰이크 중 일부 평문 핸드셰이크 포함 대부분 암호화
보안성 취약점 존재 (ex. POODLE) 더 안전하고 현대적인 설계

위치 제안: TLS Handshake란? 아래나 별도 섹션으로 TLS 1.3의 특징 항목 추가

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

인증서 구조(Certificate Structure)

TLS 인증서(일명 SSL 인증서)는 서버가 진짜라는 것을 증명해주는 디지털 서명된 문서이다.

 

 

 

 

인증서에 담긴 주요 정보

항목 설명
Subject 인증서 소유자 정보 (ex: `www.example.com`)
Issuer 인증서를 발급한 CA(Certificate Authority)
Validity 유효 기간 (발급일 ~ 만료일)
Public Key 공개키 (클라이언트가 암호화할 때 사용)
Signature CA가 서명한 디지털 서명

 

 

 

 

 

인증서 신뢰 체계 (Trust Chain)

  • Root CA: 브라우저/OS에 사전 등록된 최상위 인증 기관
  • Intermediate CA: Root CA로부터 위임받은 중간 기관
  • Leaf Certificate: 실제 웹사이트에서 사용하는 서버 인증서

 

이렇게 계층적으로 연결된 신뢰의 체인(Chain of Trust)이 존재해야 TLS Handshake가 성공한다.

 

 

 

 

 

 

인증서 갱신(Renewal) 시 고려사항

  1. 만료일 확인: 일반적으로 인증서는 90일~1년 주기로 만료됨
  2. 자동 갱신 시스템 구축: Let's Encrypt 같은 무료 인증서는 certbot 등의 툴을 사용
  3. 교체 시 다운타임 최소화: 블루그린 방식 또는 리버스 프록시에서 교체
  4. 서버 구성 검증: 교체 후 openssl, curl, 또는 SSL Labs 등을 통해 검증

 

 

 

 

 

PKI와 공개키 인증서의 유효성 검증 절차

TLS 인증서는 단순히 CA가 서명한 파일 그 이상입니다. 클라이언트가 인증서를 신뢰하는 과정은 다음과 같다.

  • 클라이언트는 인증서의 Issuer 정보를 확인하고,
  • 해당 CA의 공개키로 인증서의 서명(Signature)를 검증합니다.
  • 인증서 체인을 따라가며 최종적으로 Root CA에 도달하고,
  • OS나 브라우저에 내장된 Root CA 목록에 포함돼 있는지를 확인합니다.

이 과정을 "인증서 체인의 신뢰성 검증"이라고 합니다.

 

 

 

 

 

 

인증서 검증 실패 시 상황 예시

  • 인증서 만료 → 브라우저에서 `NET::ERR_CERT_DATE_INVALID`
  • CA 신뢰 안 됨 → `NET::ERR_CERT_AUTHORITY_INVALID`
  • CN/Subject 오류 → `NET::ERR_CERT_COMMON_NAME_INVALID`

해당 오류들이 발생하면 사용자는 웹사이트에 접근하지 못하며, 신뢰가 하락힌다.

 

 

 

 

 

TLS는 왜 안전한가?

TLS의 안전성은 다음 3가지 핵심 요소에 기반한다.

  • 대칭키 암호화: 실제 데이터는 빠르게 암호화/복호화할 수 있는 대칭키로 암호화
  • 공개키 기반 구조(PKI): 키 교환 시 노출되지 않도록 비대칭키 암호화 사용
  • 디지털 인증서: 인증된 기관(CA)이 서버의 신원을 보장

TLS는 실제 데이터 전송 전에 충분히 강력한 보안 협상을 먼저 하고, 인증서 기반으로 중간자 공격(MITM)을 차단한다.

 

 

 

 

 

인증서 확인 명령어 예시

# 인증서 정보 확인
openssl s_client -connect www.example.com:443

# 인증서 파일 구조 확인
openssl x509 -in cert.pem -text -noout

 

 

 

 

 

 

 


 

 

 

 

 

 

마무리

이번 글에서는 HTTPS의 핵심인 TLS Handshake인증서 구조, 그리고 왜 TLS가 안전한지에 대해 알아보았다.

 

현대의 웹은 TLS 없이는 거의 존재하지 않습니다. 인증서 갱신이 어렵거나, TLS 오류가 발생하면 사용자 신뢰도와 직접적으로 연결된다.

따라서 개발자나 운영자는 TLS Handshake 흐름과 인증서 구조를 명확히 이해하고 있어야 하며, 이는 서비스 운영의 기본 역량 중 하나라 할 수 있다.

 

 

오늘날 HTTPS는 보안의 기본이자 표준이다.
TLS Handshake와 인증서에 대한 깊은 이해는 웹 서비스 운영, 보안 설계, 성능 최적화의 핵심이다.
이 글을 통해 TLS 구조에 대한 감각을 익히고, 앞으로 더 안전하고 신뢰할 수 있는 서비스를 만드는 데 활용하길 바란다.

 

 

 

 

 

 


Reference

 

 

728x90
반응형