본문 바로가기
Webhacking/Dreamhack

Background: HTTP/HTTPS

by reiki 2024. 7. 26.

들어가며

언어에서 약속이란, 문장의 의미를 결정하는 매우 중요한 요소

⇒ 컴퓨터에서도 마찬가지

인코딩

인코딩(Encoding) 표준: 0과 1로 우리의 문자를 표현하도록 약속한 것

인코딩 표준에는 대표적으로 아스키와, 유니코드가 있음.

  • 아스키(Ascii) ⇒ 7비트 데이터에 대한 인코딩 표준. 알파벳과 특수 문자 등을 표현할 수 있음 ⇒ 컴퓨터가 개발된 초기에는 각 문자권마다 고유의 인코딩 표준을 사용함. (영어는 아스키, 한글은 CP-949, EUC-KR 등을 사용) ⇒ 국제 소프트웨어 개발시 인코딩이 호환되지 않아 글자가 깨지는 것과 같은 오류가 발생함
  • 유니코드(Unicode) ⇒ 아스키코드의 어려움을 해결하고자 만들어진 표준 ⇒ Uni(하나의)라는 접두사가 나타내듯 모든 언어의 문자를 하나의 표준에 담겠다는 목표로 제정 ⇒ 한 문자를 최대 32개의 비트로 표현함. 즉, 표현할 수 있는 정보의 가짓수가 2^32,42억개로 전세계 문자를 표현하고도 남을 넓은 공간.

인코딩을 이용하면 우리의 문장을 컴퓨터에 저장하고, 표현할 수 있습니다. 그리고 네트워크를 이용하면 인코딩한 정보를 다른 사람들과 쉽게 교환할 수도 있습니다.


통신 프로토콜

웹 서버에 있는 리소스를 클라이언트가 받아보려면, 클라이언트는 웹에게 특정 리소스를 지정하여 제공해달라고 요청해야함. 그러면 서버가 해당 요청을 이해하고 , 대응되는 동작을 통해 클라이언트에게 리소스를 반환한다.

Request(요청) : 클라이언트의 행위

Response(응답) : 서버의 행위

 

 

프로토콜(Protocol) : 규격화된 상호작용에 적용되는 약속

컴퓨터가 해석의 융통성을 발휘하는 것은 어렵고, 통신 오류가 발생할 가능성을 높이기에 엄격한 프로토콜을 사용해야한다.

많은 프로토콜은 각 통신 주체가 교환하는 데이터를 명확히 해석할 수 있도록 **문법(syntax)**를 포함함

⇒ 문법에 어긋나는 메시지는 잘못 전송된 것으로 취급하여 무시함.

현재까지 제정된 표준 통신 프로토콜의 예는 아래와 같다.

  • TCP/IP : 네트워크 통신
  • HTTP : 웹 애플리케이션이 사용
  • FTP : 파일을 주고받을 때 사용

HTTP

HTTP(Hyper Text Transfer Protocol)

: 서버와 클라이언트의 데이터 교환을 요청(Request)과 응답(Response) 형식으로 정의한 프로토콜

기본 메커니즘

클라이언트가 서버에게 요청하면,

서버응답하는 것

웹서버는 HTTP 서버를 HTTP 서비스 포트에 대기시킴

⇒ 포트는 일반적으로 TCP/80 또는 TCP/8080임.

⇒ 클라이언트가 서비스포트에 HTTP 요청을 전송하면, 이를 해석하여 적절한 응답을 반환함

네트워크 포트 : 네트워크에서 서버와 클라이언트가 정보를 교환하는 추상화된 장소

⇒ 항구 의미로 생각하니 이해 잘 됨. 클라이언트가 서버의 포트에 접근하는 것 생각하기

서비스 포트 : 네트워크 포트 중에서 특정 서비스가 점유하고 있는 포트

HTTP가 80번 포트를 점유하고 있다면, HTTP의 서비스 포트는 80번 포트가 된다.

⇒ 두개가 다른게 아님. 네트워크 포트에서 서비스가 차지하는 포트를 서비스 포트라 함

 

포트로 데이터교환하는 방식은 **전송계층(Transport Layer)**의 프로토콜을 따름

⇒ TCP, UDP가 있다

⇒ TCP로 데이터를 전송하려는 서비스에 UDP클라이언트가 접근하면 데이터가 교환되지 않기에 서비스 포트를 표기시 사용하는 전송계층 프로토콜을 같이 표기하기도 한다.

HTTP 서비스 포트가 TCP/80이다 == HTTP 서비스를 80번 포트에서 TCP로 제공하고 있다

 

잘 알려진 포트(Well-known port),특권포트(Privileged port) : 0번 ~ 1023번 포트

⇒ 각 포트에 유명한 서비스가 등록됨. 해당 포트에 서비스 실행하려면 관리자 권한 필요

  • SSH : 22번포트
  • HTTP : 80
  • HTTPS: 443

HTTP 메시지

아래의 2가지 경우가 존재함

  • 클라이언트가 전송하는 HTTP 요청
  • 서버가 반환하는 HTTP 응답

둘 다 HTTP 헤더바디로 구성됨

HTTP 헤더

HTTP 헤드(Headers) 각 줄은 CRLF로 구분

첫 줄은 시작 줄(Start line)

⇒ 요청과 응답에서 차이 존재

 

나머지 줄은 헤더(Header)

⇒ 필드와 값으로 구성됨. (필드명 : 필드 값)
    HTTP 메시지 또는 바디의 속성을 나타냄.
    하나의 HTTP 메시지에는 0개 이상의 헤더가 있을 수 있음

 

헤드(Headers)의 끝은 빈줄로 나타냄

HTTP 바디

HTTP 바디(Body) : 헤드의 끝을 나타내는 CRLF 뒤 모든 줄

클라이언트나 서버에게 전송하려는 데이터가 바디에 담김


HTTP 요청

HTTP 요청 : 서버에게 특정 동작을 요구하는 메시지

시작줄

메소드(Method)요청 대상(Request target), 그리고 HTTP 버전으로 구성

⇒ 각각은 띄어쓰기로 구분

 

메소드 : 요청대상에 대해 서버가 수행하길 바라는 동작을 나타냄

⇒ HTTP 표준에서는 8개의 메소드를 정의하고 있음

  • GET : 리소스를 가져와 달라 요청하는 메소드
  • POST : 요청 대상에게 데이터를 보내는 메소드 ⇒ 전송할 데이터는 보통 HTTP 바디에 포함됨

HTTP 요청 메서드 - HTTP | MDN

 

HTTP 요청 메서드 - HTTP | MDN

HTTP는 요청 메서드를 정의하여, 주어진 리소스에 수행하길 원하는 행동을 나타냅니다. 간혹 요청 메서드를 "HTTP 동사"라고 부르기도 합니다. 각각의 메서드는 서로 다른 의미를 구현하지만, 일부

developer.mozilla.org

 

 

요청 URI(=요청대상) : 메소드의 대상을 나타냄

HTTP 버전 : 클라이언트가 사용하는 HTTP 프로토콜의 버전을 나타냄

 

HTTP 응답

HTTP 응답 : HTTP 요청에 대한 결과를 반환하는 메시지

HTTP 응답의 시작 줄은 HTTP 버전상태 코드(Status Code), 처리 사유(Reason Phrase)로 구성

HTTP 버전: 서버에서 사용하는 HTTP 프로토콜의 버전을 나타냄

상태코드 : 요청에 대한 처리결과를 세 자릿수로 나타냄
⇒ 각각 첫번째 자리스에 따라 5개의 클래스로 분류됨

처리사유 : 상태코드가 발생한 이유를 짧게 기술한 것


HTTPS

HTTP의 응답과 요청은 평문으로 전달

만약 누군가 이를 가로챈다면 중요한 정보가 유출될 수 있음.

⇒ 예를 들어, 로그인할 때 전송한 POST 요청에는 대개 이용자의 ID와 비밀번호가 포함됨.

    공격자가 중간에 이를 가로채면 이용자의 계정이 탈취당할 수 있음

HTTP 통신. 빨간글자가 요청, 파란글자가 응답. wireshark 이용

 

HTTPS(HTTP over Secure socket layer) : TLS(Transport Layer Security) 프로토콜을 도입함.

TLS : 서버와 클라이언트 사이에 오가는 모든 HTTP 메시지를 암호화함

⇒ 공격자가 중간에 메시지를 탈취하더라도, 복호화할 수 있는 키가 없다면 해석할 수 없음

 

웹 서버의 URL이

http://로 시작되면 HTTP,

https://로 시작되면 HTTPS 프로토콜을 사용

HTTPS 통신. 빨간글자가 요청, 파란글자가 응답. wireshark 이용


키워드

  • HTTP(HyperText Transfer Protocol): 웹 서버와 클라이언트가 리소스를 교환하기 위해 사용하는 프로토콜. 클라이언트가 요청하면, 서버가 응답하는 방식.
  • HTTP 메시지: HTTP 서버와 클라이언트가 교환하는 데이터. 헤드와 바디로 구성되며, 각 줄은 CRLF로 구분됨.
    • 헤드: 메시지에 대한 정보. 헤드의 끝에는 CRLF가 한 줄 있음.
    • 바디: 클라이언트가 서버에게, 또는 서버가 클라이언트에게 전달할 데이터
  • HTTP 요청(Request): 클라이언트가 서버에게 특정 동작을 요청하는 메시지
    • 메소드(Method): 요청 URI가 가리키는 리소스에 대해, 서버가 수행했으면 하는 동작을 지정
    • 요청 URI(Request-URI): 메소드의 대상이 되는 리소스를 지정
  • HTTP 응답(Response): 요청을 처리한 결과 및 이유, 그리고 클라이언트에 전송할 웹 리소스를 포함하는 메시지
    • 상태 코드(Status code): 요청을 처리한 결과
    • 처리 사유(Reason phrase): 상태 코드가 발생한 이유
  • HTTPS(HTTP on Secure socket layer): TLS를 이용하여 HTTP의 약점을 보완한 프로토콜