# TIL-20210414

# Today

  • cookie & session
  • https / http

# content

클라이언트에서 값을 저장하기 위해 쓰는 파일형태의 데이터 저장소 서버에서 직접 전송한 데이터를 파일에 써서 보관하고 있다. 누구나 쉽게 접근할 수 있기 때문에 보안에 취약하다.

처음 쿠키를 사용하기 시작한 이유는 서버에서 전송한 값이나, 사용자의 웹사용 정보를 축적하기 위한 용도로 사용되었다.

  • 용도
  1. seesion id 저장
  2. 사용자의 개인에 따른 정보 저장
  3. 웹에서의 사용자 패턴 분석 데이터 저장
  • 쿠키의 설정 쿠키는 서버에서 그 데이터를 정하여 저장하도록 한다. 일정한 서버와의 통신 결과가 없다면 쿠키에 해당 데이터가 기록될 수 없다. http요청 시 header에 set-cookie 속성에 원하는 값을 넣어 cookie를 저장 할 수 있다.

  • 쿠키의 단점
    쿠키는 보안에 취약하다. 아무 설정이 없다면 반 영구적으로 데이터가 남아있게 된다. 또한 누구나 쉽게 접근할 수 있다. 로컬에 아무 보안처리 없이 저장되기 때문에, 작성자가 암호화 하지 않으면 쉽게 데이터에 접근 할 수 있다.

# session

세션은 쿠키와 반대로 서버에 데이터를 저장하는 것이다. 덕분에(?) 서버 자원을 많이 차지하는 경우도 발생할 수 있다.
클라이언트는 자신의 세션정보(세션id)를 서버로 부터 쿠키에 담아 받아 갖게 된다.

클라이언트는 이후 요청마다 해당 쿠키에 저장된 세션id를 통해 서버와 연결되어있는 세션을 알려줄 수 있다.
서버는 세션데이터를 통해 해당 유저의 로그인 상태를 유지하거나, 특정 데이터를 지속적으로 가지고 있을 수 있게 된다.

다만 세션은 브라우저가 종료되면 새로운 세션 id가 발급되고 새로운 세션을 할당 받기 때문에, 그 유지 기간이 브라우저 종료 전까지로 한정되어 있다.

# http / https

# https?

https(Hyper Text Transfer Protocol Secure Socket Layer)의 약자로,
http는 패킷을 가로채가 데이터를 누구나 쉽게 읽을 수 있는 반면, https는 요청 내용(패킷)을 암호화하여 보내기 때문에, 중간에 가로챈 데이터를 사용하는 것이 어렵다.
  • 동작 방식 공개키와 개인키를 통해 암호화한 데이터를 암호화/복호화하여 사용한다.
    이러한 암호화을 비대칭 암호화라고 한다. 이러한 암호화키(공개키/개인키)는 인증된 기관에서 발급하며, 각 브라우저마다 공인된 인증기관에 차이가 있다.

    키를 발급하는 인증기관을 CA(Certificate Authority)라고 부른다.

    비대칭키 인증 방식에 대한 간단한 설명

    • 개인키로 암호화: 개인키는 공개되어 있지 않기 때문에, 받는 사람이 내가 보낸 데이터임을 확신할 수 있게 된다.
    • 공개키로 암호화: 개인키를 통해 복호화 할 수 있기 때문에, 나 아닌 다른 사람은 볼 수 없는 데이터가 된다.

    https 통신 과정

    1. A기업은 HTTP 기반의 애플리케이션에 HTTPS를 적용하기 위해 공개키/개인키를 발급함
    2. CA 기업은 CA기업의 이름, 서버의 공개키, 서버의 정보 등을 기반으로 인증서를 생성하고, CA 기업의 개인키로 암호화하여 A기업에게 이를 제공함
    3. 클라이언트가 도메인에 접속하면, 웹 서버는 CA에서 발급받은 인증서를 웹 브라우저에 보낸다.
    4. A기업은 클라이언트에게 암호화된 인증서를 제공함
    5. 브라우저는 CA기업의 공개키를 미리 다운받아 갖고 있어, 암호화된 인증서를 복호화함
    6. 웹 브라우저는 실제 데이터의 암호화에 사용될 대칭키를 생성하고, 인증서에서 꺼낸 웹 서버 측의 공개키로 암호화하여 웹 서버로 보낸다.
    7. 웹 서버는 브라우저에서 보내온 암호화된 대칭키를 개인키로 복호화하여 확인한다.
    8. 웹 서버는 복호화한 대칭키를 통하여 데이터를 암호화하여 주고 받는다.

실제로 통신과정에서 데이터 통신에 사용할 대칭키를 생성하기 위해 비대칭 키를 생성하여 통신을 하게 되는 것이다.