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 등의 메소드 제공

동작 방식

  1. 클라이언트가 서버에 HTTP 요청(Request) 전송
  2. 서버가 요청을 처리하고 HTTP 응답(Response) 반환
  3. 연결 종료 (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번 포트 사용
  • 인증서 기반: 서버 인증을 위한 디지털 인증서 사용
  • 데이터 무결성: 전송 중 데이터 변조 감지 가능
  • 검색 엔진 최적화: 구글 등 검색 엔진에서 우선순위 부여

동작 방식

  1. TLS 핸드셰이크: 클라이언트와 서버 간 보안 연결 설정
    1. 클라이언트가 서버에 연결 요청 (Client Hello)
    2. 서버가 인증서와 암호화 방식 제안 (Server Hello)
    3. 클라이언트가 인증서 검증 및 세션 키 생성
    4. 보안 연결 설정 완료
  2. HTTP 통신: 암호화된 채널을 통한 HTTP 요청/응답
  3. 연결 종료: 세션 종료 및 리소스 해제

인증서 (Certificate)

  • SSL/TLS 인증서: 서버의 신원을 확인하기 위한 디지털 문서
  • CA(Certificate Authority): 인증서 발급 및 관리하는 신뢰할 수 있는 기관
  • 유효 기간: 일정 기간 후 갱신 필요
  • 인증서 종류:
    • DV(Domain Validation): 도메인 소유권만 확인
    • OV(Organization Validation): 조직 정보 확인
    • EV(Extended Validation): 가장 엄격한 검증 과정

HTTP와 HTTPS 비교

HTTP vs HTTPS 비교
특성 HTTP HTTPS
보안 암호화 없음 TLS/SSL 암호화
데이터 무결성 보장 없음 보장
인증 서버 인증 없음 서버 인증 제공
포트 80 443
URL 시작 http:// https://
속도 상대적으로 빠름 암호화 과정으로 인한 약간의 오버헤드
SEO 영향 낮은 순위 높은 순위 (구글 우선순위)
인증서 필요 필요 없음 필요 (비용 발생 가능)

HTTPS 암호화 원리

HTTPS는 두 가지 암호화 방식을 결합하여 사용합니다:

비대칭키 암호화 (공개키 암호화)

  • 목적: 안전한 키 교환
  • 과정:
    1. 서버가 공개키(Public Key)와 개인키(Private Key) 쌍 생성
    2. 공개키는 인증서에 포함되어 클라이언트에 제공
    3. 클라이언트는 공개키로 데이터를 암호화
    4. 서버만 개인키로 복호화 가능

대칭키 암호화

  • 목적: 효율적인 데이터 암호화
  • 과정:
    1. 핸드셰이크 과정에서 임시 세션키(대칭키) 생성
    2. 세션키는 비대칭키 방식으로 안전하게 교환
    3. 이후 모든 통신은 세션키로 암호화/복호화

웹 보안의 중요성

HTTPS의 필요성

  • 개인정보 보호: 로그인 정보, 결제 정보 등 민감한 데이터 보호
  • 데이터 무결성 보장: 전송 중 데이터 변조 방지
  • 인증: 사용자가 접속하는 사이트의 진위 확인
  • SEO 향상: 검색 엔진 최적화에 긍정적 영향
  • 보안 인식: 사용자에게 보안 신뢰감 제공

최근 동향

  • 대부분의 주요 웹 브라우저(Chrome, Firefox 등)에서 HTTP 사이트는 "안전하지 않음" 경고 표시
  • Let's Encrypt와 같은 무료 인증서 발급 서비스의 등장으로 HTTPS 도입 장벽 낮아짐
  • HTTP/2, HTTP/3 등 새로운 프로토콜은 HTTPS를 기본으로 사용

구현 및 전환

HTTP에서 HTTPS로 전환 단계

  1. SSL/TLS 인증서 획득 (CA에서 구매 또는 Let's Encrypt 등에서 무료 발급)
  2. 웹 서버 구성 파일 수정 (Apache, Nginx 등)
  3. 443 포트 개방
  4. HTTP에서 HTTPS로 리다이렉션 설정
  5. 내부 리소스 링크 업데이트 (상대 경로 사용 권장)
  6. 보안 헤더 설정 (HSTS 등)

HTTPS 성능 최적화

  • TLS 세션 재사용: 핸드셰이크 오버헤드 감소
  • OCSP Stapling: 인증서 유효성 검사 효율화
  • HTTP/2 활성화: 다중화된 연결로 성능 향상
  • CDN 활용: 엣지 서버에서 TLS 종료

관련 주제

  • 웹 보안
  • SSL/TLS 프로토콜
  • PKI (공개키 인프라)
  • 인증서 관리
  • 중간자 공격 (MITM)
  • HTTP/2 및 HTTP/3
  • 콘텐츠 보안 정책 (CSP)