1. HTTP

(1) HTTP란?

HTTP(Hyper Text Transfer Protocol)이란 서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜이다.

  • HTTP는 인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약
  • 80번 port 사용

(2) HTTP 통신 특징

  • HTTP는 연결상태를 유지하지 않는 비연결성 프로토콜이다. 클라이언트가 이전에 요청한 내용을 기억하고 있지 않다.
  • TCP/IP를 이용하는 응용프로토콜(application protocol) 이다.
  • 비연결성 프로토콜이기 때문에 이러한 단점을 해결하기 위해 Cookie, Session을 사용한다.
  • 비연결성 프로토콜이기 때문에 요청/응답(request, response) 방식으로 동작한다.

(3) HTTP 통신 방식(요청과 응답)

  • URL입력 시 80번 포트를 얻고, 클라이언트와 서버와 연결을 한다.
  • 클라이언트(사용자)가 서버에 HTTP Request (요청)을 한다.
  • 서버가 사용자의 요청을 받고 HTTP Response (응답)을 한다.
  • 클라이언트와 서버간 커넥션을 닫는다.

2. HTTPS

(1) HTTP의 치명적 단점

HTTP는 웹을 지탱하는 심플한 기술이지만 치명적인 단점이 있다. 브라우저와 웹서버가 통신함에 있어서 주고 받는 데이터가 암호화 되지 않고 생 날것 그대로 전송되어진다는 점이다.

HTTP는 인터넷이라는 바다를 지나 웹서버와 브라우저가 통신하므로 그 중간 어딘가에서 해커가 중간 통로를 도청하게 된다면 날 것 그대로의 중요한 정보들을 탈취할 수 있다. 만약 이러한 데이터가 로그인 기능에서 사용하는 아이디 비밀번호 등의 데이터라면 치명적일 수 있다. 뿐만 아니라 정상적인 데이터를 중간에서 악의적으로 변조시킬 수도 있다.

(2) HTTPS란?

HTTPSSSL이 첨가된 방식으로 주고 받는 정보가 암호화되어 보안성이 강화된 방식이다. 443 port를 사용한다.

(3) HTTPS에 들어가기전 알아야 할 2가지 개념

공개키 암호화 방식

  • 공개키와 개인키(비밀키) 2가지 키를 사용하는 암호화 방식이다.
  • 공개키는 말 그대로 누구나 획득할 수 잇는 공개된 키를 의미한다.정보를 보내는 쪽(클라이언트)는 이 키를 가지고 데이터를 암호화 해서 전송한다.
  • 개인키(비밀키)는 공개키로 암호화 된 데이터를 복호화 할 수 잇는 키로 자신(서버)만이 가지고 잇는 키이다.

인증서와 CA(Certificate authority)
SSL을 적용하기 위해서는 인증서가 필요하다.

인증서 내용에는 서비스의 정보(CA, 도메인등), 서버 측의 공개키 가 있다.

인증서를 발급해주는 기업을 CA라고 한다. 인증서가 보안에 관련된 것인 만큼 이 CA는 영향력있고 신뢰할수 있는 기업에서만 가능하다.

그리고 우리의 브라우저는 CA리스트를 미리 가지고 있다. CA목록에 있는 기업을 공인된 CA라고 하며 목록에 없는 기업을 사설CA라고 한다.

(4) HTTPS 통신 방식

  • 웹서버는 사이트정보와, 공개키를 인증기관에 넘겨 요청한다.
  • 전자서명(공개키방식) 을 이용해 인증서를 제작하고 웹서버로 인증서를 발급한다.
  • 공개키는 모든 client에서 아는 상태이고, client에서 웹서버로 데이터 요청을 한다.
  • 웹서버에서는 client에 인증서를 전달한다.
  • client에서는 공개키로 인증서를 검증(아..! 여기서 서버에서 보낸게 맞구나) 하고 획득한 공개키로 대칭키를 암호화 해서 웹서버에 전달한다.
  • 웹서버에서는 비밀키로 대칭키를 획득한다.
  • 대칭키를 이용하여 암호화 된 정보를 주고 받는다.

대칭키를 이용하는 이유
공개키 방식보다 속도가 빠르다. 하지만 대칭키를 바로 전달할 경우 중간에 탈취당할 경우가 생긴다. 그래서 위 방식대로 암호화해서 전달하게 되면 탈취당할 위험이 적어진다.

3. 참고자료

https://johngrib.github.io/wiki/why-http-80-https-443/

https://www.stevenjlee.net/2020/11/01/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-http-vs-https-%EA%B7%B8%EB%A6%AC%EA%B3%A0-ssl-secure-socket-layer/

profile
끊임없이 발전해가는 개발자.

0개의 댓글