CS/Network

HTTP와 HTTPS

whyWhale 2021. 5. 11.

HTTP🔓


Hyper Text Treansfer Protocol

  • 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.
    • TCP/IP기반으로 되어있다.
  • 인터넷에서 정보를 교환하기 위한 통신 규약으로,80 포트를 사용한다.
    • 서버가 80 포트에서 요청을 기다리고 있으며, 클라이언트는 80 포트로 요청을 한다.

HTTP의 구조

 

HTTP구조

  • HTTP는StartLine, Header, Body로 구성되어 있다.
    • StarLine
      • HTTP Method
        • GET, POST, PUT, DELETE ...
      • Request Target
        • URI가 들어가는 곳.
        • ex ) localhost:8080/user/login ..
      • HTTP Version
        • HTTP 버젼.
        • 1.0, 1.1, 2.0 등이 있다.
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/json
Content-Length: 257
Host: google.com
User-Agent: HTTPie/0.9.3

 

 

  •  Headers
    • request에 대한 추가 정보를 담고 있다.
      • request,response 메시지 Body의 길이 등등.
    • Key:Value 형식으로 되어 있다.
      • ex) HOST : google.com
    • Header는 General, Request, Entity 3부분으로 나누어 진다.(자세한 내용 생략)
    • 자주 사용되는 Header 정보들
      • Host
        • 요청이 전송되는 Target의 host Url 이다. ex) Host: google.com
      • User-Agent
        • 요청을 보내는 클라이언트의 대한 정보 이다.
        • 웹 브라우저에 대한 정보이다.
      • Accept
        • 해당 요청이 발을 수 있는 응답 타입이다.
      • Connection
        • 해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 커넥션을 유지할 것인지 혹은 끊을 것인지에 대해 지시하는 부분.
      • Content-Type
        • 해당 요청이 보내는 Body 타입 : ex) application/json (JSON 형식)
      • Content-Length
        • body의 길이.

 

 

  • Body
    • Body는 있을수도 없을 수 도 있다.
POST /payment-sync HTTP/1.1

Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: intropython.com
User-Agent: HTTPie/0.9.3

{
    "imp_uid": "imp_1234567890",
    "merchant_uid": "order_id_8237352",
    "status": "paid"
}

 

HTTP의 문제점

  • 평문 통신이기 때문에 도청 가능하다.
    • SSL(Secure Socket Layer) or TLS(Transport Layer Security)라는 프로토콜을 조합함으로써 HTTP의 통신 내용을 암호화 할 수 있다.
    • 콘텐츠를 암호화한다.
  • 통신 상대를 확인하지 않기 때문에 위장이 가능하다.
    • HTTP는 무상태라는 특징을 가지고 있어 A가 보냈는지 B가 보냈는지 모른다.
    • IP주소 포트등에서 그 웹 서버에 엑세스 제한이 없는 경우 리퀘스트가 오면 상대가 누구든지 어떤 응답을 반환한다.
    • 그래서 SSL로 상대를 확인할 수 있다.
      • SSL은 상대를 확인하는 수단으로 증명서를 제공한다.
      • 증명서는 신뢰할 수 있는 제 3자 기관에 의해 발행되므로 서버나 클라이언트가 실재하는 사실을 증명한다.
      • 이로써 통신 상대가 내가 통신하고자 하는 서버임을 나타내고 이용자는 개인정보 누설 등의 위험성이 줄어든다.
      • 클라이언트는 이 증명서로 본인 확인을 하고 웹 사이트 인증에서도 이용할 수 있다.
  • 완전성을 증명할 수 없기에 변조가 가능하다.
    • 완전성은 정보의 정확성을 의미한다.
    • 서버나 클라이언트에서 수신한 내용이 송신측에서 보낸 내용과 일치한다 라는 것을 보장할 수없다.
    • 요청,응답이 발신된 후에 상대가 수신하는 사이 누군가에 의해 변조되더라도 이 사실을 알 수 없다.
      • 이와 같이 공격자가 도중에 요청,응답을 가로채어서 변조하는 공격을 "중간자 공격" 이라고 한다.
    • MD5,SHA-1등의 해시 값을 확인하는 방법, 파일의 디지털 서명을 확인하는 방법이 존재하지만 확실이 확인 할 수 있는 것은 아니다. 확실히 방지하기 위해 HTTPS를 사용해야 한다.
      • HTTPS에는 인증,암호화,다이제스트 기능을 제공한다.

 

HTTP는 암호화가 되지 않은 평문 데이터를 전송하는 프토콜이기 때문에, 비밀번호와 주민등록과 같은 보여선 안될 정보들을 주고받으면 제 3자가 정보를 조회할 수 있다. 그래서 HTTPS (HTTP에 암호화를 추가)가 등장하였다.

 

HTTPS🔒


  • Hyper Text Transfer Protocol Secure .. (이름 여러가지.)
  • HTTP에 암호화가 추가된 프로토콜로 433번 포트를 사용하며, 네트워크 상에서 중간에 제 3가작 정보를 볼 수 없도록 공개키 암호화를 진원하고 있다.

 

공개키, 개인키

  • 공개키 암호화 :  공개키로 암호화를 하면 개인키로만 복호화 할 수 있다.
    • 개인키는 나만 가지고 있는 열쇠이다.그래서 나만 볼수 있다.
  • 개인키 암호화 : 개인키로 암호화를 하면 공개키로만 복호화 할 수 있다.
    • 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장할 수 있다.

HTTPS의 동작과정

  • HTTPS는 SSL과 같은 프로토콜을 사용하여 공개키/개인키 기반으로 데이터를 암호화하고 있다.
  • 그렇기 때문에 임의의 사용자가 데이터를 조회하여도 원본의 데이터를 보는 것을 불가능하다.
  • 그래서 서버는 클라이언트가 요청을 보낼 때 암호화를 하기 위한 공개키를 생성해야 하는데, 일반적으로는 인증된 기관에 공개키를 전송하여 인증서를 발급받고 있다.
    1. A기업은 HTTPS를 적용하기 위해 공개키/개인키를 발급함.
    2. Certificate Authority 기업에게 돈을 지불하고 공개키 저장하는 인증서 발급을 요청한다.
    3. CA기업은 CA 정보들을 기반으로 인증서를 생성하고, CA기업의 개인키로 암호화하여 A기업에게 전송한다.
    4. A기업은 클라이언트에게 암호화된 인증서를 제공한다.
    5. 브라우저는 CA기업의 공개키를 미리 다운받고 암호화된 인증서를 복호화 한다.
    6. 암호화된 인증서를 복호화하여 얻은 A기업은 공개키로 데이터를 암호화하여 요청을 전송한다.
  • 인증서는 CA의 개인키로 암호화 되었기 때문에 CA가 인증한 정보임을 확인하고 알수 있고 신뢰성을 보장한다.
  • 클라이언트는 A기업의 공개키로 데이터를 암호화하였기 때문에 A기업만이 복호화하여 원본 데이터를 추출할 수 있다.
  • HTTPS는 공개키/개인키 기반의 대칭키 암호화 방식을 활용하여 안전성을 확보하고 있다.

 

 

 

요약 🔑


  • HTTP+SSL == HTTPS 라고 할 수 있다. 즉, 새로운 애플리케이션 계층의 프로토콜이 아니다.
  • HTTP는 원래 TCP와 직접 통신했지만, HTTPS에서는 HTTP는 SSL과 통신하고 SSL이 TCP와 통신하게 된다.
  • SSL을 사용한 HTTPS는 암호화, 증명서, 안전성을 보호 할 수 있게 된다.
  • SSL에서는 공통키 암호화 방식 + 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템을 사용한다.
    • 공통키를 공개키 암호화 방식으로 교환한 다음에 다음부터는 통신의 공통키 암호를 사용하는 방식이다.
  • HTTPS는 기존의 HTTP보다 많은 리소스들을 요구한다. 그래서 서버 한 대당 처리하는 요청의 수가 줄어들게 된다.
    • 하지만 최근 HW발달로 속도 저하가 일어나지 않으며 새로운 표준이 HTTP2.0을 함께 이용한다면 오히려 HTTPS가 더 빠르게 동작한다.
    • 예전에는 민감한 정보를 다룰 때만 HTTPS 통신을 사용하였지만 이제는 모든 웹페이지에 HTTPS를 적용하는 방향으로 바뀌어 가는 추세이다.

'CS > Network' 카테고리의 다른 글

HTTPS 동작원리  (0) 2023.01.08
DNS Round Robin  (0) 2021.05.14
TCP 와 UDP  (0) 2021.05.05
TCP - handShake  (0) 2021.05.04
HTTP의 GET과 POST  (0) 2021.05.03

댓글