HTTP vs HTTPS
기술노트
HTTP vs HTTPS
개요
HTTP(HyperText Transfer Protocol)와 HTTPS(HyperText Transfer Protocol Secure)는 웹 브라우저와 웹 서버 간의 데이터 전송을 위한 프로토콜입니다. 두 프로토콜의 주요 차이점은 보안 레이어의 유무로, HTTPS는 HTTP에 보안 기능이 추가된 형태입니다.
HTTP (HyperText Transfer Protocol)
정의
HTTP는 웹 상에서 정보를 주고받기 위한 프로토콜로, 클라이언트와 서버 간의 요청-응답 방식으로 동작합니다. 1989년 Tim Berners-Lee에 의해 처음 설계되었으며 인터넷의 기본 통신 프로토콜로 사용되고 있습니다.
특징
- 평문 통신: 데이터가 암호화 없이 전송됨
- 기본 포트: 80번 포트 사용
- 무상태(Stateless): 각 요청이 독립적으로 처리됨
- 확장성: 헤더를 통한 다양한 확장 가능
- REST 기반: GET, POST, PUT, DELETE 등의 메소드 제공
동작 방식
- 클라이언트가 서버에 HTTP 요청(Request) 전송
- 서버가 요청을 처리하고 HTTP 응답(Response) 반환
- 연결 종료 (HTTP/1.0) 또는 연결 유지 (HTTP/1.1 이상의 Keep-Alive)
취약점
- 도청 위험: 데이터가 암호화되지 않아 네트워크 패킷 캡처 시 내용 노출
- 데이터 변조 위험: 중간자 공격(Man-in-the-Middle)에 취약
- 신원 확인 불가: 서버 인증 메커니즘 부재
HTTPS (HyperText Transfer Protocol Secure)
정의
HTTPS는 HTTP에 TLS/SSL(Transport Layer Security/Secure Sockets Layer) 보안 계층을 추가한 프로토콜입니다. 웹 통신의 암호화와 인증을 제공하여 보안을 강화합니다.
특징
- 암호화 통신: TLS/SSL을 이용한 데이터 암호화
- 기본 포트: 443번 포트 사용
- 인증서 기반: 서버 인증을 위한 디지털 인증서 사용
- 데이터 무결성: 전송 중 데이터 변조 감지 가능
- 검색 엔진 최적화: 구글 등 검색 엔진에서 우선순위 부여
동작 방식
- TLS 핸드셰이크: 클라이언트와 서버 간 보안 연결 설정
- 클라이언트가 서버에 연결 요청 (Client Hello)
- 서버가 인증서와 암호화 방식 제안 (Server Hello)
- 클라이언트가 인증서 검증 및 세션 키 생성
- 보안 연결 설정 완료
- HTTP 통신: 암호화된 채널을 통한 HTTP 요청/응답
- 연결 종료: 세션 종료 및 리소스 해제
인증서 (Certificate)
- SSL/TLS 인증서: 서버의 신원을 확인하기 위한 디지털 문서
- CA(Certificate Authority): 인증서 발급 및 관리하는 신뢰할 수 있는 기관
- 유효 기간: 일정 기간 후 갱신 필요
- 인증서 종류:
- DV(Domain Validation): 도메인 소유권만 확인
- OV(Organization Validation): 조직 정보 확인
- EV(Extended Validation): 가장 엄격한 검증 과정
HTTP와 HTTPS 비교
특성 | HTTP | HTTPS |
---|---|---|
보안 | 암호화 없음 | TLS/SSL 암호화 |
데이터 무결성 | 보장 없음 | 보장 |
인증 | 서버 인증 없음 | 서버 인증 제공 |
포트 | 80 | 443 |
URL 시작 | http:// | https:// |
속도 | 상대적으로 빠름 | 암호화 과정으로 인한 약간의 오버헤드 |
SEO 영향 | 낮은 순위 | 높은 순위 (구글 우선순위) |
인증서 필요 | 필요 없음 | 필요 (비용 발생 가능) |
HTTPS 암호화 원리
HTTPS는 두 가지 암호화 방식을 결합하여 사용합니다:
비대칭키 암호화 (공개키 암호화)
- 목적: 안전한 키 교환
- 과정:
- 서버가 공개키(Public Key)와 개인키(Private Key) 쌍 생성
- 공개키는 인증서에 포함되어 클라이언트에 제공
- 클라이언트는 공개키로 데이터를 암호화
- 서버만 개인키로 복호화 가능
대칭키 암호화
- 목적: 효율적인 데이터 암호화
- 과정:
- 핸드셰이크 과정에서 임시 세션키(대칭키) 생성
- 세션키는 비대칭키 방식으로 안전하게 교환
- 이후 모든 통신은 세션키로 암호화/복호화
웹 보안의 중요성
HTTPS의 필요성
- 개인정보 보호: 로그인 정보, 결제 정보 등 민감한 데이터 보호
- 데이터 무결성 보장: 전송 중 데이터 변조 방지
- 인증: 사용자가 접속하는 사이트의 진위 확인
- SEO 향상: 검색 엔진 최적화에 긍정적 영향
- 보안 인식: 사용자에게 보안 신뢰감 제공
최근 동향
- 대부분의 주요 웹 브라우저(Chrome, Firefox 등)에서 HTTP 사이트는 "안전하지 않음" 경고 표시
- Let's Encrypt와 같은 무료 인증서 발급 서비스의 등장으로 HTTPS 도입 장벽 낮아짐
- HTTP/2, HTTP/3 등 새로운 프로토콜은 HTTPS를 기본으로 사용
구현 및 전환
HTTP에서 HTTPS로 전환 단계
- SSL/TLS 인증서 획득 (CA에서 구매 또는 Let's Encrypt 등에서 무료 발급)
- 웹 서버 구성 파일 수정 (Apache, Nginx 등)
- 443 포트 개방
- HTTP에서 HTTPS로 리다이렉션 설정
- 내부 리소스 링크 업데이트 (상대 경로 사용 권장)
- 보안 헤더 설정 (HSTS 등)
HTTPS 성능 최적화
- TLS 세션 재사용: 핸드셰이크 오버헤드 감소
- OCSP Stapling: 인증서 유효성 검사 효율화
- HTTP/2 활성화: 다중화된 연결로 성능 향상
- CDN 활용: 엣지 서버에서 TLS 종료
관련 주제
- 웹 보안
- SSL/TLS 프로토콜
- PKI (공개키 인프라)
- 인증서 관리
- 중간자 공격 (MITM)
- HTTP/2 및 HTTP/3
- 콘텐츠 보안 정책 (CSP)