HTTP와 HTTPS는 웹에서 데이터를 주고받는 데 사용되는 프로토콜입니다. 두 프로토콜 모두 애플리케이션 계층의 프로토콜로, 클라이언트(보통 웹 브라우저)와 서버 간의 통신을 정의합니다. 하지만 보안과 관련된 큰 차이점이 존재하며, HTTPS는 HTTP의 보안 확장판이라고 할 수 있습니다.
개념 비교
| 항목 | HTTP (HyperText Transfer Protocol) | HTTPS (HTTP Secure or HTTP over SSL/TLS) |
|---|
| 목적 | 웹에서 데이터를 주고받기 위한 기본 프로토콜 | HTTP 통신에 보안(암호화, 인증, 무결성)을 추가 |
| 포트 | 기본적으로 80번 포트 사용 | 기본적으로 443번 포트 사용 |
| 보안성 | 데이터가 평문(Plain Text) 으로 전송되어 노출 가능 | 암호화된 채널로 전송되어 도청, 위변조 방지 |
| 인증서 사용 | 없음 | SSL/TLS 인증서 필요 (CA가 발급) |
| 프로토콜 스택 | HTTP 단독 | HTTP + TLS/SSL (암호화 계층이 추가됨) |
통신 구조의 차이
HTTP 구조
[클라이언트] --(평문 HTTP 요청)--> [서버]
[서버] --(평문 HTTP 응답)--> [클라이언트]
- 공격자가 중간에서 요청/응답을 쉽게 열람 또는 조작 가능 (MITM 공격에 취약)
- 데이터의 기밀성, 무결성, 인증 보장이 없음
HTTPS 구조 (TLS를 통한 암호화)
[클라이언트]
|
| 1. TCP 연결 (포트 443)
|
| 2. TLS Handshake (공개키 암호화 + 대칭키 교환)
|
| 3. TLS 세션 성립
|
| 4. 암호화된 HTTP 요청 및 응답
|
[서버]
- TLS Handshake 과정에서 공개키 인증서 검증 및 대칭키 교환 수행
- 이후 통신은 모두 대칭키 기반 암호화로 처리 → 빠르고 안전
HTTPS에서 보안이 강화되는 3가지 요소
| 요소 | 설명 |
|---|
| 기밀성 (Confidentiality) | TLS를 통해 데이터를 암호화하여 도청 방지 |
| 무결성 (Integrity) | 전송 중 데이터가 변경되지 않았음을 MAC, HMAC 등을 통해 보장 |
| 인증 (Authentication) | 서버가 신뢰할 수 있는 존재임을 디지털 인증서(CA 인증) 로 검증 |
TLS/SSL 작동 방식 (Handshake 과정 요약)
- Client Hello: 클라이언트가 사용할 수 있는 암호 스위트 목록과 TLS 버전 정보를 서버에 전달
- Server Hello: 서버가 사용할 암호 스위트, 공개키 인증서(X.509) 등을 전달
- 서버 인증서 검증: 클라이언트가 CA 체인을 통해 서버의 인증서 유효성 검사
- Pre-Master Secret 전송: 클라이언트가 서버의 공개키로 대칭키를 암호화해 전송
- 세션 키 생성: 양측이 공유한 대칭키로부터 세션 키 생성
- Finished 메시지 교환: 이후 모든 통신은 세션 키를 사용한 대칭키 암호화로 전송
HTTPS 인증서 관련
- 발급 주체: CA(Certificate Authority) — 예: Let's Encrypt, DigiCert, Sectigo 등
- 유형:
- DV (Domain Validation): 도메인 소유만 인증
- OV (Organization Validation): 조직 정보까지 검증
- EV (Extended Validation): 기업 신원까지 철저히 검증 (주소창에 회사 이름 노출)
- 유효기간: 보통 90일~1년 (Let's Encrypt는 90일)