[네트워크] HTTP와 HTTPS 동작 과정

Narcoker·2023년 6월 1일
0

네트워크

목록 보기
7/12

HTTP 동작 과정

서버 접속 -> 클라이언트 -> 요청 -> 서버 -> 응답 -> 클라이언트 -> 연결 종료

  1. 사용자가 웹 브라우저에 URL 주소 입력
  1. DNS 서버에 웹 서버의 호스트 이름을 IP 주소로 변경 요청

    DNS 동작과정

    웹 브라우저에 www.hanamon.kr을 입력한다.
    웹 브라우저는 이전에 방문한적 있는지 찾는다.

    • 브라우저 캐시 확인
    • OS 캐시 확인
    • 라우터 캐시 확인
    • ISP(Internet Service Provider, 인터넷 업체)
      캐시 확인 (Recursive DNS Server or Local DNS Sever)

    캐시에서 찾지 못한다면 ISP에서 DNS Iterative하게 쿼리를 날린다.

    ISP는 Authoritative DNS 서버에서 최종적으로 IP 주소를 응답받는다.
    ISP는 해당 IP 주소를 캐시한다.

    • 이때 저장된 데이터는 일정시간이 지나면 삭제된다.

    웹 브라우저에게 응답한다.

  1. 웹 서버와 TCP 연결 시도
    • 3way-handshaking
  1. 클라이언트가 서버에게 요청
    • HTTP Request Message = Request Header + 빈 줄 + Request Body
    • Request Header
      • 요청 메소드 + 요청 URI + HTTP 프로토콜 버전
        • GET /background.png HTTP/1.0 POST / HTTP 1.1
        • Header 정보(key-value 구조)
    • 빈 줄
      • 요청에 대한 모든 메타 정보가 전송되었음을 알리는 용도
    • Request Body
      • GET, HEAD, DELETE, OPTIONS처럼 리소스를 가져오는 요청은 바디 미포함
      • 데이터 업데이트 요청과 관련된 내용 (HTML 폼 콘텐츠 등)
  1. 서버가 클라이언트에게 데이터 응답
    • HTTP Response Message = Response Header + 빈 줄 + Response Body
    • Response Header
      • HTTP 프로토콜 버전 + 응답 코드 + 응답 메시지
        • ex. HTTP/1.1 404 Not Found.
      • Header 정보(key-value 구조)
    • 빈 줄
      • 요청에 대한 모든 메타 정보가 전송되었음을 알리는 용도
    • Response Body
      • 응답 리소스 데이터
        • 201, 204 상태 코드는 바디 미포함
  1. 서버 클라이언트 간 연결 종료
    • 4way-handshaking
  1. 웹 브라우저가 웹 문서 출력

HTTPS(SSL) 동작 과정

HTTPS 가 되기 위한 과정

  1. 인터넷 사이트(서버)는 공개키와 개인키를 만들고,
    신뢰할 수 있는 인증 기관(CA)에 자신의 정보와 공개키를 관리해달라고 계약하고 (경우에 따라) 돈을 지불한다.
  2. 이 때, 계약을 완료한 인증 기관은 기관만의 공개키와 개인키가 있다.
    인증 기관은 사이트가 제출된 데이터를 검증하고,
    인증 기관의 개인키로 사이트에서 제출한 정보를 암호화해서 인증서를 제공한다.
  3. 인증 기관은 웹 브라우저에게 자신의 공개키를 제공한다.

HTTPS 동작

  1. 3way-handshake 이후 SSL/TLS Handshaking (대칭키 공유)가 진행된다.

    SSL/TLS Handshaking 세부 과정

    Client Hello

    클라리언트가 서버에게 데이터를 전송한다.
    클라이언트가 생성한 랜덤 값,Master 키를 만들기 위해 클라이언트가 사용 가능한 암호화 방식들,
    이전 Handshaking 기록이 있다면 세션 재활용을 위한 세션아이디

    Server Hello

    요청을 받은 서버는 클라이언트로 데이터를 보낸다.
    서버가 생성한 랜덤 값 서버가 선택한 암호화 방식
    SSL 인증서(서버 정보, 서버 공개키)

    Client 인증 확인

    클라이언트는 받은 SSL 인증서가 CA에 의해 발급되었는지 본인이 소유한 목록에 확인하고
    인증기관의 공개키SSL 인증서를 해독하여 검증한다.

    클라이언트,서버가 생성한 랜덤 값을 조합한 pre master secret 키
    서버의 공개키로 암호화하고 서버로 전송한다.

    이후 pre master secret 키와 랜덤 값 2개선택된 알고리즘으로 master 키로 만든다.
    master 키 로 여러 파생키를 만들어 낼수 있다.

    (master 키의 파생키)

    • Encryption Keys (암호화 키): 클라이언트와 서버 간의 데이터 암호화에 사용됩니다.
      • 대칭키 알고리즘으로 제작(AES, 3DS)
      • Client Write Key: 클라이언트가 서버로 데이터를 암호화하는 데 사용되는 키
      • Server Write Key: 서버가 클라이언트로 데이터를 암호화하는 데 사용되는 키
    • MAC Keys (메시지 인증 코드 키): 데이터 무결성 검사를 위해 사용됩니다.
      • HMAC(Hash-based Message Authenication Code) 알고리즘 + SHA-256 등
      • Client MAC Key: 클라이언트가 서버로 전송한 데이터의 무결성을 검사하는 데 사용되는 키
      • Server MAC Key: 서버가 클라이언트로 전송한 데이터의 무결성을 검사하는 데 사용되는 키
    • Initialization Vectors (초기화 벡터): 블록 암호화 모드에서 사용됩니다.
      • 초기화 벡터(IV) 생성 알고리즘
      • Client IV: 클라이언트가 데이터를 암호화할 때 사용되는 초기화 벡터입니다.
      • Server IV: 서버가 데이터를 암호화할 때 사용되는 초기화 벡터입니다.

    Server 인증 확인

    서버는 서버의 개인키로 pre master secret 키 를 취득하고
    이를 선택된 알고리즘으로 master 키 로 만든 후 이를 이용해서 대칭키를 생성한다.

    HandShaking 종료

    서버와 클라이언트가 각자 랜덤 값 생성하는 이유는
    같은 대칭키 생성 방지, 유출되더라도 랜덤값 새로 생성해서 다시 대칭키 만들면 되기 때문이다.

    pre master secret 키 : 세션 계층에서 통신계층에서 데이터를 암호화하는데 사용
    master 키 : 지속적으로 파생된 대칭키(세션키)를 생성해서 세션을 유지하는데 사용
    세션 키 : https 통신시 데이터를 암호화할때 사용한다. header와 body 모두 암호화된다.

  2. 서버와 클라이언트는 대칭키(세션 키)를 활용해서 데이터를 주고 받는다.

  3. 연결 종료 및 세션키 폐기

공개키 알고리즘 방식

암호화, 복호화시킬 수 있는 서로 다른 키(공개키, 개인키)를 이용한 암호화 방법으로,

A키로 암호화를 하면 B키로 복호화를 할 수 있다.
B키로 암호화를 하면 A키로 복호화를 할 수 있다.

공개키: 모두에게 공개. 공캐키 저장소에 등록
개인키(비공개키): 개인에게만 공개. 클라이언트-서버 구조에서는 서버가 가지고 있는 비공개키

대표 암호 알고리즘으로 RSA, 타원 곡선 암호 알고리즘, Rabin(큰수의 소인수 분해의 어려움을 기반)
등이 있다.

공개키로 암호화 : 암호로서 효용성

  • B(서버) 가 자신의 공개키를 공개한다.
  • A(사용자) 는 이 공개키로 문서를 암호화 한다.
  • 암호화된 문서를 B(서버) 에게 전달한다.
  • B(서버) 는 자신만이 가진 개인키로 이 문서를 해독한다.

타인이 전달과정에서 암호화된 문서를 가로채더라도 B의 개인키가 없으면 해독이 불가능하다.

SSL/TLS 에서 서버와 클라이언트가 사용할 대칭키를 전달하는 용도로 사용된다.
공개키 암호화는 처리속도가 느리므로 키 교환과 같이 간단한 데이터를 전달하는 용도로만 사용한다.

개인키로 암호화 : 공인인증체계에 사용하는 전자서명법

  • 문서 작성자 A는 문서를 개인키로 암호화한다.

  • 타인은 A의 공개키로만 해독할 수 있다.

  • 이러한 구조로 해당 문서는 해당 문서는 A만이 발행할 수 있다는 강력한 증거(부인 방지)가 되며,
    문서가 변조되지 않았다는 기능을 얻을 수 있다.

profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글