HTTP, HTTPS

geonmyung·2020년 7월 18일
0

1. HTTP

HyperText Transfer Protocol의 약자로, 인터넷 상에서 데이터를 주고 받을 수 있는 프로토콜이다.

  • 주로 HTML 문서를 주고 받는데 사용된다.
  • TCP, UCP, 80번 포트를 사용한다.
  • HTTP는 연결 상태를 유지 않는 프로토콜이다.
    -> 이러한 단점 해결을 위해 Cookie와 Sesseion이 등장!
  • 그러므로 요청/응답(request/response) 방식으로 동작한다.
    -> 요청 : client => server
    -> 응답 : server => client
    -> 클라이언트(웹 브라우저)가 HTTP를 통해 서버에 정보를 요청하면,
    서버는 요청에 응답하여 필요한 정보를 클라이언트에게 전달한다.
  • HTTP는 텍스트 교환이므로, 네트워크에서 신호를 가로챌 시 내용이 노출될 수 있다.
    -> 이러한 보안 문제를 해결해주는 프로토콜이 HTTPS

2. HTTPS

HTTP의 보안 문제를 해결하기 위해 등장한 프로토콜!

  • HTTP에 SSL, TLS 프로토콜을 이용하여 암호화 된 데이터를 주고 받는다.
  • 기본 TCP/IP 포트는 443번이다.
  • 보안을 위해 세션키(대칭키)를 생성 및 교환하는 과정이 필요하다.
    -> SSL Handshake

SSL Handshake

  • 비대칭키를 이용한 인증 과정 -> 서로 공유하는 대칭키 생성
  • 이 과정에서 Certificate Authority(CA)를 통해 서버의 공개키를 확인하게 되고 증명된 사이트의 경우 공개키 서명방식을 이용해 서로 인증하게 된다.

(7/24 내용 추가!)
SSL Handshake가 무엇인지에 대해 더 자세히 공부하기 앞서 대칭키 암호화비대칭키 암호화(공개키 암호화)에 대해 알아보자.

  • 대칭키 암호화
    -> 암호화에 사용되는 키와 복호화에 사용되는 키가 동일한 기법
    -> 암호화한 정보를 보낼 때 암호키를 같이 보내야 하는데 타인에게 노출된 경우, 해킹 위험에 노출된다.

  • 비대칭키 암호화(공개키 암호화)
    -> 암호화와 복호화에 사용하는 키를 분리하는 방식
    -> 공개 가능한 공개키, 자신만이 가지고 있는 개인키(비밀키)
    -> 비대칭키 암호화 진행 과정
    => 1. A가 웹상에 있는 B의 공개키를 이용해 평문을 암호화하여 B에게 전송
    => 2. B는 자신의 개인키로 평문을 복호화하여 해독, A의 공개키로 응답을 암호화하여 전송
    => 3. A는 자신의 개인키로 응답문을 복호화하여 해독

이제 위에서 작성한 비대칭키를 이용한 인증 과정 -> 서로 공유하는 대칭키 생성에 대한 설명을 적어보자.

  1. A가 B의 공개키로 암호화 통신에 사용할 대칭키를 암호화하여 B에게 전송
  2. B는 암호문을 자신의 개인키로 복호화함
  3. B는 복호화를 통해 A로부터 얻은 대칭키로 평문을 암호화하여 A에게 전송
  4. A는 자신의 대칭키로 암호문을 복호화함
  5. 이후부터는 대칭키로 암호화를 통신함

=> 대칭키를 서로 주고 받기 전까지는 비대칭키 암호화 방식을 사용하고 이후에는 계속 대칭키 암호화 방식을 사용

+) 추가 정보

프로토콜이란?

  • 두 관련 프로그램간에 교환되는 데이터에 일정한 형태를 규정하는 규칙
    -> 데이터의 교환을 효율적으로 만드는 기능
  • 데이터 처리에 있어 통신의 복잡성으로 인해 하나의 프로토콜에서 모든 작업을 수행하지 않는다.
  • 다중의 프로토콜층 형태로 이루어진 다수의 통신 프로토콜을 사용한다.

참고 자료

https://toma0912.tistory.com/69
https://ko.wikipedia.org/wiki/HTTP
https://roydest.tistory.com/entry/HTTP%EB%9E%80
https://github.com/gyoogle/tech-interview-for-developer/blob/master/Computer%20Science/Network/HTTP%20%26%20HTTPS.md
https://github.com/jobhope/TechnicalNote/blob/master/network/HTTPAndHTTPS.md
https://hanjungv.github.io/2017-11-07-1_CS_SSL/
https://wangin9.tistory.com/entry/브라우저에-URL-입력-후-일어나는-일들-5TLSSSL-Handshake
https://dinding.tistory.com/35

profile
옹골찬 개발자가 되기 위한 험난한 일대기

0개의 댓글