[TIL] WEB/HTTP : http VS https 차이점?

은경·2022년 1월 9일
0

[WEB/HTTP]

목록 보기
2/7



1. HTTP란 ?


  • Hyper Text Transfer Protocol
  • 웹 서버와 사용자 컴퓨터에 설치된 웹 브라우저(클라이언트)사이에 인터넷에서 데이터(하이퍼텍스트)를 전송하기 위한 통신 규약
  • 80번 포트 사용 -> HTTP 서버가 80번 포트에서 요청을 기다리고 있고, 클라이언트는 80번 포트로 요청을 보냄.
  • 우리가 사용하는 웹 브라우저에서 인터넷 주소 앞에 들어가는 http://는 바로 이 프로토콜을 사용해서 정보를 교환 하겠다는 뜻.
  • 정보를 하이퍼 텍스트로 주고 받기 때문에 데이터가 유출될 수 있다.
  • 1989년 팀 버너스 리(Tim Berners Lee)가 처음 설계, www(World-Wide-Web)의 창시자이다.

📌
팀 버너스 리가 만든 인류 최초의 웹 사이트
http://info.cern.ch/

  • HTTP는 애플리케이션 계층의 최상위에 있는 프로토콜.
  • TCP 혹은 TLS(암호화된 TCP연결) 을 통해 전송.



  • HTTP의 '요청'시 구성요소

    • HTTP 메서드, 클라이언트가 수행하고자 하는 동작을 정의한 GET, POST 같은 동사, OPTIONS나 HEAD같은 명사.
    • 가져오려는 리소스의 경로 (Path)
    • HTTP 프로토콜의 버전
    • 서버에 추가정보를 전달하는 헤더




  • HTTP의 '응답'시 구성요소

    • HTTP 프로토콜의 버전.
    • 요청의 성공 여부와, 그 이유를 나타내는 상태 코드(Status code).
    • 상태 코드의 짧은 설명을 나타내는 상태 메시지.
    • 요청 헤더와 비슷한, HTTP 헤더들.
    • 선택 사항으로, 가져온 리소스가 포함되는 본문.

But,

HTTP는 암호화가 되지 않은 데이터를 전송하는 프로토콜이였기 때문에,
비밀번호같은 중요한 정보를 주고 받으면 제3자가 정보를 조회 가능함.
이러한 문제를 해결하기 위해 HTTPS가 등장하게 되었다.



2. HTTPS란 ?


  • HyperText Transfer Protocol over Secure Socket Layer
  • HTTP에 SSL(보안 소켓 계층)을 이용해 데이터 암호화가 추가된 프로토콜.
  • 443번 포트 사용
  • TLS(전송 계층 보안) 프로토콜을 통해서도 보안을 유지함 (데이터 무결성 제공)
  • 검색 엔진 최적화(SEO)에서 큰 혜택을 봄
  • 가속화된 모바일 페이지(AMP)를 만들고 싶을 때 HTTPS를 사용해야 함.


3. HTTP 🆚 HTTPS


구분httphttps
보안성취약함뛰어남
속도빠름느림(암호화/복호화 과정)
추가 비용없음인증서 발급/유지 위해 필요
적합한 용도단순 정보 조회 처리개인정보 등 민감한 데이터 처리
동일 키워드 페이지 검색 / SEO검색 시 상위 노출 되지않음검색 시 상위 노출


4. 암호화 방식


  • 대칭 키 방식 : 암호화할 때와 복호화할 때 서버-클라이언트가 같은 키를 사용하는 방식.

    • 장점 - 단순한 구조로 CPU를 적게 쓰며 빠르다.
    • 단점 - 공통 키를 빼앗기면(해킹) 복호화 가능 -> 보안에 취약하다.
  • 비대칭 키 방식 (공개키) : 암호화,복호화 시 서로 다른 키를 사용하는 방식.

    • 장점 - 키 전송 과정중 빼앗겨도 해커가 해독을 할수 없음 -> 안전함.
    • 단점 - 공통 키 방식보다 느림, 리소스 소비가 큼.
    • 공개 키 / 개인 키로 한 쌍을 이룬다.

참고 : 공개 키 알고리즘 관련 자료

5. HTTPS의 동작 과정


대칭 키, 비대칭 키 방식을 혼합해서 사용한다.

  • 서버는 암호화,복호화가 가능한 공개 키/개인 키를 한 쌍씩 가지고있음.
  • 서버에서 개인 키 보관, 공개 키는 뿌림
  • 사용자가 공개 키로 데이터를 암호화해서 서버로 요청을 보냄
  • 서버에서 보관중인 개인 키로만 데이터를 복호화 할 수 있음. (공개 키로 해킹 불가능)
  • 서버에서 다시 개인 키로 암호화 해서 응답을 보내면 사용자가 공개 키로 복호화. (해당 서버가 아닌 경우(ex.피싱사이트) 복호화 과정에서 오류 발생)
  • 공개 키가 정품인지 확인 필요.
  • 이것을 인증해주는 인증 기관(Certificate Authority, CA)에서 인증 해주어야 함 (브라우저에 리스트가 내장되어있음).

📌 자세한 과정 참고

  1. 최초로 서버/클라이언트 통신시 무작위 데이터를 주고 받으며 handshake 과정을 거치는데
    이때 서버가 클라이언트에게 데이터와 함께 인증서를 준다.
  1. CA의 인증을 받은 인증서들은 CA의 개인 키로 암호화 되어있음.
  1. 인증서가 정품일 경우 브라우저에 저장된 CA의 공개 키로 복호화 가능.
  1. 복호화를 하면 그곳에 서버의 공개 키가 포함되어 있다.
    만약 인증서가 CA의 인증이 되지 않으면 주소창에 경고 문구가 뜸.
  1. 클라이언트가 1번에서 주고 받았던 무작위 데이터로 임시 키를 만듬
  1. 임시 키는 서버의 공개키로 암호화 되어서 클라이언트에서->서버로 보내짐
  1. 동일한 임시 키를 가지게 된 서버-클라이언트는 그것으로 대칭 키를 만듬
  1. 해당 대칭 키는 서버와 클라이언트만 가지게 되기 때문에 제 3자가 알아볼수 없다.


참고 자료(References)


https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
http://blog.wishket.com/http-%ea%b7%b8%eb%a6%ac%ea%b3%a0-https%ec%9d%98-%ec%9d%b4%ed%95%b4/
https://mangkyu.tistory.com/98
https://cryptocat.tistory.com/3

profile
Python 서버 개발자

0개의 댓글