[CS] HTTP, HTTPS, TLS

최지나·2023년 11월 17일
2

CS

목록 보기
19/55
post-thumbnail

HTTP Header

  • HTTP에서는 요청 시 header와 body를 주고받음 헤더는 콜론으로 구분되는 key-value 형태로 다양한 정보를 담고 있음

HTTP 헤더의 종류

  1. 일반 헤더:
  • 요청한 URL, 요청 메서드, 출처 정책 등의 정보를 포함한다.
  • 보안 수준에 따라 자원 출처 노출 여부 등이 설정된다.
  1. ⭐요청 헤더:
  • 클라이언트가 서버에 요청할 때 클라이언트가 설정하거나 자동으로 설정되는 헤더이다.
  • 예를 들어, 요청 메서드, 클라이언트의 OS, 브라우저 정보, 사용자 커스텀 헤더 등이 요청 헤더에 포함된다.
  1. ⭐응답 헤더:
  • 서버가 클라이언트에게 응답할 때 설정되는 헤더이다.
  • 서버의 소프트웨어 정보 등이 응답 헤더에 담긴다.
    • 대부분의 서버는 보안상의 이유로 서버 정보를 숨기기 위해 응답 헤더에서 해당 정보를 노출하지 않는다

HTTP/1.0 vs. HTTP/1.1: 발전과 문제

1. HTTP/1.0

  • 수명이 짧은 연결
  • 각 요청마다 TCP 핸드셰이크가 필요, 한 연결당 하나의 요청 처리 => RTT가 늘어나는 문제점 존재
  • 리소스마다 TCP 연결 필요: keep-alive 옵션을 설정해야지만 연결이 유지

2. HTTP/1.1

  • Keep-Alive 기본 활성화:매번 요청마다 TCP 연결을 재설정하는 것이 아니라 유지 가능.
  • 호스트 헤더 도입: 여러 호스트를 지원하기 위해 헤더에 호스트 정보 추가.
  • 대역폭 최적화: 중간에 연결이 끊겨도 다운로드 재개 가능 (Range 헤더 활용).

3. 요청을 줄이기 위한 기술

  • 이미지 스프라이트: 여러 이미지를 하나의 이미지로 결합, 단일 요청으로 처리.
  • 코드 압축: 띄어쓰기, 개행문자 등을 줄여 코드 크기 최적화.
  • 이미지 Base64 인코딩: 이미지를 문자열로 인코딩, 별도의 이미지 요청 없이 사용 가능.

4. HTTP/1.1의 문제: HOL (Head of Line Blocking)

  • HOL 현상 발생: 네트워크에서 첫 번째 패킷 지연으로 인해 뒷부분 패킷도 지연.
  • 큰 헤더와 HOL로 인한 성능 저하 발생.

HTTP/1.1은 많은 개선을 이뤘지만 HOL과 무거운 헤더로 인한 문제를 완전히 해결하지 못함. 여전히 최적의 성능을 위해 여러 기술이 함께 활용됨.

HTTP/2 vs. HTTP/3: 개요

1. HTTP/2

  • 바이너리 포맷 계층
    • HTTP/2에서는 애플리케이션 계층과 전송 계층 사이에 바이너리 포맷 계층을 추가하여 데이터를 전송.
    • 전송되는 메시지는 작은 프레임으로 분할되어 전송됨.
  • 멀티 플렉싱
    • 단일 TCP 연결의 여러 스트림에서 비동기적으로 다수의 HTTP 요청과 응답 처리.
    • HOL 문제를 해결하며, 병렬적이고 효율적인 데이터 다운로드 가능.
  • 서버 푸시
    • 서버가 클라이언트에게 필요한 리소스를 알아서 푸시 가능.
    • 예를 들어, HTML 요청 시 필요한 CSS, JS 등을 미리 전송.
  • 헤더 압축
    • 헤더를 효율적으로 압축하여 전송.
    • 중복 헤더는 제외하고, 허프만 인코딩 등을 사용한 압축.
  • 우선 순위
    • 서버가 리소스 전송의 우선순위를 지정하여 성능 최적화.

2. HTTP/3

  • QUIC 프로토콜 도입: UDP 기반의 QUIC 프로토콜 사용으로 초기 연결 및 데이터 전송 속도 향상.
  • 단일 핸드셰이크: TLS 핸드셰이크로 클라이언트-서버 간의 연결 및 암호화 동시에 설정. (HTTP/2의 경우 3회의 RTT 필요)
  • 순방향 오류 수정 매커니즘: 패킷이 손상되었을 때, 수신 측에서 에러를 검출하고 수정하는 FEC 도입.
  • 저 패킷 손실률: 열약한 네트워크에서도 낮은 패킷 손실률을 보장하는 특성.

HTTP/3는 기존 HTTP/2의 장점을 활용하면서도 초기 연결 속도, 데이터 전송 효율 등을 향상시켰으며, QUIC 프로토콜의 특징을 도입하여 더욱 효율적인 통신이 가능

HTTPS와 TLS: 암호화

1. 암호화

  • 개념: 정보를 이해할 수 없는 형태로 변환하는 과정. 데이터를 스크램블하여 무작위로 섞는다.
  • 활용: 암호화 및 복호화를 위해 송신자와 수신자가 공유하는 키가 필요.

2. 스크램블

  • 정의: 데이터를 무작위로 섞는 과정.
  • 예시: 128비트 고급 암호화 표준(AES)에서는 파일을 구성하는 비트를 약 10회 스크램블하여 보안을 강화.

3. 키를 기반으로 하는 암호화 방법

대칭 암호화

  • 특징: 하나의 키를 사용하여 데이터를 암호화하고 복호화.
  • 알고리즘: DES, AES 등이 대표적.

비대칭 암호화

  • 다른 이름: 공개 키 암호화.
  • 원리: 두 개의 키(공개키, 개인키)를 사용하여 데이터를 암호화 및 서명.
  • 알고리즘: RSA, DH(Diffie-Hellman) 등이 대표적.

TLS (Transport Layer Security)

  • 개념: HTTPS = HTTP + TLS로, 웹 통신을 안전하게 만드는 데 사용.

  • 동작 방식:

    • 초기 인증에는 비대칭 암호화를 사용.
    • 이후 클라이언트와 서버는 세션키를 기반으로 대칭 암호화로 통신 시작.
    • 보안성 강화: TLS 1.3 버전에서는 부분적인 비대칭 암호화와 대칭 암호화를 사용하여 통신을 안전하게 진행.

암호화의 필요성

  • 목적: 의도된 수신자 또는 송신자 이외에는 통신을 해석할 수 없게 한다.
  • 보장: 민감한 데이터 유출 방지와 데이터 무결성을 보장하여 안전한 통신 환경을 제공.

TLS 핸드셰이크 및 보안

1. TLS (Transport Layer Security)

  • 개념: 전송 계층에서 보안을 제공하는 프로토콜. 클라이언트와 서버 간 통신을 제3자로부터 보호.

  • 핸드셰이크 프로세스:

    • Client Hello: 클라이언트가 TLS 버전, 사이퍼 슈트, 랜덤값 등을 서버에 전송.
    • Server Hello, EncryptedExtensions, Certificate, CertificateVerify: 서버가 클라이언트로부터 받은 옵션 확인하고 인증서, 서버 랜덤값, 임시 DH 변수를 보냄.
    • Finished: 클라이언트와 서버가 세션키를 기반으로 대칭 암호화된 통신 시작.
  • 키 교환 알고리즘: 주로 Diffie-Hellman 알고리즘 사용. TLS 1.3에서는 타원 곡선 DH(ECDHE)를 선호.

2. DH 매개변수

  • Diffie-Hellman 알고리즘:
  • 두 당사자 간에 공개값과 비밀값을 교환하여 공통의 암호키 생성.
  • 타원 곡선 DH(ECDHE)도 사용됨.

3. 사이퍼 슈트

  • 정의: 프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 결합된 암호화 규약.

  • 예시 (TLS 1.3):

TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256

4. 인증서

  • 용도: 클라이언트가 서버의 신원을 확인하고 통신을 보호.

  • 구성요소:

    • 주체: 인증서 발급한 CA, 도메인, 소유자.
    • 공개키: 공개키 및 암호화 방법.
  • 종류:

    • 단일 도메인
    • 와일드카드: 하위 도메인 포함
    • 멀티 도메인: 여러 도메인 포함

5. CA (Certificate Authority)

  • 역할: 클라이언트가 서버의 신원을 확인하는 데 사용되는 SSL/TLS 인증서 발급 기업.

6. RSA의 취약점

  • 문제점: 클라이언트에서 생성한 임시 암호값이 탈취당할 경우 보안 위험.
  • 클라이언트와 서버가 서로 교환한 매개변수를 사용하는 DH와 달리 클라이언트가 생성한 임시 암호값을 서버로 전송하기에 탈취 위험

7. 0-RTT

  • TLS 1.3의 특징: 세션키를 사용하여 인증 없이 빠른 연결을 제공. 비용 절감

보안 관련 이유로 HTTPS 사용

  • 목적: 중요한 데이터 보호, 민감한 정보 전송, 보안적 통신 환경 제공.
  • 장점: 금융 정보 등 민감한 데이터 안전 처리, HTTP/2 지원.

TLS는 전송 계층에서 보안을 제공하는 프로토콜로, 핸드셰이크를 통해 클라이언트와 서버 간의 안전한 통신을 확립한다. 이는 주로 DH 알고리즘, 사이퍼 슈트, 인증서, CA 등을 활용하여 구현된다. HTTPS는 이러한 TLS를 이용하여 웹 통신을 보호하는데 사용되며, 이는 중요한 정보 보호와 안전한 통신을 위해 필수적이다.


REF

profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글