Topic (오늘의 주제)
HTTP(HyperText Transfer Protocol)와 HTTPS(HyperText Transfer Protocol Secure)는 웹에서 데이터를 전송하는 프로토콜입니다. HTTPS는 HTTP에 SSL/TLS 암호화를 추가하여 데이터의 기밀성, 무결성, 인증을 보장하는 보안 강화 버전입니다.
Why (왜 사용하는가? 왜 중요한가?)
HTTP는 평문으로 데이터를 전송하므로 중간에 패킷을 가로채면 내용을 볼 수 있습니다. HTTPS는 SSL/TLS 암호화를 통해 데이터를 암호화하여 중간자 공격(MITM), 데이터 변조, 피싱 공격을 방지합니다. 특히 로그인, 결제, 개인정보 전송 시 HTTPS는 필수입니다.
HTTP와 HTTPS의 차이점(암호화, 포트 번호, 인증서, 성능), SSL/TLS의 동작 원리, 인증서의 역할, 그리고 HTTPS의 보안 메커니즘을 이해해야 합니다.
1. HTTP (HyperText Transfer Protocol)란?
HTTP의 정의
HTTP(HyperText Transfer Protocol)는 웹 브라우저와 웹 서버 간에 데이터를 주고받기 위한 애플리케이션 계층 프로토콜입니다.
HTTP의 주요 특징
평문 전송 (Plain Text)
- 데이터가 암호화되지 않은 상태로 전송
- 중간에 패킷을 가로채면 내용을 볼 수 있음
포트 번호: 80
http://example.com:80상태 없음 (Stateless)
- 각 요청은 독립적
- 이전 요청 정보를 기억하지 않음
요청-응답 모델
클라이언트 → 서버: 요청 (Request) 서버 → 클라이언트: 응답 (Response)
HTTP 요청/응답 예시
요청:
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
응답:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<html>...</html>
HTTP의 보안 문제점
도청 (Eavesdropping)
- 네트워크에서 패킷을 가로채면 내용 확인 가능
클라이언트 → 서버: "비밀번호: 1234" [공격자가 패킷 가로채기] 공격자: "비밀번호가 1234구나!"
- 네트워크에서 패킷을 가로채면 내용 확인 가능
중간자 공격 (MITM - Man-In-The-Middle)
- 공격자가 중간에서 통신을 가로채고 변조
클라이언트 → [공격자] → 서버 [공격자가 데이터를 변조하거나 가로챔]
- 공격자가 중간에서 통신을 가로채고 변조
데이터 변조 (Tampering)
- 전송 중 데이터가 변조될 수 있음
원본: "송금: 1000원" 변조: "송금: 10000원"
- 전송 중 데이터가 변조될 수 있음
피싱 (Phishing)
- 가짜 웹사이트로 사용자를 유도
2. HTTPS (HyperText Transfer Protocol Secure)란?
HTTPS의 정의
HTTPS(HyperText Transfer Protocol Secure)는 HTTP에 SSL/TLS 암호화를 추가한 보안 강화 버전입니다.
HTTPS의 주요 특징
암호화 전송 (Encrypted)
- 데이터가 암호화되어 전송
- 중간에 패킷을 가로채도 내용을 볼 수 없음
포트 번호: 443
https://example.com:443인증서 기반 인증
- 서버의 신원을 확인
- 가짜 서버 방지
데이터 무결성 보장
- 전송 중 데이터 변조 감지
HTTPS의 보안 기능
기밀성 (Confidentiality)
- 데이터 암호화로 내용 보호
무결성 (Integrity)
- 데이터 변조 감지 및 방지
인증 (Authentication)
- 서버의 신원 확인
3. HTTP vs HTTPS 비교
핵심 차이점
| 구분 | HTTP | HTTPS |
|---|---|---|
| 프로토콜 | HTTP | HTTP + SSL/TLS |
| 포트 번호 | 80 | 443 |
| 암호화 | 없음 (평문) | 있음 (암호화) |
| 인증서 | 불필요 | 필요 (CA 발급) |
| 보안 | 취약 | 강함 |
| 속도 | 빠름 | 상대적으로 느림 (암호화/복호화 오버헤드) |
| SEO | 불리 | 유리 (검색 엔진이 HTTPS 우선) |
| 브라우저 표시 | 🔓 (자물쇠 없음) | 🔒 (자물쇠 표시) |
데이터 전송 비교
HTTP (평문 전송):
클라이언트 서버
| |
|---- "비밀번호: 1234" --->| [평문으로 전송]
| |
[공격자가 패킷 가로채기]
공격자: "비밀번호가 1234구나!"HTTPS (암호화 전송):
클라이언트 서버
| |
|---- "a8f5f167f44f4..." -->| [암호화된 데이터]
| |
[공격자가 패킷 가로채기]
공격자: "무슨 내용인지 모르겠다..."4. SSL/TLS란?
SSL/TLS의 정의
SSL(Secure Sockets Layer)과 TLS(Transport Layer Security)는 전송 계층에서 데이터를 암호화하는 프로토콜입니다.
역사:
- SSL 1.0, 2.0, 3.0 (구식, 사용 안 함)
- TLS 1.0, 1.1 (사용 안 함, 보안 취약)
- TLS 1.2, 1.3 (현재 사용)
SSL/TLS의 역할
대칭 키 암호화
- 실제 데이터 전송 시 사용
- 빠른 암호화/복호화
비대칭 키 암호화
- 대칭 키를 안전하게 교환하기 위해 사용
- 공개키/개인키 쌍 사용
인증서 검증
- 서버의 신원 확인
- CA(Certificate Authority)가 발급한 인증서 확인
5. HTTPS의 동작 원리 (SSL/TLS Handshake)
전체 흐름
클라이언트 서버
| |
|---- Client Hello ------>| [1단계: 클라이언트가 지원하는 암호화 방식 전송]
| |
|<--- Server Hello -------| [2단계: 서버가 선택한 암호화 방식 전송]
| Certificate | [3단계: 서버 인증서 전송]
| Server Hello Done |
| |
|---- Client Key Exchange->| [4단계: 대칭 키 전송 (서버 공개키로 암호화)]
| Change Cipher Spec | [5단계: 암호화 시작 알림]
| Finished |
| |
|<--- Change Cipher Spec --| [6단계: 서버도 암호화 시작]
| Finished |
| |
[암호화된 통신 시작]
| |
|<==== 암호화된 데이터 ====>| [7단계: 실제 데이터 전송]
| |1단계: Client Hello
클라이언트 → 서버
클라이언트가 서버에 연결을 요청합니다.
전송 내용:
- 지원하는 TLS 버전
- 지원하는 암호화 알고리즘 목록
- 클라이언트 랜덤 값 (Client Random)2단계: Server Hello
서버 → 클라이언트
서버가 클라이언트의 요청에 응답합니다.
전송 내용:
- 선택한 TLS 버전
- 선택한 암호화 알고리즘
- 서버 랜덤 값 (Server Random)3단계: Certificate (인증서 전송)
서버 → 클라이언트
서버가 자신의 인증서를 전송합니다.
전송 내용:
- 서버 인증서 (CA가 발급)
- 서버 공개키클라이언트의 인증서 검증:
- 인증서가 유효한 CA에서 발급되었는지 확인
- 인증서가 만료되지 않았는지 확인
- 인증서의 도메인이 일치하는지 확인
4단계: Client Key Exchange
클라이언트 → 서버
클라이언트가 대칭 키(세션 키)를 생성하고 서버 공개키로 암호화하여 전송합니다.
과정:
1. 클라이언트가 대칭 키 생성 (Pre-Master Secret)
2. 서버 공개키로 암호화
3. 서버에 전송서버의 처리:
- 서버 개인키로 복호화하여 대칭 키 획득
5-6단계: Change Cipher Spec & Finished
양쪽 모두 암호화 시작을 알립니다.
클라이언트와 서버가 모두:
1. Change Cipher Spec: 암호화 시작 알림
2. Finished: 핸드셰이크 완료 확인7단계: 암호화된 통신
이제 모든 데이터가 암호화되어 전송됩니다.
클라이언트 서버
| |
|<==== 암호화된 HTTP 데이터 ====>|
| |6. 인증서 (Certificate)란?
인증서의 정의
인증서(Certificate)는 서버의 신원을 증명하는 디지털 문서입니다.
인증서의 구성 요소
서버 정보
- 도메인 이름
- 조직 정보
서버 공개키
- 클라이언트가 대칭 키를 암호화할 때 사용
CA 서명
- 신뢰할 수 있는 CA(Certificate Authority)가 서명
- 인증서의 진위 확인
CA (Certificate Authority)란?
CA(Certificate Authority)는 인증서를 발급하는 신뢰할 수 있는 기관입니다.
주요 CA:
- Let's Encrypt (무료)
- DigiCert
- GlobalSign
- Symantec
CA의 역할:
- 서버의 신원 확인
- 인증서 발급
- 인증서 서명
인증서 검증 과정
클라이언트가 서버 인증서를 받음
↓
1. 인증서가 유효한 CA에서 발급되었는지 확인
↓
2. 인증서가 만료되지 않았는지 확인
↓
3. 인증서의 도메인이 현재 접속한 도메인과 일치하는지 확인
↓
4. 모든 검증 통과 → 서버 신뢰
검증 실패 → 경고 표시7. HTTPS의 보안 메커니즘
1. 기밀성 (Confidentiality)
대칭 키 암호화로 데이터 보호:
평문: "비밀번호: 1234"
암호화: "a8f5f167f44f4..."공격자가 패킷을 가로채도:
- 암호화된 데이터만 볼 수 있음
- 대칭 키를 모르면 복호화 불가능
2. 무결성 (Integrity)
해시 함수로 데이터 변조 감지:
원본 데이터 → 해시 값 계산
전송 중 변조 → 해시 값이 달라짐
→ 변조 감지MAC (Message Authentication Code):
- 데이터와 함께 MAC 전송
- 수신자가 MAC을 검증하여 변조 여부 확인
3. 인증 (Authentication)
인증서로 서버 신원 확인:
서버가 인증서를 제시
클라이언트가 CA를 통해 인증서 검증
→ 가짜 서버 방지8. HTTP vs HTTPS 성능 비교
HTTPS의 오버헤드
SSL/TLS Handshake
- 초기 연결 시 추가 시간 소요
- 약 100-200ms 추가
암호화/복호화
- CPU 사용량 증가
- 약 2-5% 성능 저하
인증서 검증
- 인증서 검증 시간
- 약간의 지연
성능 최적화
TLS 1.3 사용
- Handshake 시간 단축
- 0-RTT 지원
세션 재사용 (Session Resumption)
- 이전 세션 정보 재사용
- Handshake 생략
HTTP/2 사용
- 멀티플렉싱으로 성능 향상
- HTTPS와 함께 사용
결론:
- 현대 하드웨어에서는 HTTPS 오버헤드가 미미함
- 보안 이점이 성능 저하보다 훨씬 큼
- 모든 웹사이트는 HTTPS를 사용해야 함
9. 언제 HTTP를 사용하고 언제 HTTPS를 사용할까?
HTTP를 사용해야 하는 경우
- ❌ 거의 없음 (현재는 권장하지 않음)
- 개발/테스트 환경 (로컬 개발)
- 내부 네트워크 (이미 보안된 환경)
HTTPS를 사용해야 하는 경우
- ✅ 모든 공개 웹사이트 (필수)
- ✅ 로그인 페이지
- ✅ 결제 페이지
- ✅ 개인정보 입력 페이지
- ✅ API 서버
- ✅ 모바일 앱 백엔드
현재 추세:
- 모든 주요 웹사이트가 HTTPS 사용
- 브라우저가 HTTP 사이트에 경고 표시
- 검색 엔진이 HTTPS 사이트 우선 노출
요약
HTTP는 평문으로 데이터를 전송하는 프로토콜로, 포트 80을 사용합니다. 중간에 패킷을 가로채면 내용을 볼 수 있어 보안에 취약합니다.
HTTPS는 HTTP에 SSL/TLS 암호화를 추가한 보안 강화 버전으로, 포트 443을 사용합니다. 데이터를 암호화하여 기밀성, 무결성, 인증을 보장합니다.
SSL/TLS Handshake를 통해 서버 인증서를 검증하고 대칭 키를 안전하게 교환한 후, 암호화된 통신을 시작합니다.
현재는 모든 공개 웹사이트에서 HTTPS를 사용해야 하며, 보안 이점이 성능 저하보다 훨씬 큽니다.
참고 자료
- RFC 7230 - HTTP/1.1 Message Syntax and Routing
- RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3
- Let's Encrypt - 무료 SSL/TLS 인증서
- MDN Web Docs - HTTPS
예상 꼬리질문 정리
1. SSL과 TLS의 차이는?
역사적 차이:
SSL (Secure Sockets Layer): Netscape가 개발 (1994년)
- SSL 1.0, 2.0, 3.0
- 현재 사용 안 함 (보안 취약)
TLS (Transport Layer Security): IETF가 SSL 3.0을 기반으로 개발 (1999년)
- TLS 1.0, 1.1, 1.2, 1.3
- 현재 TLS 1.2, 1.3 사용
현재:
- "SSL"이라고 부르지만 실제로는 "TLS"를 사용
- 용어는 혼용되지만 기술적으로는 TLS
2. 대칭 키와 비대칭 키 암호화의 차이는?
대칭 키 암호화 (Symmetric Key Encryption):
- 같은 키로 암호화/복호화
- 빠름 (실제 데이터 전송에 사용)
- 키 교환이 어려움
비대칭 키 암호화 (Asymmetric Key Encryption):
- 공개키/개인키 쌍 사용
- 느림 (대칭 키 교환에만 사용)
- 공개키는 공개, 개인키는 비공개
HTTPS에서의 사용:
- 비대칭 키로 대칭 키를 안전하게 교환
- 대칭 키로 실제 데이터 암호화
3. 인증서가 없으면 어떻게 되나?
자체 서명 인증서 (Self-Signed Certificate):
- CA 없이 자체적으로 서명한 인증서
- 브라우저가 "신뢰할 수 없는 연결" 경고 표시
- 개발/테스트 환경에서만 사용
인증서 없이 HTTPS 사용 불가:
- HTTPS는 인증서가 필수
- 인증서 없으면 Handshake 실패
해결 방법:
- Let's Encrypt 등에서 무료 인증서 발급
- 상용 CA에서 유료 인증서 구매
4. HTTPS는 완전히 안전한가?
HTTPS의 한계:
- 서버 측 보안 문제는 해결하지 못함
- 클라이언트 측 보안 문제는 해결하지 못함
- 인증서 관리 오류 (만료, 도메인 불일치)
- 약한 암호화 알고리즘 사용
추가 보안 필요:
- 서버 보안 강화
- 클라이언트 보안 강화
- 정기적인 보안 업데이트
- 보안 모니터링
결론:
- HTTPS는 필수이지만 완전한 보안은 아님
- 여러 보안 계층을 함께 사용해야 함
5. HTTP/2와 HTTPS의 관계는?
HTTP/2:
- HTTP 프로토콜의 개선 버전
- 멀티플렉싱, 헤더 압축 등 성능 향상
HTTPS와의 관계:
- HTTP/2는 HTTPS를 필수로 요구
- 대부분의 브라우저가 HTTP/2 over HTTPS만 지원
- HTTP/2 over HTTP는 지원하지 않음
이유:
- 보안을 강제하기 위함
- 모든 통신을 암호화
'Network' 카테고리의 다른 글
| Network_06) 촉촉한 brower Cookie (0) | 2026.01.26 |
|---|---|
| Network_04) 직역하지 마세요. 조회하고 게시하는 get, post (0) | 2026.01.26 |
| Network_03) 손 3개가 아닌 3개의 단계별 악수법 입니다. (0) | 2026.01.26 |
| Network_02) 연결해서 통하면 천천히, 연결 없으면 빠르게 (1) | 2026.01.23 |
| Network_01) Dnsrolly 딜레마 (0) | 2026.01.19 |