← 개인 공부 · Network
STUDY NOTE · 개념 정리

HTTP vs HTTPS 정리: TLS 핸드셰이크, 대칭키와 공개키, 인증서

Network
HTTPS는 HTTP에 TLS 암호화 계층을 더한 것이다. 통신 내용을 암호화하고, 상대 서버가 진짜인지 인증하고, 중간에 내용이 바뀌지 않았는지 무결성을 보장한다.

1. 한눈에 비교

구분HTTPHTTPS
기본 포트80443
데이터평문 전송TLS로 암호화
서버 인증없음인증서(CA 서명)로 확인
중간자 공격엿보기·변조 가능방지
속도핸드셰이크 없음최초 연결 시 핸드셰이크 비용 (TLS 1.3, HTTP/2로 거의 상쇄)
SEO·브라우저"주의 요함" 표시기본으로 요구 (HTTP/2, 서비스 워커 등은 HTTPS 필수)

2. HTTPS가 보장하는 세 가지

보장의미수단
기밀성제3자가 내용을 못 읽음대칭키 암호화 (AES 등)
무결성중간에 내용이 바뀌지 않음MAC / AEAD
인증접속한 서버가 진짜임인증서 + CA의 전자서명

3. 대칭키 vs 공개키 암호화

구분대칭키공개키 (비대칭키)
키암호화·복호화에 같은 키공개키로 암호화, 개인키로 복호화 (또는 서명)
속도빠름느림
문제키를 어떻게 안전하게 나눠 갖나대량 데이터 암호화에 비효율
예AES, ChaCha20RSA, ECDHE(키 교환)

TLS는 둘을 섞는다. 처음에 공개키 방식(키 교환)으로 대칭키를 안전하게 만들고, 이후 실제 데이터는 빠른 대칭키로 암호화한다.

4. TLS 핸드셰이크 (TLS 1.2 기준 흐름)

  1. Client Hello: 지원하는 TLS 버전, 암호 스위트 목록, 클라이언트 랜덤 값
  2. Server Hello: 선택한 암호 스위트, 서버 랜덤 값, 서버 인증서
  3. 인증서 검증: 브라우저가 내장된 루트 CA로 인증서 체인의 서명을 확인하고, 도메인과 유효기간을 검사
  4. 키 교환: (EC)DHE로 양쪽이 같은 비밀 값(pre-master secret)을 만들고, 랜덤 값들과 합쳐 세션 키(대칭키) 생성
  5. Finished: 서로 세션 키로 암호화한 메시지를 주고받아 확인
  6. 이후 HTTP 데이터는 세션 키로 암호화해서 전송

TLS 1.3은 이 과정을 1-RTT(재접속 시 0-RTT)로 줄였고, 안전하지 않은 RSA 키 교환을 없앴다.

5. 인증서와 CA

용어설명
인증서도메인, 공개키, 발급자, 유효기간 + CA의 전자서명
CA (인증기관)인증서에 서명해 신원을 보증하는 기관 (Let's Encrypt 등)
루트 CA브라우저·OS에 미리 내장된 최상위 CA
인증서 체인서버 인증서 → 중간 CA → 루트 CA 순으로 서명을 따라가 검증

전자서명은 CA가 개인키로 서명하고 브라우저가 CA 공개키로 검증한다. 공격자가 가짜 서버를 세워도 신뢰된 CA의 서명을 받을 수 없으므로 경고가 뜬다.

6. 실제로 어떻게 적용되나

  1. 로드밸런서에서 TLS 종료: 쿠버네티스나 클라우드 환경에서는 보통 Ingress·로드밸런서가 HTTPS를 받아 복호화하고, 내부 서버에는 HTTP로 전달한다. 그래서 서버 코드에서 요청 스킴을 보면 http로 보이고, URL을 만들 때 X-Forwarded-Proto 헤더를 신뢰하도록 설정해야 https 링크가 나온다.
  2. Secure 쿠키: Secure 속성이 붙은 쿠키는 HTTPS에서만 전송된다. 로그인 세션 쿠키에는 필수다.
  3. Mixed Content: HTTPS 페이지에서 HTTP로 이미지나 스크립트를 불러오면 브라우저가 차단하거나 경고한다.
  4. HSTS: Strict-Transport-Security 헤더로 "앞으로 이 도메인은 HTTPS로만 접속하라"고 브라우저에 알려, 첫 HTTP 요청을 가로채는 공격을 줄인다.

7. 면접 질문으로 정리

  1. Q. HTTP와 HTTPS의 차이는? HTTPS는 HTTP에 TLS를 더해 데이터를 암호화하고, 인증서로 서버를 인증하며, 무결성을 보장한다. HTTP는 평문이라 도청과 변조에 취약하다.
  2. Q. HTTPS는 대칭키와 공개키 중 무엇을 쓰나? 둘 다 쓴다. 핸드셰이크에서 공개키 기반 키 교환으로 세션 키를 만들고, 이후 데이터는 빠른 대칭키로 암호화한다.
  3. Q. 인증서는 어떻게 검증하나? 브라우저에 내장된 루트 CA의 공개키로 인증서 체인의 전자서명을 차례로 확인하고, 도메인 일치와 유효기간, 폐기 여부를 검사한다.
  4. Q. HTTPS는 느린가? 최초 연결 시 핸드셰이크 비용이 있지만 TLS 1.3과 세션 재사용, HTTP/2로 대부분 상쇄되어 실제 체감 차이는 거의 없다.
Gunmo Lee
HTTP vs HTTPS 정리: TLS 핸드셰이크, 대칭키와 공개키, 인증서 | Gunmo's Dev Life