Network_05) 복수가 아닙니다... https
2026. 1. 26. 08:24

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의 주요 특징

  1. 평문 전송 (Plain Text)

    • 데이터가 암호화되지 않은 상태로 전송
    • 중간에 패킷을 가로채면 내용을 볼 수 있음
  2. 포트 번호: 80

    http://example.com:80
  3. 상태 없음 (Stateless)

    • 각 요청은 독립적
    • 이전 요청 정보를 기억하지 않음
  4. 요청-응답 모델

    클라이언트 → 서버: 요청 (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의 보안 문제점

  1. 도청 (Eavesdropping)

    • 네트워크에서 패킷을 가로채면 내용 확인 가능
      클라이언트 → 서버: "비밀번호: 1234"
      [공격자가 패킷 가로채기]
      공격자: "비밀번호가 1234구나!"
  2. 중간자 공격 (MITM - Man-In-The-Middle)

    • 공격자가 중간에서 통신을 가로채고 변조
      클라이언트 → [공격자] → 서버
      [공격자가 데이터를 변조하거나 가로챔]
  3. 데이터 변조 (Tampering)

    • 전송 중 데이터가 변조될 수 있음
      원본: "송금: 1000원"
      변조: "송금: 10000원"
  4. 피싱 (Phishing)

    • 가짜 웹사이트로 사용자를 유도

2. HTTPS (HyperText Transfer Protocol Secure)란?

HTTPS의 정의

HTTPS(HyperText Transfer Protocol Secure)는 HTTP에 SSL/TLS 암호화를 추가한 보안 강화 버전입니다.

HTTPS의 주요 특징

  1. 암호화 전송 (Encrypted)

    • 데이터가 암호화되어 전송
    • 중간에 패킷을 가로채도 내용을 볼 수 없음
  2. 포트 번호: 443

    https://example.com:443
  3. 인증서 기반 인증

    • 서버의 신원을 확인
    • 가짜 서버 방지
  4. 데이터 무결성 보장

    • 전송 중 데이터 변조 감지

HTTPS의 보안 기능

  1. 기밀성 (Confidentiality)

    • 데이터 암호화로 내용 보호
  2. 무결성 (Integrity)

    • 데이터 변조 감지 및 방지
  3. 인증 (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의 역할

  1. 대칭 키 암호화

    • 실제 데이터 전송 시 사용
    • 빠른 암호화/복호화
  2. 비대칭 키 암호화

    • 대칭 키를 안전하게 교환하기 위해 사용
    • 공개키/개인키 쌍 사용
  3. 인증서 검증

    • 서버의 신원 확인
    • 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가 발급)
- 서버 공개키

클라이언트의 인증서 검증:

  1. 인증서가 유효한 CA에서 발급되었는지 확인
  2. 인증서가 만료되지 않았는지 확인
  3. 인증서의 도메인이 일치하는지 확인

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)는 서버의 신원을 증명하는 디지털 문서입니다.

인증서의 구성 요소

  1. 서버 정보

    • 도메인 이름
    • 조직 정보
  2. 서버 공개키

    • 클라이언트가 대칭 키를 암호화할 때 사용
  3. CA 서명

    • 신뢰할 수 있는 CA(Certificate Authority)가 서명
    • 인증서의 진위 확인

CA (Certificate Authority)란?

CA(Certificate Authority)는 인증서를 발급하는 신뢰할 수 있는 기관입니다.

주요 CA:

  • Let's Encrypt (무료)
  • DigiCert
  • GlobalSign
  • Symantec

CA의 역할:

  1. 서버의 신원 확인
  2. 인증서 발급
  3. 인증서 서명

인증서 검증 과정

클라이언트가 서버 인증서를 받음
    ↓
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의 오버헤드

  1. SSL/TLS Handshake

    • 초기 연결 시 추가 시간 소요
    • 약 100-200ms 추가
  2. 암호화/복호화

    • CPU 사용량 증가
    • 약 2-5% 성능 저하
  3. 인증서 검증

    • 인증서 검증 시간
    • 약간의 지연

성능 최적화

  1. TLS 1.3 사용

    • Handshake 시간 단축
    • 0-RTT 지원
  2. 세션 재사용 (Session Resumption)

    • 이전 세션 정보 재사용
    • Handshake 생략
  3. 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를 사용해야 하며, 보안 이점이 성능 저하보다 훨씬 큽니다.


참고 자료


예상 꼬리질문 정리

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에서의 사용:

  1. 비대칭 키로 대칭 키를 안전하게 교환
  2. 대칭 키로 실제 데이터 암호화

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는 지원하지 않음

이유:

  • 보안을 강제하기 위함
  • 모든 통신을 암호화