HTTP와 TLS 간단 정리
HTTP 기본 통신 과정
sequenceDiagram
participant Client
participant Server
Client->>Server: TCP 3-way Handshake (SYN, SYN-ACK, ACK)
Client->>Server: HTTP Request (GET /index.html)
Server-->>Client: HTTP Response (200 OK, HTML Content)
Client->>Server: Additional Requests (CSS, JS, Images)
Server-->>Client: Additional Responses
Client->>Server: Keep-Alive or Connection Close
- TCP 3-way Handshake: 클라이언트와 서버 간 TCP 연결 수립
- HTTP Request/Response: 요청한 웹 페이지 데이터를 주고받음
- Keep-Alive: HTTP/1.1에서는 TCP 연결을 유지하여 성능 개선
HTTPS 적용 시 변경되는 과정
sequenceDiagram
participant Client
participant Server
Client->>Server: TCP 3-way Handshake
Client->>Server: TLS Handshake (ClientHello)
Server-->>Client: ServerHello + Certificate
Client->>Server: Key Exchange + Finished
Server-->>Client: Finished (Encrypted)
Client->>Server: Encrypted HTTP Request
Server-->>Client: Encrypted HTTP Response
- TLS Handshake 추가: 서버 인증서 확인 및 세션 키 교환
- 데이터 암호화 적용: 이후의 HTTP 요청과 응답이 암호화됨
HTTP 버전별 차이점
| HTTP 버전 |
TCP 세션 개수 |
특징 |
TLS 적용 시 차이점 |
| HTTP/1.1 |
여러 개 (보통 6개) |
Keep-Alive 지원, 동시 요청 불가 |
TCP 세션별 TLS 핸드셰이크 필요 (부하 증가) |
| HTTP/2 |
1개만 사용 |
멀티플렉싱 지원, 헤더 압축(HPACK) |
1개의 TLS 핸드셰이크만 필요 (성능 향상) |
| HTTP/3 |
1개만 사용 (UDP 기반) |
QUIC 사용, 0-RTT 지원 |
TCP 핸드셰이크 없음, TLS 내장 (최적화됨) |
- HTTP/3는 UDP 기반이므로 Keep-Alive 개념이 없음, TLS 1.3 필수 적용됨 → 핸드셰이크 속도가 빠름
TLS 버전별 차이점
| TLS 버전 |
핸드셰이크 RTT |
암호화 방식 |
특징 |
| TLS 1.0 / 1.1 |
2-RTT |
CBC 모드 지원 |
보안 취약, 지원 중단 |
| TLS 1.2 |
2-RTT |
AES-GCM, SHA-256 지원 |
RSA 키 교환 가능, PFS 선택적 적용 |
| TLS 1.3 |
1-RTT, 0-RTT |
AES-GCM, ChaCha20 |
PFS 강제 적용, 0-RTT 지원 |
- TLS 1.3에서는 0-RTT를 통해 세션 복구 속도를 대폭 개선
- TLS 1.2는 RSA 기반 키 교환을 지원하지만, TLS 1.3에서는 (EC)DHE 또는 PSK 기반 키 교환만 사용(정적 RSA 키 교환 제거)
TLS 1.3에서 0-RTT(Zero-RTT) 동작 원리
sequenceDiagram
participant Client
participant Server
Client->>Server: ClientHello + Early Data (0-RTT)
Server-->>Client: ServerHello + Finished
Server-->>Client: Processing Early Data
Client->>Server: Secure HTTP Request
Server-->>Client: Secure HTTP Response
- 0-RTT(Zero-RTT): 과거 TLS 세션 정보를 활용하여 핸드셰이크 없이 즉시 데이터 전송
- 보안 이슈: 리플레이 공격 가능성이 있음 → 서버에서 제한적으로 허용
프리마스터 키(Pre-Master Secret)와 세션 키의 차이
| 개념 |
설명 |
| 프리마스터 키 |
클라이언트가 생성하여 서버로 전송하는 임시 키 |
| 어떻게 사용됨? |
서버가 복호화하여 Master Secret 생성, 이후 세션 키 유도 |
| 세션 키(Session Key) |
최종적으로 데이터를 암호화하는 키 |
| TLS 1.2와 TLS 1.3 차이점 |
TLS 1.2는 RSA 기반 전달 가능, TLS 1.3은 ECDHE로 협상 |
- 프리마스터 키는 한 번 사용되며, 이후 모든 암호화는 세션 키로 수행
TLS 1.2에서 ECDHE 사용 시 단점
| 단점 |
설명 |
| CPU 부하 증가 |
임시 키 생성·서명 연산 추가 (정적 RSA 키 교환 대비) |
| 세션 키 자체 재사용 불가 |
임시 키라 세션 키 재사용은 불가하나 session ID/ticket 재개는 정상 동작 |
| 메모리 사용 증가 |
클라이언트별 임시 키 저장 필요 |
- TLS 1.3에서는 키 교환 과정을 최적화하여 이러한 단점을 해결함