비전공자 코딩 배우기 _18주차 HTTPS, hashing, cookie

Jinny·2021년 9월 15일
0

TIL

목록 보기
15/28
post-thumbnail

HTTPS 🌎

Hyper Text Transfer Protocol Secure Socket layer 의 약자이다.

인증에서 HTTPS 프로토콜을 사용해야 하는 이유? HTTP보다 안전한 방법이고, 데이터 제공자의 신원을 보장받을 수 있기 때문이다.

  • 기밀성(privacy) - 메세지를 가로챌 수 없음(메세지 내용 읽을 수 없음, 암호화 되어있음)
  • 무결성(integrity) - 메세지가 조작되지 않음(A→ B 메세지가 원본 그대로 잘 도착함, 암호화 되어있음, 메세지는 응답일 수도 요청일 수도 있다.)

암호화 🔐

HTTPS 프로토콜 특징 중 하나는 암호화된 데이터를 주고받기 때문에, 중간에 인터넷 요청이 탈취되더라도 내용을 알아볼 수 없다.

브라우저는 인증서에서 해당 인증서를 발급한 CA 정보를 확인하고 인증된 CA가 발급한 인증서가 아니라면 화면에 경고창을 띄워 서버와 연결이 안전하지 않다는 화면을 보여준다.

이런 경고를 직접 보여줌으로써 브라우저들은 인증된 CA가 발급한 인증서를 이용하여 데이터를 제공하는 안전한 서버를 사용할 수 있게 사용자를 유도한다.

대칭 키 암호화

: 암호화 / 복호화를 하는 키가 같다.

비대칭 키 암호화

: 암호화 / 복호화 하는 키가 다르다.

  • 공개 키 : 암호화
  • 비공개 키(개인키) : 복호화

인증서 📄

HTTPS 프로토콜의 또 다른 특징 중 하나는 브라우저가 응답과 함께 전달된 인증서 정보를 확인할 수 있다는 점이다.

인증서는 무엇을 보장할까?

→ 브라우저에서 접속한 서버가 '의도한' 서버임을 보장

→ 브라우저와 서버가 통신할 때 암호화할 수 있도록 서버의 공개 키 제공

ex) mkcert로 만든 인증서 (CA는 누구? → 내컴퓨터)

  • key.pem
  • cert.pem

임의의 인증서라 invaild key라는 에러가 뜸


해싱 💡

  • 해싱 알고리즘(SHA256 온라인 검색)

    1. 해싱함수는 input → output 항상 똑같은 결과를 낸다.
    2. 복호화가 (사실상) 불가능하다.
  • 솔트

    ex) secret: 'keyboard cat' → 솔트

    원래있는 패스워드에서 완전히 다른 결과를 생성

    Salt + Password ——Hash function——> DIGEST

    암호화의 보안성이 좋아짐.


쿠키 🍪

  • HTTP의 stateless(무상태성) 특징을 보완해주는 도구

    • 클라이언트와 서버가 요청/응답을 주고받음

      1번째 요청을 2번째 요청이 모름(각각 독립적이라) 그럴 때 쿠키가 필요함.

      요청마다 쿠키를 담아서 보내는 방식

  • 작은 문자열을 저장

  • 서버는 브라우저에게 일방적으로 쿠키를 저장할 수 있다

    → 어떻게? 헤더를 이용한다.

    response(응답) ex) Set-Cookie: 키1=값1, 키2=값2, connect.sid = 세션ID

    request(요청) ex) Cookie: connect.sid = 세션ID

  • 쿠키는 브라우저에 담긴다. (세션은 서버에 있음)

  • 인터넷 도구 → 애플리케이션 → 쿠키에서 볼 수 있음

쿠키 옵션

  1. Domain

    쿠키 옵션에서 도메인 정보가 존재한다면 클라이언트에서는 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키를 전송할 수 있다.

  2. Path

    세부 경로는 서버가 라우팅할 때 사용하는 경로로, 기본으로 / 으로 설정되어 있다.

    Path 옵션의 특징은 설정된 path를 전부 만족하는 경우 요청하는 Path가 추가로 더 존재하더라도 쿠키를 서버에 전송할 수 있다.

  3. MaxAge or Expires

    쿠키가 유효한 기간을 정하는 옵션이다.

    MaxAge : 앞으로 몇 초 동안 쿠키가 유효한지 설정하는 옵션이다.

    Expires : 언제까지 유효한지 Date를 지정한다.

    두 옵션이 모두 지정되지 않는 경우에는 브라우저의 탭을 닫아야만 쿠키가 제거될 수 있다.

  4. Secure

    쿠키를 전송해야 할 때 사용하는 프로토콜에 따른 쿠키 전송 여부를 결정한다.
    만약 해당 옵션이 true로 설정된 경우, 'HTTPS' 프로토콜을 이용하여 통신하는 경우에만 쿠키를 전송할 수 있다.

  5. HttpOnly

    자바스크립트에서 브라우저의 쿠키에 접근 여부를 결정한다.

    만약 해당 옵션이 true로 설정된 경우, 자바스크립트에서는 쿠키에 접근이 불가

    기본적으로는 false 로 지정되어 있다. 단, 'XSS' 공격에 취약하다.

  6. SameSite

    Cross-Origin 요청을 받은 경우 요청에서 사용한 메소드와 해당 옵션의 조합으로 서버의 쿠키 전송 여부를 결정하게 된다.

    Lax : Cross-Origin 요청이면 'GET' 메소드에 대해서만 쿠키를 전송할 수 있다.

    Strict : Cross-Origin이 아닌 same-site 인 경우에만 쿠키를 전송 할 수 있다.

    None : 항상 쿠키를 보내줄 수 있다. 다만 쿠키 옵션 중 Secure 옵션이 필요.

    이때 'same-site'는 요청을 보낸 Origin과 서버의 도메인이 같은 경우를 말합니다.

    이러한 옵션들을 지정한 다음 서버에서 클라이언트로 쿠키를 처음 전송하게 된다면 헤더에 Set-Cookie라는 프로퍼티에 쿠키를 담아 쿠키를 전송하게 된다.

    이후 클라이언트 혹은 서버에서 쿠키를 전송해야 한다면 클라이언트는 헤더에 Cookie라는 프로퍼티에 쿠키를 담아 서버에 쿠키를 전송하게 된다.


    출처 : MDN(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie)

profile
코린이

0개의 댓글