CS/네트워크

HTTP vs HTTPS 가볍게 살펴보고, 대답해보기!

개발자 May 2024. 8. 2. 16:02

HTTP와 HTTPS의 차이점에 대해서 설명해보세요.

  • HTTP는 웹 서비스 통신을 위한 응용 계층의 프로토콜입니다.
  • HTTP 프로토콜은 HTTP 메시지를 평문으로 전송 계층으로 보내게 되는데, 이때 데이터를 그대로 보내기 때문에 보안 취약점이 있습니다.
  • 이러한 취약점을 보완하기 위해 전송 계층으로 보내기 전 보안 계층을 추가했습니다.
  • 이때 사용되는 프로토콜이 SSL/TLS 프로토콜이고, 이 프로토콜은 데이터를 암호화해서 전송 계층으로 보내는 역할을 합니다.
  • 수신측에서는 마찬가지로 암호화된 데이터를 받아서 보안 계층에서 데이터를 복호화하여 응용 계층으로 보내게 됩니다.

HTTP

  • HTTP는 응용 계층(애플리케이션 계층)에서 웹 통신 서비스를 위한 프로토콜이다.

 

특징

  1. 요청-응답 모델
    • HTTP는 클라이언트(웹 브라우저)와 서버(웹 서버) 간의 요청/응답 구조로 작동한다.
  2. 비연결성(Connectionless)
    • 클라이언트에서 요청을 보낸 뒤 서버에서 응답을 받으면 연결을 끊는다.
      • 연결을 유지하느라 추가 자원 사용이 필요 없다.
      • 서버가 클라이언트를 기억하지 못한다.
      • 클라이언트에서 연속적으로 요청이 오는 경우, 연결을 끊고 맺기를 반복하여 자원이 낭비된다.
💡 HTTP Keep-Alive
- 마지막 단점을 보완하기 위해 HTTP 연결 시 일정 시간 동안 요청을 유지할 수 있도록 하는 HTTP 헤더의 일종이다.
- 클라이언트에서 요청을 보낼 때 헤더에 Connection: keep-alive를 추가해서 보내면, 서버에서 연결을 유지할 시간을 Keep-Alive 헤더에 추가해 응답한다

3. 무상태(Stateless)

  • 서버에서 클라이언트의 상태를 저장하지 않는다.
    • 클라이언트와 연속적인 요청-응답이 오갈 때, 이전 요청을 기억하지 못한다.
    • 클라이언트는 요청 시 필요한 데이터를 모두 갖고 요청해야 한다.
    • 혹은 서버가 클라이언트로부터 받은 요청 사항을 모두 저장해야 한다.
    • 서버가 클라이언트의 상태를 저장하지 않기 때문에 서버 확장성이 높다. (요청에 응답하는 서버가 바뀌어도 된다.)
💡 쿠키(Cookie)와 세션(Session)
쿠키와 세션은 웹 애플리케이션에서 상태 관리를 위해 사용된다.
- 쿠키: 클라이언트의 로컬 웹 브라우저에 저장하는 데이터 파일로, 키와 값을 저장한다. 웹 사이트의 로그인 정보와 온라인 쇼핑몰의 장바구니에서 자주 사용된다. (세션 ID, 암호화된 토큰 기반 인증 정보 등)
- 세션: 서버에서 클라이언트의 연결 정보를 저장 및 관리한다. 사용자의 정보를 세션에 저장하여 인증 상태를 관리하고, 특정 기능에 접근할 수 있도록 하는 스프링 시큐리티 또한 한 가지 예라고 볼 수 있다.

 

HTTP 메시지 구조

  • 클라이언트와 서버가 통신하기 위한 정형화된 데이터
구성 요소 설명 (HTTP 요청 메시지)
요청 라인 메서드 URL HTTP-버전 예: GET /index.html HTTP/1.1
헤더 요청에 대한 메타데이터로 구성된다. 각 헤더는 헤더명: 값 형식이다.
  - Host: 요청을 처리할 서버의 호스트 이름 예: Host: www.example.com
  - User-Agent: 클라이언트 소프트웨어 정보 예: User-Agent: Mozilla/5.0
  - Accept: 클라이언트가 수용 가능한 콘텐츠 타입 예: Accept: text/html
  - Content-Type: 요청 본문의 데이터 타입 (POST/PUT 등) 예: Content-Type: application/json
빈 줄 요청 헤더와 본문을 구분하는 빈 줄
본문(옵션) 요청과 함께 전송할 데이터. POST/PUT 메서드에서 주로 사용됨

 

구성 요소 설명 (HTTP 응답 메시지)
상태 라인 HTTP-버전 상태코드 상태메시지 예: HTTP/1.1 200 OK
헤더 응답에 대한 메타데이터로 구성된다. 각 헤더는 헤더명: 값 형식이다.
  - Content-Type: 응답 본문의 데이터 타입 예: Content-Type: text/html; charset=UTF-8
  - Content-Length: 응답 본문의 길이 예: Content-Length: 1234
  - Set-Cookie: 클라이언트에 쿠키를 설정할 때 사용 예: Set-Cookie: sessionId=abc123
  - Date: 응답이 생성된 시간 예: Date: Wed, 22 Jul 2024 19:00:00 GMT
빈 줄 응답 헤더와 본문을 구분하는 빈 줄
본문(옵션) 서버가 클라이언트로 전송하는 데이터. HTML 문서, 이미지, JSON 데이터 등이 포함될 수 있음

HTTPS (HyperText Transfer Protocol Secure)

  • 기존 HTTP 프로토콜은 데이터의 암호화를 거치지 않고 전송하여 보안에 취약하다.
  • SSL/TLS 프로토콜을 추가하여 보안 측면을 강화한 프로토콜이 HTTPS이다.
  • 기존에 HTTP는 응용 계층에서 데이터를 즉시 전송 계층으로 보냈지만, HTTPS는 전송 계층으로 보내기 전 보안 계층을 추가하여 데이터를 암호화한 뒤 전송 계층으로 보낸다.
  • 데이터 수신 측에서는 보안 계층에서 암호를 복호화한 후 응용 계층으로 보낸다.

 

SSL(Secure Socket Layer)/TLS(Transport Layer Security)

  • SSL은 넷스케이프에서 개발한 암호화 프로토콜로, 몇 가지 취약점을 보완해 TLS를 개발했다.
  • 현재 HTTPS에서 통용되는 방식은 TLS지만, SSL이라는 명칭이 사라지지 않아 SSL/TLS라고 부른다.

Untitled (4)

  • 패킷 캡쳐 프로그램 Wireshark에서 캡처한 내용을 보면, HTTPS 프로토콜은 TLS로 암호화되어 TLS 프로토콜로 표시되고, 응용 계층의 프로토콜이 HTTP라고 표시되어 있긴 하지만 데이터는 암호화되어 있다.

 

SSL/TLS의 암호화 방식(대칭 키 암호화, 공개 키 암호화)

1. 대칭 키 암호화 방식

  • 정의: 데이터의 암호화와 복호화에 동일한 키(대칭 키)를 사용한다.
  • 특징:
    • 송신자와 수신자는 동일한 키를 공유해야 한다.
    • 수신자는 송신자별로 모두 다른 키를 공유한다.
    • 데이터의 암호화 후, 동일한 키로 데이터를 복호화한다.
    • 빠른 암호화 및 복호화 속도를 제공한다.
  • 관리:
    • 키를 안전하게 공유하고 보관해야 한다.
    • 수신자-송신자 쌍이 많아질수록 키 관리가 복잡해질 수 있다.

2. 공개 키 암호화 방식

  • 정의: 데이터의 암호화와 복호화에 서로 다른 키를 사용한다.
  • 구조:
    • 공개 키: 데이터를 암호화하는 데 사용되며, 누구나 접근할 수 있다.
    • 개인 키(비밀 키): 데이터를 복호화하는 데 사용되며, 수신자만이 보관한다.
  • 특징:
    • 수신자는 모든 송신자에게 동일한 공개 키를 제공한다.
    • 송신자는 공개 키로 데이터를 암호화하고, 수신자는 개인 키로 데이터를 복호화한다.
  • 보안:
    • 개인 키의 보안이 매우 중요하며, 유출되지 않도록 철저히 관리해야 한다.