coredot.today
HTTPS와 SSL/TLS: '자물쇠 아이콘' 뒤에 숨겨진 암호화의 원리
블로그로 돌아가기
HTTPSTLSSSL암호화보안인증서Let's Encrypt클라우드

HTTPS와 SSL/TLS: '자물쇠 아이콘' 뒤에 숨겨진 암호화의 원리

브라우저 주소창의 자물쇠 아이콘을 매일 보지만, 그 뒤에서 어떤 일이 벌어지는지 아는 사람은 드물다. 카페 Wi-Fi에서 로그인할 때 비밀번호가 안전한 이유, TLS 핸드셰이크의 동작 원리, 인증서의 신뢰 체계, 그리고 클라우드에서의 HTTPS 운영까지.

코어닷투데이2026-04-0180

들어가며: 카페 Wi-Fi에서 로그인하면 안전한가?

토요일 오후, 강남역 카페에 앉아 노트북을 열었다. Wi-Fi에 연결하고 은행 앱에 로그인한다. 아이디, 비밀번호 입력. "로그인 성공."

그런데 잠깐 — 이 카페 Wi-Fi에는 나 말고도 수십 명이 연결되어 있다. 옆자리의 누군가가 같은 네트워크에서 내 통신 데이터를 엿보고 있다면? 내가 방금 입력한 비밀번호가 그대로 노출되는 건 아닐까?

이것은 가상의 공포가 아니다. 중간자 공격(Man-in-the-Middle Attack, MITM)이라는 이름의 실제 해킹 기법이다.

1
공격 시나리오
공격자가 가짜 Wi-Fi 핫스팟을 만든다. 이름은 "Starbucks_Free_WiFi". 당신이 여기에 연결하면, 모든 HTTP 통신이 공격자의 장비를 경유한다. 비밀번호, 카드번호, 개인정보가 평문(plaintext)으로 노출된다.
2
방어 원리
HTTPS는 브라우저와 서버 사이의 모든 통신을 암호화한다. 공격자가 데이터를 가로채더라도 암호화된 쓰레기 데이터만 보인다. 해독은 불가능하다.
3
결과
주소창에 **자물쇠 아이콘**이 보인다면, 당신의 데이터는 TLS라는 암호화 프로토콜로 보호되고 있다. 카페 Wi-Fi에서도, 공항에서도, 어디서든.

이 자물쇠 아이콘 하나의 뒤에는 30년에 걸친 암호학의 역사, 수학적 난제, 그리고 수십억 달러 규모의 인프라가 숨겨져 있다. 오늘은 그 모든 것을 풀어본다.

카페 와이파이에서 해커가 데이터를 엿듣는 위험한 장면


1. SSL에서 TLS까지: 30년의 진화

1994년: Netscape가 연 암호화 시대

HTTPS의 역사는 웹 브라우저의 탄생과 함께한다. 1994년, Netscape Communications의 엔지니어들은 심각한 문제에 직면했다. 인터넷 쇼핑이 시작되고 있었지만, 신용카드 번호를 입력하면 그 데이터가 인터넷을 평문으로 날아갔다. 누구든 중간에서 가로챌 수 있었다.

Netscape는 SSL(Secure Sockets Layer)이라는 프로토콜을 만들었다. SSL 1.0은 내부 검토에서 심각한 보안 결함이 발견되어 공개조차 되지 못했다. SSL 2.0이 1995년에 처음 배포되었고, 곧이어 SSL 3.0(1996년)이 나왔다.

하지만 SSL이라는 이름은 Netscape라는 특정 회사의 소유였다. 인터넷 표준화를 위해 IETF(Internet Engineering Task Force)가 프로토콜을 인수하면서 이름을 TLS(Transport Layer Security)로 바꿨다.

1995
SSL 2.0 출시
Netscape가 최초의 웹 암호화 프로토콜을 공개. 40비트 암호화로 시작. 심각한 취약점이 곧 발견됨.
1996
SSL 3.0
SSL 2.0의 근본적 설계 결함을 수정. 이후 15년간 인터넷 보안의 기반이 됨.
1999
TLS 1.0 (RFC 2246)
IETF가 SSL을 인수해 TLS로 이름 변경. SSL 3.0과 큰 차이는 없었지만, 표준화의 시작점.
2006
TLS 1.1 (RFC 4346)
CBC(Cipher Block Chaining) 공격 방어를 위한 IV(Initialization Vector) 도입. 그러나 채택 속도가 느렸음.
2008
TLS 1.2 (RFC 5246)
SHA-256 해시 도입, AEAD 암호 스위트 지원. 가장 오래 주류로 사용된 버전. 2026년 현재도 상당수 서버가 지원.
2018
TLS 1.3 (RFC 8446)
핸드셰이크를 2-RTT에서 1-RTT로 단축. 취약한 암호 스위트를 모두 제거. 보안과 속도를 동시에 개선한 혁명적 업그레이드.
2020~2021
TLS 1.0/1.1 공식 폐기
주요 브라우저(Chrome, Firefox, Safari, Edge)가 TLS 1.0/1.1 지원 중단. TLS 1.2 이상만 허용.
⚠️
SSL vs TLS — 이름의 혼란: 실무에서는 "SSL 인증서"라는 표현을 여전히 많이 쓴다. 하지만 실제로 SSL 프로토콜은 2015년에 공식 폐기(deprecated)되었다. 우리가 오늘날 사용하는 것은 TLS다. "SSL 인증서"라고 부르는 것은 관습일 뿐, 기술적으로는 TLS 인증서가 맞다.

2. 대칭 암호화 vs 비대칭 암호화: 금고와 열쇠의 비유

카페 와이파이에서 해커가 평문 데이터를 가로채는 장면과 HTTPS 암호화 패킷이 안전한 모습의 대비

TLS의 동작 원리를 이해하려면 먼저 두 가지 암호화 방식을 알아야 한다.

대칭 암호화와 비대칭 암호화를 열쇠와 우편함에 비유한 그림

대칭 암호화 (Symmetric Encryption)

하나의 열쇠로 잠그고, 같은 열쇠로 푼다.

일상적인 비유로 설명하면: 당신과 친구가 같은 자물쇠 열쇠를 하나씩 가지고 있다. 당신이 상자에 비밀 편지를 넣고 잠그면, 친구가 같은 열쇠로 열 수 있다. 빠르고 단순하다.

대표 알고리즘: AES-128, AES-256, ChaCha20

대칭 암호화
평문 데이터 Hello, World!
같은 열쇠
AES-256 암호화 Key: 5f3a9b...
같은 열쇠
암호문 7x!@#k2m...

문제점: 열쇠를 어떻게 상대방에게 안전하게 전달하는가? 인터넷에서 열쇠를 보내는 순간, 그 열쇠도 도청당할 수 있다. 이것이 키 교환(Key Exchange) 문제다.

비대칭 암호화 (Asymmetric Encryption)

공개 열쇠로 잠그고, 비밀 열쇠로만 풀 수 있다.

이번에는 특수한 자물쇠를 상상해 보자. 이 자물쇠에는 열쇠가 두 개다:

  • 공개키(Public Key): 누구나 가질 수 있는 열쇠. 이 열쇠로는 잠글 수만 있고, 열 수는 없다.
  • 개인키(Private Key): 오직 나만 가진 열쇠. 이 열쇠로만 열 수 있다.

당신이 나에게 비밀 메시지를 보내고 싶다면: 나의 공개키로 메시지를 잠근다. 전 세계 누구도, 심지어 당신도, 이 메시지를 열 수 없다. 오직 나의 개인키만이 풀 수 있다.

대표 알고리즘: RSA, ECDSA, Ed25519

비대칭 암호화
송신자 (앨리스)
밥의 공개키로 암호화
암호화된 메시지 도청해도 해독 불가
수신자 (밥)
밥의 개인키로 복호화

문제점: 비대칭 암호화는 대칭 암호화보다 약 1,000배 느리다. 웹페이지의 모든 데이터를 비대칭 암호화로 전송하면 체감 속도가 끔찍해진다.

TLS의 해법: 두 방식의 결합

TLS는 이 두 가지를 하이브리드로 조합한다.

1단계 비대칭 암호화로 안전하게 "세션 키"를 교환한다 (핸드셰이크)
2단계 교환된 세션 키(대칭키)로 이후 모든 데이터를 빠르게 암호화한다
결과 보안(비대칭)과 속도(대칭)를 모두 잡는다
비교 항목대칭 암호화비대칭 암호화
열쇠 개수1개 (공유)2개 (공개키 + 개인키)
속도매우 빠름~1,000배 느림
키 교환 문제안전한 전달 방법 필요공개키는 공개 가능
대표 알고리즘AES-256, ChaCha20RSA, ECDSA, X25519
TLS에서의 역할데이터 암호화 (본 통신)키 교환 (핸드셰이크)

3. TLS 핸드셰이크: 악수 한 번에 벌어지는 암호학

대칭키와 비대칭키를 한국 전통 자물쇠에 비유한 일러스트 — 같은 열쇠 vs 공개 잠금장치와 비밀 열쇠

브라우저에서 https://core.today를 입력하는 순간, 화면에 페이지가 뜨기 전에 보이지 않는 "악수(Handshake)"가 벌어진다.

두 컴퓨터가 인증서와 키를 교환하는 TLS 핸드셰이크 의식 이 과정에서 브라우저와 서버는 서로의 신원을 확인하고, 암호화 방식을 협상하고, 세션 키를 생성한다.

TLS 1.2 핸드셰이크 (2-RTT)

브라우저 (클라이언트) ClientHello 서버
브라우저 ServerHello + 인증서 + KeyExchange 서버
브라우저 ClientKeyExchange + ChangeCipherSpec 서버
🔒 암호화 통신 시작

각 단계에서 어떤 일이 벌어지는지 자세히 보자.

ClientHello 브라우저가 서버에게 인사한다. "나는 TLS 1.2를 지원하고, 이런 암호 스위트들을 쓸 수 있어." 사용 가능한 암호 스위트(Cipher Suite) 목록과 랜덤 값(Client Random)을 보낸다.
ServerHello 서버가 응답한다. "좋아, 우리는 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384를 쓰자." 선택한 암호 스위트, 서버 랜덤 값(Server Random), 그리고 디지털 인증서를 보낸다.
인증서 검증 브라우저가 서버의 인증서를 검증한다. "이 인증서는 신뢰할 수 있는 CA가 발급한 것인가? 도메인 이름이 맞는가? 유효기간이 지나지 않았는가?" (자세한 내용은 4장에서)
키 교환 ECDHE(Elliptic-Curve Diffie-Hellman Ephemeral) 알고리즘으로 양쪽이 각각 임시 키 쌍을 만들고, 공개 부분만 교환한다. 수학적 마법: 양쪽이 같은 세션 키를 독립적으로 계산할 수 있다. 세션 키 자체는 네트워크를 통해 전송되지 않는다.
완료 양쪽이 동일한 세션 키를 갖게 되었다. 이제부터 모든 데이터는 이 대칭키(AES-256-GCM)로 암호화/복호화된다.

TLS 1.3의 혁신: 1-RTT 핸드셰이크

TLS 1.2는 핸드셰이크에 2 라운드트립(2-RTT)이 필요했다. 서울에서 미국 서버까지 왕복 약 200ms라면, 핸드셰이크에만 400ms가 걸린다.

TLS 1.3은 이것을 1-RTT로 줄였다. 어떻게? ClientHello에서 키 교환 정보까지 한꺼번에 보낸다.

2-RTT TLS 1.2 핸드셰이크 ~400ms (서울↔미국)
1-RTT TLS 1.3 핸드셰이크 ~200ms (50% 단축)
0-RTT TLS 1.3 재연결 이전 세션 재사용

더 놀라운 것은 0-RTT 재개(Resumption)다. 한번 연결했던 서버에 다시 접속할 때, 이전 세션의 키를 재사용해 핸드셰이크 없이 즉시 암호화 데이터를 보낼 수 있다.

⚠️
0-RTT의 함정: 0-RTT 데이터는 리플레이 공격(Replay Attack)에 취약하다. 공격자가 0-RTT 패킷을 캡처해 서버에 다시 보내면, 서버가 이를 정상 요청으로 처리할 수 있다. 따라서 0-RTT는 GET 같은 멱등(idempotent) 요청에만 써야 하고, POST(결제, 주문 등)에는 절대 사용하지 않는다.

암호 스위트: TLS 1.3이 정리한 것

TLS 1.2까지는 수백 개의 암호 스위트 조합이 가능했다. 그중 상당수는 취약했다. TLS 1.3은 과감하게 5개의 암호 스위트만 남겼다.

TLS 1.3 — 허용된 암호 스위트 (전체 목록)
TLS_AES_256_GCM_SHA384 — 가장 강력, 주류
TLS_AES_128_GCM_SHA256 — 성능과 보안의 균형
TLS_CHACHA20_POLY1305_SHA256 — 모바일 최적화
TLS_AES_128_CCM_SHA256 — IoT 디바이스용
TLS_AES_128_CCM_8_SHA256 — 저전력 IoT용

제거된 것들: RC4, DES, 3DES, CBC 모드, 정적 RSA 키 교환, MD5, SHA-1. 모두 알려진 취약점이 있거나 전방향 비밀성(Forward Secrecy)을 보장하지 못하는 것들이다.

💡
전방향 비밀성(Forward Secrecy)이란? 서버의 개인키가 미래에 유출되더라도, 과거에 기록된 암호화 통신은 해독할 수 없는 성질이다. TLS 1.3은 임시 키(Ephemeral Key)를 매 세션마다 새로 생성하고 즉시 폐기하기 때문에, 개인키 유출과 과거 통신이 무관하다. ECDHE(Ephemeral Diffie-Hellman)가 이를 보장한다.

TLS 인증서 신뢰 체계를 한국 행정 구조에 비유한 일러스트 — Root CA가 정부, Intermediate CA가 구청, 서버 인증서가 동네 가게

4. 인증서와 신뢰 체계: "이 서버가 진짜 네이버인지 어떻게 아는가?"

암호화만으로는 부족하다. 내 데이터가 암호화되어 전송된다 해도, 수신자가 진짜 네이버 서버인지 확인할 방법이 없다면 의미가 없다.

인증 기관이 웹사이트 인증서를 발급하는 공증 사무소 공격자가 가짜 네이버 서버를 운영하고, 거기로 내 트래픽을 유도하면?

이 문제를 해결하는 것이 디지털 인증서(Digital Certificate)인증 기관(Certificate Authority, CA)이다.

인증서의 구조

TLS 인증서(X.509)에는 이런 정보가 들어 있다:

X.509 인증서 구조 (core.today 예시)
Subject: CN=core.today
Issuer: Let's Encrypt Authority X3
Valid From: 2026-01-01
Valid To: 2026-04-01
Public Key: ECDSA P-256 (0x04:7a:3b:...)
Signature Algorithm: SHA-256 with ECDSA
Serial Number: 03:a1:9f:...
SAN (Subject Alt Names): core.today, *.core.today
CA Digital Signature: [Let's Encrypt의 개인키로 서명된 해시값]

신뢰의 체인 (Chain of Trust)

브라우저가 인증서를 신뢰하는 과정은 체인 구조다.

Root CA (루트 인증 기관)
루트 CA가 중간 CA의 인증서에 서명
Intermediate CA (중간 인증 기관)
중간 CA가 서버 인증서에 서명
서버 인증서 (core.today)
  1. 루트 CA: 자기 자신이 서명한 인증서를 가진 최상위 기관. DigiCert, Comodo, IdenTrust(Let's Encrypt의 상위) 등. 이들의 인증서는 브라우저/OS에 미리 설치되어 있다. (macOS의 키체인, Windows의 인증서 저장소, Chrome의 Root Store)
  2. 중간 CA: 루트 CA가 서명한 인증서를 가진 중간 기관. 실제 서버 인증서를 발급하는 역할.
  3. 서버 인증서: 중간 CA가 서명한, 특정 도메인에 대한 인증서.

브라우저는 서버 인증서 → 중간 CA 인증서 → 루트 CA 인증서 순서로 서명을 검증한다. 루트 CA가 브라우저에 내장된 것과 일치하면 신뢰 체인이 완성된다.

Let's Encrypt 혁명

2015년 이전, TLS 인증서는 유료였다. 단일 도메인 인증서가 연간 50 50~300. 와일드카드 인증서는 $500 이상. 이 비용이 소규모 웹사이트들이 HTTPS를 도입하지 못하는 주요 장벽이었다.

Let's Encrypt 로봇이 소규모 웹사이트에 무료 자물쇠를 나눠주는 장면

Let's Encrypt가 이것을 바꿨다.

$0 인증서 발급 비용 완전 무료, 영구적
90일 인증서 유효 기간 짧은 유효기간 = 높은 보안
5억+ 활성 인증서 2026년 기준, 전 세계

Let's Encrypt는 ISRG(Internet Security Research Group)가 운영하는 비영리 CA다. ACME(Automatic Certificate Management Environment) 프로토콜을 통해 인증서 발급을 완전 자동화했다. certbot이라는 도구 하나면 커맨드 한 줄로 인증서를 발급받고 갱신할 수 있다.

hljs language-bash
# Let's Encrypt 인증서 발급 (Certbot)
sudo certbot --nginx -d core.today -d www.core.today

# 자동 갱신 확인
sudo certbot renew --dry-run

Let's Encrypt 이전에는 전 세계 웹사이트의 약 40%만 HTTPS를 사용했다. 2026년 현재, 95% 이상의 웹 트래픽이 HTTPS다. Let's Encrypt가 인터넷 보안의 패러다임을 바꾼 것이다.

인증서 종류: DV, OV, EV

종류DV (Domain Validation)OV (Organization Validation)EV (Extended Validation)
검증 수준도메인 소유권만 확인도메인 + 조직 실체 확인도메인 + 조직 + 법적 존재 확인
발급 소요수 분 (자동)1~3일1~2주
비용무료 (Let's Encrypt)$50~$200/년$100~$500/년
사용 사례블로그, 개인 프로젝트기업 웹사이트은행, 전자상거래
브라우저 표시자물쇠자물쇠자물쇠 (과거엔 녹색 바)
💡
EV 인증서의 몰락: 과거에는 EV 인증서를 사용하면 주소창이 녹색으로 바뀌고 회사명이 표시되었다. 하지만 Chrome(2019년), Firefox(2019년), Safari가 이 차별적 표시를 제거했다. 이유? 연구에 따르면 사용자 중 녹색 바를 보고 "더 안전하다"고 판단하는 비율이 매우 낮았고, 피싱 사이트가 EV 인증서를 구매해 악용하는 사례도 발견되었다. 현재 DV 인증서만으로 기술적 보안은 동일하다.

5. 브라우저의 자물쇠 아이콘: 실제로 무엇을 의미하는가

이제 매일 보는 자물쇠 아이콘이 무엇을 보장하는지 정확히 정리하자.

자물쇠가 보장하는 것

기밀성 Confidentiality — 브라우저와 서버 사이의 통신 내용이 암호화되어 제3자가 읽을 수 없다.
무결성 Integrity — 전송 중에 데이터가 변조되지 않았음을 보장한다. HMAC(Hash-based Message Authentication Code)으로 검증.
인증 Authentication — 연결된 서버가 해당 도메인의 정당한 소유자임을 인증서로 증명한다.

자물쇠가 보장하지 않는 것

이것이 중요하다. 많은 사람들이 "자물쇠가 있으면 안전한 사이트"라고 오해한다.

보장하지 않는 것
자물쇠는 "이 사이트가 선의의 사이트인지"를 보장하지 않는다. 피싱 사이트도 Let's Encrypt로 무료 인증서를 받을 수 있다. https://n4ver-login.com에도 자물쇠가 달린다. 자물쇠는 "통신이 암호화되어 있다"는 의미이지, "이 사이트를 신뢰해도 된다"는 의미가 아니다.
올바른 확인 방법
자물쇠 아이콘을 클릭하면 인증서 정보를 확인할 수 있다. 도메인 이름이 정확한지, 인증서 발급 기관이 무엇인지, 유효기간이 지나지 않았는지를 확인해야 한다. 특히 주소창의 도메인 스펠링을 주의 깊게 보는 것이 가장 효과적인 피싱 방어다.

Mixed Content 문제

HTTPS 페이지에서 HTTP 리소스(이미지, 스크립트 등)를 로드하면 Mixed Content 경고가 발생한다. 이는 암호화 체인의 약한 고리가 된다.

hljs language-html
<!-- Mixed Content 경고 발생 -->
<img src="http://example.com/image.png" />

<!-- 올바른 방법 -->
<img src="https://example.com/image.png" />

<!-- 프로토콜 상대 경로 (권장하지 않지만 가능) -->
<img src="//example.com/image.png" />

최신 브라우저는 Mixed Content 중 스크립트(Active Mixed Content)를 완전히 차단하고, 이미지(Passive Mixed Content)는 경고를 표시한다.


6. HTTPS 역사상 주요 취약점들

TLS의 역사는 취약점 발견과 수정의 역사이기도 하다. 주요 사건들을 알아두면 보안 설계의 교훈을 얻을 수 있다.

Heartbleed (2014) — 인터넷의 심장이 터지다

사상 최악의 TLS 취약점 중 하나. OpenSSL 라이브러리의 하트비트(Heartbeat) 확장 기능에서 발견되었다.

💔
취약점 원리
TLS 하트비트는 연결이 살아있는지 확인하는 핑(Ping)이다. 클라이언트가 "5바이트짜리 데이터를 보냈으니 5바이트를 돌려줘"라고 요청하면 서버가 에코한다. 문제는 길이 검증이 없었다는 것. "5바이트를 보냈지만 65,535바이트를 돌려줘"라고 요청하면, 서버 메모리에서 최대 64KB의 임의 데이터가 유출되었다.
🔧
유출된 것들
서버의 개인키, 사용자의 세션 쿠키, 비밀번호, 암호화된 통신의 복호화 키 등. 전 세계 웹 서버의 약 17%(50만 대 이상)가 영향받았다. CVE-2014-0160.
📚
교훈
Heartbleed 이후 OpenSSL의 코드 리뷰 관행이 강화되었고, LibreSSL(OpenBSD)과 BoringSSL(Google)이 포크되었다. 또한 TLS 1.3에서 전방향 비밀성이 필수가 된 계기가 되었다 — 개인키가 유출되어도 과거 통신은 안전하도록.

POODLE (2014) — SSL 3.0의 최후

Padding Oracle On Downgraded Legacy Encryption. SSL 3.0의 CBC 패딩 방식을 악용해 암호화된 쿠키를 한 바이트씩 복호화할 수 있는 취약점이다.

더 심각한 문제는 다운그레이드 공격이었다. TLS 1.2를 지원하는 서버라도, 공격자가 중간에서 핸드셰이크를 조작해 의도적으로 SSL 3.0으로 다운그레이드시킬 수 있었다. 이 공격은 SSL 3.0의 완전한 폐기를 촉발했다.

기타 주요 취약점들

취약점영향원인대응
BEAST (2011)TLS 1.0 CBC 모드에서 암호문 해독 가능예측 가능한 IVTLS 1.1 이상 사용
CRIME (2012)TLS 압축을 이용해 쿠키 추출압축 + 암호화의 조합TLS 압축 비활성화
FREAK (2015)서버를 512비트 RSA로 다운그레이드미국 암호 수출 규제의 잔재Export 암호 스위트 제거
Logjam (2015)512비트 DH 키 교환 공격약한 DH 파라미터2048비트 이상 DH 사용
ROBOT (2017)RSA 패딩 오라클 (Bleichenbacher 변종)19년 된 취약점의 재발견TLS 1.3에서 RSA 키 교환 제거
💡
패턴이 보이는가? 이 취약점들의 공통점은 오래된 알고리즘과 하위 호환성이다. TLS 1.3이 과감하게 레거시 암호 스위트를 전부 제거한 것은 이 교훈에서 나왔다. "호환성을 위해 남겨둔 코드"가 결국 공격 표면이 된다.

7. HTTP/2와 HTTP/3 (QUIC): HTTPS 위의 성능 혁신

HTTPS가 보안을 해결했다면, HTTP/2와 HTTP/3는 속도를 해결한다. 그리고 이 두 프로토콜은 사실상 HTTPS를 전제로 설계되었다.

HTTP/1.1의 병목

HTTP/1.1에서는 하나의 TCP 연결에서 한 번에 하나의 요청-응답만 처리할 수 있다. 웹페이지에 CSS, JS, 이미지 등 50개의 리소스가 있다면? 50개의 TCP 연결을 열거나, 하나의 연결에서 직렬로 50번 요청해야 한다. 이것이 Head-of-Line(HOL) Blocking 문제다.

HTTP/2: 멀티플렉싱

HTTP/2(2015년)는 하나의 TCP 연결 위에 여러 요청-응답을 동시에 주고받는 멀티플렉싱(Multiplexing)을 도입했다.

HTTP/1.1 vs HTTP/2 리소스 로딩
HTTP/1.1 (직렬)
CSS → 완료 후 JS → 완료 후 Image
직렬 처리, 느림
HTTP/2 (병렬)
CSS + JS + Image 동시 전송
멀티플렉싱, 빠름

HTTP/2의 핵심 기능:

  • 멀티플렉싱: 하나의 연결에서 여러 스트림 동시 전송
  • 헤더 압축 (HPACK): 반복되는 HTTP 헤더를 압축해 오버헤드 감소
  • 서버 푸시: 클라이언트가 요청하기 전에 서버가 미리 리소스를 전송
  • 스트림 우선순위: CSS를 이미지보다 먼저 전송하도록 우선순위 지정
💡
HTTP/2 = HTTPS: 기술적으로 HTTP/2는 평문(HTTP) 위에서도 동작하도록 설계되었다(h2c). 그러나 모든 주요 브라우저가 HTTP/2를 TLS 위에서만 지원하기로 결정했다. 사실상 HTTP/2 = HTTPS다. 이는 HTTPS 도입을 가속화하는 강력한 인센티브가 되었다.

HTTP/3과 QUIC: TCP를 넘어서

HTTP/2에도 근본적 한계가 있었다. TCP 자체의 HOL Blocking이다. TCP에서 하나의 패킷이 손실되면, 그 패킷이 재전송될 때까지 같은 연결의 모든 스트림이 멈춘다. 아무리 멀티플렉싱을 해도 TCP 레벨에서 병목이 발생한다.

HTTP/3(2022년)은 TCP를 완전히 버리고 QUIC 프로토콜을 사용한다. QUIC는 Google이 개발한 UDP 기반 전송 프로토콜이다.

비교 항목HTTP/1.1HTTP/2HTTP/3 (QUIC)
전송 프로토콜TCPTCPUDP (QUIC)
멀티플렉싱불가가능 (TCP HOL 문제)완전한 멀티플렉싱
연결 수립TCP 핸드셰이크 + TLS 핸드셰이크TCP + TLS (별도)QUIC에 TLS 1.3 내장 (0-RTT 가능)
패킷 손실 시전체 연결 차단전체 연결 차단해당 스트림만 영향
네트워크 전환연결 재설정 필요연결 재설정 필요Connection ID로 유지
암호화선택사실상 필수무조건 필수 (TLS 1.3 내장)

QUIC의 핵심 혁신은 TLS 1.3을 전송 계층에 내장한 것이다. TCP + TLS에서는 TCP 핸드셰이크(1-RTT) + TLS 핸드셰이크(1-RTT)로 최소 2-RTT가 필요했다. QUIC는 이를 1-RTT로 통합하고, 재연결 시 0-RTT가 가능하다.

연결 수립 시간 비교 (서울 → 미국 서버, ~100ms RTT)
HTTP/1.1
~300ms
HTTP/2
~200ms
HTTP/3
~100ms
HTTP/3 0-RTT
~0ms

모바일 환경에서 특히 강력하다. Wi-Fi에서 LTE로 전환될 때 TCP 연결은 끊어지지만, QUIC는 Connection ID 기반으로 연결을 유지한다. 지하철에서 유튜브를 보다가 셀 전환이 일어나도 영상이 끊기지 않는 이유다.


8. 클라우드에서의 TLS: AWS 실전 운영

이론을 알았으니 실전으로 가보자. 클라우드 환경에서 HTTPS를 어떻게 구성하고 운영하는가?

AWS Certificate Manager (ACM) — 무료 인증서

AWS는 ACM(AWS Certificate Manager)을 통해 TLS 인증서를 무료로 발급하고 관리한다. Let's Encrypt와 비슷하지만, AWS 서비스와의 통합이 핵심이다.

발급 ACM 콘솔에서 도메인 입력 → DNS 검증 또는 이메일 검증 → 수 분 내 발급 완료. 비용: $0.
배포 CloudFront, ALB(Application Load Balancer), API Gateway에 클릭 한 번으로 연결. 인증서 파일을 직접 만질 필요 없음.
갱신 자동 갱신. ACM이 만료 60일 전부터 자동으로 갱신을 시도한다. DNS 검증을 사용했다면 인간 개입 없이 무한 갱신.
모니터링 CloudWatch 알림으로 인증서 만료 경고. 갱신 실패 시 SNS 알림 전송.
hljs language-bash
# AWS CLI로 ACM 인증서 발급
aws acm request-certificate \
  --domain-name core.today \
  --subject-alternative-names "*.core.today" \
  --validation-method DNS \
  --region us-east-1  # CloudFront용은 반드시 us-east-1
⚠️
리전 주의: CloudFront에서 사용할 ACM 인증서는 반드시 us-east-1 (버지니아 북부)에서 발급해야 한다. ALB에서 사용할 인증서는 ALB가 있는 리전에서 발급한다. 이것은 AWS 초보자가 가장 자주 겪는 실수 중 하나다.

TLS 종료(Termination) 아키텍처

프로덕션 환경에서는 TLS 종료 지점을 어디에 둘 것인가가 중요한 설계 결정이다.

사용자 브라우저
HTTPS (TLS 암호화)
CloudFront (TLS 종료 #1)
HTTPS (재암호화) 또는 HTTP
ALB (TLS 종료 #2)
HTTP (VPC 내부, 평문)
ECS / EC2 (애플리케이션 서버)

왜 ALB에서 TLS를 종료하는가?

  1. 성능: TLS 암호화/복호화는 CPU 집약적이다. ALB가 이 부담을 맡으면 애플리케이션 서버는 비즈니스 로직에 집중할 수 있다.
  2. 인증서 관리: ACM 인증서를 ALB에 연결하면 자동 갱신이 된다. 개별 서버에 인증서를 배포하고 갱신하는 운영 부담이 사라진다.
  3. VPC 내부 보안: ALB 뒤의 통신은 AWS VPC 내부에서 이루어진다. VPC는 격리된 네트워크이므로 평문 통신이라도 외부에서 접근할 수 없다.
💡
End-to-End 암호화가 필요한 경우: 금융, 의료 등 규제 환경에서는 VPC 내부에서도 TLS 암호화가 요구될 수 있다. 이 경우 ALB → EC2 구간에도 TLS를 적용한다. ALB의 "HTTPS 대상 그룹" 설정으로 가능하다. 또는 AWS Nitro Enclaves를 사용해 서버 내부의 메모리까지 암호화할 수 있다.

CloudFront + ACM 실전 설정

CloudFront TLS 설정 — 권장 구성
SSL Certificate: ACM 인증서 (us-east-1)
Minimum Protocol Version: TLSv1.2_2021
Security Policy: TLSv1.2_2021 (TLS 1.2 이상만 허용)
HTTP to HTTPS: Redirect (301 리다이렉트)
HSTS Header: max-age=63072000; includeSubDomains; preload
Origin Protocol: HTTPS Only (오리진 연결도 암호화)

HSTS (HTTP Strict Transport Security)

Strict-Transport-Security 헤더는 브라우저에게 "이 사이트는 항상 HTTPS로만 접속하라"고 알려준다.

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age=63072000: 2년 동안 이 정책을 기억
  • includeSubDomains: 모든 서브도메인에도 적용
  • preload: HSTS Preload List에 등록 요청 (브라우저에 미리 내장)

HSTS Preload List에 등록되면, 사용자가 처음 방문하기 전부터 브라우저가 HTTPS를 강제한다. 첫 번째 HTTP 요청조차 차단하므로 다운그레이드 공격이 불가능해진다.


9. 실전 보안 점검: 당신의 서버는 안전한가?

지금까지 배운 내용을 바탕으로, 실제 서비스의 TLS 설정을 점검하는 방법을 알아보자.

SSL Labs 테스트

Qualys의 SSL Labs(ssllabs.com/ssltest)는 무료 TLS 진단 도구다. 도메인을 입력하면 A+부터 F까지 등급을 매겨준다.

SSL Labs 등급 기준 (주요 항목)
프로토콜
30%
키 교환
30%
암호 강도
40%

A+ 등급을 받으려면:

  • TLS 1.2 이상만 지원 (TLS 1.0/1.1 비활성화)
  • 전방향 비밀성(Forward Secrecy) 지원
  • HSTS 헤더 활성화
  • 약한 암호 스위트 비활성화 (RC4, 3DES, CBC 모드 등)

커맨드라인 점검

hljs language-bash
# 서버의 TLS 설정 확인
openssl s_client -connect core.today:443 -tls1_3

# 지원하는 암호 스위트 목록
nmap --script ssl-enum-ciphers -p 443 core.today

# 인증서 만료일 확인
echo | openssl s_client -connect core.today:443 2>/dev/null | \
  openssl x509 -noout -dates

# HSTS 헤더 확인
curl -sI https://core.today | grep -i strict

체크리스트: 프로덕션 HTTPS 설정

필수 TLS 1.2 이상만 허용. TLS 1.0/1.1은 반드시 비활성화. AWS CloudFront는 Security Policy에서 설정.
필수 HTTP → HTTPS 301 리다이렉트. 모든 HTTP 요청을 HTTPS로 강제 전환.
필수 HSTS 헤더 설정. max-age는 최소 1년(31536000) 이상. includeSubDomains 포함.
권장 OCSP Stapling 활성화. 인증서 폐기 여부를 서버가 미리 확인해서 브라우저에 전달. 응답 속도 향상.
권장 CAA DNS 레코드 설정. 어떤 CA만 이 도메인의 인증서를 발급할 수 있는지 명시. 잘못된 인증서 발급 방지.

10. 미래: 포스트 양자 암호화

한 가지 더 알아둘 것이 있다. 현재 TLS의 키 교환에 사용되는 ECDHE, RSA 같은 알고리즘은 양자 컴퓨터가 실용화되면 깨질 수 있다. 쇼어 알고리즘(Shor's Algorithm)이 큰 수의 소인수 분해와 이산 로그 문제를 다항 시간에 풀 수 있기 때문이다.

이에 대비해 포스트 양자 암호화(Post-Quantum Cryptography, PQC)가 연구되고 있다. 2024년, NIST는 최초의 포스트 양자 암호화 표준을 공식 발표했다:

알고리즘용도기반
ML-KEM (Kyber)키 교환 (KEM)격자 기반 (Lattice)
ML-DSA (Dilithium)디지털 서명격자 기반 (Lattice)
SLH-DSA (SPHINCS+)디지털 서명 (백업)해시 기반

Chrome은 이미 2024년부터 X25519Kyber768 하이브리드 키 교환을 기본 활성화했다. 기존 X25519(타원곡선)와 ML-KEM(포스트 양자)을 동시에 사용해, 둘 중 하나가 깨져도 안전하도록 설계했다. AWS CloudFront도 2024년부터 하이브리드 포스트 양자 TLS를 지원한다.

💡
"수확하고 나중에 해독(Harvest Now, Decrypt Later)" 공격: 양자 컴퓨터가 아직 실용화되지 않았더라도 위협은 지금부터다. 국가급 공격자가 현재의 암호화된 통신을 대량으로 저장해 두었다가, 양자 컴퓨터가 등장한 미래에 해독할 수 있다. 군사, 외교, 기업 비밀 등 수명이 긴 데이터는 지금부터 포스트 양자 암호화를 적용해야 한다.

마치며: HTTPS는 더 이상 선택이 아니다

2016년만 해도 "HTTPS는 은행이나 쇼핑몰에만 필요한 것"이라는 인식이 있었다. 2026년 현재, 이 말은 완전히 틀렸다.

95%+ Chrome HTTPS 트래픽 비율 2026년 기준
SEO 패널티 HTTP 사이트 검색 순위 하락 Google 2014년부터 적용
"주의 요함" HTTP 사이트 브라우저 경고 Chrome, Firefox, Safari

HTTPS가 필수인 이유를 정리하면:

  1. 보안: 중간자 공격, 도청, 데이터 변조로부터 사용자를 보호한다.
  2. 신뢰: 브라우저가 HTTP 사이트에 "주의 요함" 경고를 표시한다. 사용자가 이탈한다.
  3. SEO: Google이 HTTPS를 검색 순위 신호로 사용한다. HTTP 사이트는 불이익을 받는다.
  4. 기능: HTTP/2, HTTP/3, Service Worker, 지오로케이션 API, 카메라/마이크 접근 등 최신 웹 기능은 HTTPS에서만 동작한다.
  5. 비용: Let's Encrypt와 AWS ACM 덕분에 인증서 비용은 $0이다.

카페 Wi-Fi에서 로그인하면 안전한가? 답은 "HTTPS라면, 그렇다"이다.

지금 당신의 서비스가 HTTP라면, certbot이든 ACM이든, 오늘 당장 HTTPS로 전환하자. 비용도 없고, 이유도 없다. 2026년에 HTTP를 사용하는 것은 현관문을 열어놓고 자는 것과 같다.

다음 글에서는 이 시리즈의 연장선에서 네트워크 보안의 또 다른 축인 VPC, Security Group, 그리고 제로 트러스트 아키텍처를 다룰 예정이다.