HTTP란?

HTTP는 www(world wide web)상에서 주고받을 수 있는 포로토콜입니다.

주로 html 문서를 주고받을 때 쓰입니다. TCP와 UDP를 사용하며, 80번 포트를 사용합니다.

 

HTTP1과 HTTP2의 차이

  • HTTP1과 HTTP2의 가장 큰 차이점은 속도가 향상 되었다는 점입니다.
  • 한번의 요청에 하나의 리소스만 받고 한 요청의 지연되면 뒤이은 요청들도 지연되는 특성을 가졌던 전 버전과 달리 스트림이라는 개념이 추가되어 한번에 다수의 요청과 응답을 처리하는 구조로 바뀐 차이점이 있습니다. 또한, 쿠키를 담아 큰 헤더를 가졌던 이전 버전과 달리 쿠키들을 허프만 코딩 압축을 통해 크기 자체를 압축시켰습니다.
  • HTTP1은 하나의 요청에 하나의 리소스만 처리하기 때문에 동시전송 문제와 다수의 리소스를 처리하기에 속도와 성능 이슈가 있었습니다.
    • 서버와 클라이언트가 1번 요청에 1개의 리소스만 받아 처리하기 때문에 처리속도가 느리다.
    • 쿠키가 헤더에 포함되어 크기가 큰 것도 속도가 느린 이유이다.
  • HTTP2가 HTTP1보다 속도가 빠른 이유
    • Multiplexed streams : 1번에 다수의 요청과 응답을 처리할 수 있습니다.
    • Server Push : 클라이언트가 서버에 요청하지 않아도 서버측에서 알아서 리소스를 보내줍니다.
    • Header compression : 허프만 코딩으로 쿠키의 크기를 압축하여 줄였습니다.

 

 

HTTP Method

  • GET : 입력 값으로 데이터를 바꾸지않고 리소스를 보여주기만 하는 용도일 때 사용하며 주소창에 입력한 값들이 포함되어 나옵니다.
  • POST : 입력 값으로 데이터를 저장, 업데이트 작업을 할 때 사용하며 주소창에 입력한 값들이 포함되어 나오지 않습니다. 
  • PUT : POST와 같은 역할을 하지만, POST와 달리 요청할 때 식별자를 보내야하며 몇 번을 수행해도 같은 값을 보장받고 싶을 때 사용합니다.
  • DELETE : 데이터를 삭제할 때 사용합니다.
  • HEAD
  • OPTIONS
  • TRACE
  • CONNECT

 

 

HTTP와 HTTPS

HTTP와 HTTPS는 HTML 같은 문서를 웹 브라우저가 웹 서버에 요청하는 프로토콜이라는 점이 같지만 통신 내용을 암호화하는 것이 다릅니다.

 

HTTPS의 S는 Secure socket, 즉 안전한 통신망이라는 뜻으로 페이지 암호화 키를 공개키로 암호화하고 인증하는 것입니다. 여기서 공개키란 데이터를 암호화하는데 키가 2개 필요하는 것입니다.

 

 

HTTP (HyperText Transfer Protocol)

  • 웹 상에서 클라이언트와 서버가 요청/응답(request/response)으로 정보를 주고 받을 수 있는 프로토콜(웹 통신 프로토콜)
  • 주로 html 문서를 주고받을 때 사용합니다.
  • TCP와 UDP를 사용하며, 80번 포트를 사용합니다.
  • 아무나봐도 상관없는 페이지에 HTTP를 사용합니다. (보안을 붙이지 않았기때문에 HTTPS보다 빠릅니다.)
  • 비연결(connectionless) : 클라이언트가 서버에 요청을 보내고 서버에서 적절한 응답을 클라이언트에게 보내면 연결은 바로 끊어집니다.
  • 무상태(stateless) : 연결을 끊는 순간 클라이언트와 서버의 통신은 끝나며 상태 정보를 유지하지 않습니다.

HTTPS (HyperText Transfer Protocol over secure Socket layer)

  • HTTP over TLS, HTTP Secure, HTTP over SSL
  • HTTP의 보완이 강화된 버전의 프로토콜
  • HTTPS의 기본 포트는 TCP/IP로 443번 포트를 사용합니다.
  • HTTPS는 소켓 통신에 일반 텍스트를 이용하는 대신에, 웹 상에서 정보S를 암호화하는 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화합니다.
  • TLS(Transport Layer Security) 포로토콜은 SSL(Secure Socket Layer) 프로토콜에서 발전한 것 입니다.
  • 두 프로토콜의 주 목적은 기밀성(사생활 보호), 데이터 무결성, ID 및 디지털 인증서를 사용한 인증을 제공하는 것 입니다.
  • 보호의 수준은 웹 브라우저에서의 구현 정확도와 서버 소프트웨어, 지원하는 암호화 알고리즘에 달려있습니다.
  • 금융 정보나 메일 등의 중요한 정보를 주고 받는 것에 HTTPS를 사용합니다.

 

HTTPS가 필요한 이유

  • 클라이언트인 웹 브라우저가 서버에 HTTP를 통해 웹 페이지나 이미지 정보를 요청하면 서버는 이 요청에 응답하여 요구하는 정보를 제공합니다.
  • HTTP를 통해 웹 페이지(HTML or 텍스트 정보)를 교환합니다.
  • 이때, 주고받는 데이터에 주민번호나 비밀번호와 같은 중요한 정보가 포함된 상태로 네트워크상에서 제 3자가 정보를 가로챈다면 보안상 큰 위험이 있을 수 있습니다. 그래서 중간에서 정보를 볼 수 없도록 주고받는 정보를 암호화하는 방법인 HTTPS를 사용합니다.
  • HTTP를 사용할 경우 개인 정보가 아니더라도 사용자가 어느 사이트에 접근하는 지, 어떤 행동을 하는지 모두 감시할 수 있습니다. 이로 인해 정부나 ISP 가 사용자의 패턴을 파악해서 인터넷 검열을 할 수 있다는 문제가 있습니다.

 

HTTPS의 원리

  • 공개키, 개인키 알고리즘 방식
  • 암호화, 복호화시킬 수 있는 서로 다른 키(공개키, 개인키)를 이용한 암호화 방법
    • 공개키 : 모두에게 공개, 공개키 저장소에 등록
    • 개인키(비공개키) : 개인에게만 공개. 클라이언트-서버 구조에서는 서버가 가지고 있는 비공개키
  • 클라이언트 -> 서버
    • 사용자의 데이터를 공개키로 암호화 
    • 서버로 전송 (데이터를 가져가도 개인키가 없기 때문에 복호화할 수 없음)
    • 서버에서 개인키로 복호화하여 요청 처리

 

HTTPS의 장점

  • 네트워크 상에서 열람, 수정이 불가하므로 안전합니다.

 

HTTPS의 단점

  • 암호화하는 과정이 웹 서버에 부하를 줄 수 있습니다.
  • HTTPS는 설치 및 인증서를 유지하는데 추가 비용이 발생합니다.
  • 암호화, 복호화를 하기때문에 HTTP보다 느립니다.
  • 인터넷 연결이 끊긴 경우 재인증 시간이 소요됩니다.
    • HTTP는 비연결형으로 웹 페이지를 보는 중 중간에 연결이 끊겼다가 다시 연결되어도 페이지를 계속 볼 수 있습니다.
    • 그러나 HTTPS의 경우 소켓(데이터를 주고받는 경로) 자체에서 인증하기 때문에 인터넷 연결이 끊기면 소켓도 끊어져서 다시 HTTPS 인증이 필요합니다.

 

대칭키 암호화, 공개키 암호화 방법

  • 대칭키 암호화는 암호화 키와 복호화 키가 동일한 암호화 기법입니다. 암호키 자체가 암호화 되지 않은 평문으로 노출되면 보안에 매우 최악하여 키 전달 및 관리가 어려운 단점이 있고, 공개키 암호화 방식보다 속도가 빠르다는 장점이 있습니다.
    • 대칭키
    • 암/복호화 키가 동일
    • 대표 암호알고리즘 : DES, 3DES, TDES, AES, SEED, ARIA 등
    • 대체적으로 bit 수가 적고 수행시간이 짧다.
    • 사용에 제한적입니다.
    • 사용 예 :  디스크 암호화
  • 공개키 암호화는 대칭키 암호화와 다르게 개인키와 공개키 두 가지 키를 사용합니다. 개인키로 암호화된 문서는 공개키로만 복호화할 수 있으며, 반대로 공개키로 암호화된 문서는 개인키로만 복호화할 수 있습니다. 암호화, 복호화의 작업이 복잡하기 때문에  대칭키 암호화에 비해 시간이 오래 걸린다는 단점이 있습니다.
    • 비대칭키(공개키, 개인키)
    • 암/복호화 키가 다름
    • 대표 암호 알고리즘 : RSA, ECC 등
    • 대체적으로 bit 수가 많고 수행시간이 길다.
    • 공개라는 단어와 어울리게 범용적으로 사용 가능합니다.
    • 사용 예 : 비밀번호 암호화
  • 요즘 암호화 통신에서는 대칭키 암호화와 공개키 암호화의 좋은 점을 채택하여, 공개키 암호화를 사용하여 대칭키 암호화의 공통키를 공유하고, 그 키를 기반으로 실제 통신을 암호화하는 하이브리드 구조를 사용합니다.

 

SSL과 TLS (https://nuritech.tistory.com/25 - 조금 더 딥하게 정리되어 있습니다.)

  • SSL과 TLS는 클라이언트와 서버간의 통신을 암호화하는데 사용되는 프로토콜입니다.
  • SSL은 인터넷을 통해 전달되는 정보의 보안을 위해 개발한 인터넷 통신 규약 프로토콜이며, TLS는 안정성을 높이는 목적으로 SSL 3.0을 기초로하여 고안되었습니다.
  • 과정 : SSL/TLS는 TCP 레벨의 연결이 완료된 후에 다음과 같은 방법으로 동작합니다. (SSL handshake) 
    • 클라이언트와 서버가 기본적인 hello 메세지로 정보 송수신
    • 서버는 서버가 사용하는 SSL/TLS 인증서 전달
    • 클라이언트는 암호화에 사용할 키(대칭키 or 공개키)를 서버에 전달
    • 클라이언트는 암호화에 사용할 암호 알고리즘과 해시 알고리즘을 서버에 전달
    • 서버도 알고리즘 목록을 교환하여 키를 서버와 클라이언트 모두 소유

 

 

'Network' 카테고리의 다른 글

[Network] 쿠키와 세션  (0) 2021.10.21
[Network] HTTP Method  (0) 2021.10.21
[Network] 3-way-handshake와 4-way-hanshake  (0) 2021.10.17
[Network] TCP와 UDP  (0) 2021.10.17
[Network] OSI 7계층 & TCP/IP 4계층  (0) 2021.10.14

+ Recent posts