HTTP는 인터넷상에서 클라이언트(브라우저)와 서버가 문서(HTML), 이미지, 데이터 등을 주고받기 위해 사용하는 표준 통신 규약이다.
HTTP는 데이터를 아무런 암호화 없이 평문 그대로 전송한다.
[클라이언트] --- "ID: admin / PW: 1234" (평문) ---> [서버]
▲
[네트워크 패킷 스니핑 공격자]
(중간에서 데이터 그대로 열람 가능)
HTTPS는 기존 HTTP 프로토콜에 SSL/TLS(Transport Layer Security) 암호화 프로토콜을 얹어 데이터를 보호하는 보안 통신 규약이다. 기본 포트로 HTTP는 80, HTTPS는 443을 사용한다.
[클라이언트] --- "a8f!9#z1$kL..." (암호화) ---> [서버]
▲
[공격자 (내용 해독 불가)]
HTTPS는 효율적인 암호화를 위해 대칭키 암호화와 공개키(비대칭키) 암호화 방식을 혼합하여 사용한다.
| 구분 | 대칭키(Symmetric Key) 암호화 | 공개키(Public Key / Asymmetric) 암호화 |
|---|---|---|
| 원리 | 암호화와 복호화에 동일한 키 사용 | 공개키(암호화용)와 개인키(복호화용) 한 쌍 사용 |
| 장점 | 연산 속도가 매우 빠름 | 키 전달 시 유출 위험이 없음 (안전한 키 교환) |
| 단점 | 키를 상대방에게 전달할 때 유출 위험 존재 | 연산 속도가 느려 대용량 데이터 전송에 부적합 |
💡 HTTPS의 하이브리드 메커니즘:
속도가 느린 공개키 암호화는 최초 접속 시 '데이터를 암호화할 대칭키(세션키)'를 안전하게 공유하는 용도로만 사용하고, 실제로 데이터를 주고받을 때는 속도가 빠른 대칭키 암호화를 이용함.
클라이언트와 서버가 HTTPS 통신을 시작하기 전, 안전하게 암호화 키를 교환하고 인증서를 검증하는 과정을 Handshake라고 함.
[Client] [Server]
| |
| -------- (1) Client Hello (지원 cipher suite) -----> |
| <------- (2) Server Hello + CA 인증서 -------------- |
| |
| [3. 인증서 검증 (CA 공개키로 서명 확인)] |
| [4. Pre-Master Secret 생성 및 서버 공개키로 암호화] |
| |
| -------- (5) 암호화된 Pre-Master Secret 전송 ------> |
| |
| [6. 양쪽 모두 세션키(대칭키) 생성 완료] |
| |
| <====== (7) 대칭키 기반의 안전한 암호화 통신 ======> |
Secure 및 HttpOnly 플래그를 설정하여 네트워크 스니핑 및 XSS로 인한 탈취 방지.