TIL-211227

EBinY·2021년 12월 27일
0

TIL - Today I Learned

목록 보기
28/54

HTTPS intro

  • HTTPS: HTTP Secure, HTTP protocol을 암호화

  • 인증서: Certificate, 데이터 제공자 신원 보장, 도메인 종속

  • CA: Certificate Authority, 공인 인증서 발급 기관
  • 비대칭 암호키: 키 A로 암호화 -> 키 B로만 복호화가 가능

HTTPS

  • HTTPS Protocol
    • Hyper Text Transfer Protocol Secure Socket layer
    • HTTP over SSL(TLS), 또는 HTTP over Secure라고도 부름
    • HTTP 요청을 SSL or TLS 알고리즘으로 암호화하여 전송하는 방법
      • SSL: Secure Socket Layer, 웹사이트와 브라우저(혹은 두 서버) 사이에 전송된 데이터를 암호화하여 인터넷 연결 보안을 유지하는 표준 기술, HTTP 전용 기술이 아닌 응용계층의 여러 프로토콜 보안에 사용, TCP를 보호하는 프로토콜
      • TLS: Transport Layer Security, 최신의 더 강력한 버전의 SSL, SSL과 같은 말이라고 봐도 무방
      • CA: SSL 인증서를 발급하는 기관, 신뢰하는 기관들을 의미
    • 중간자 공격에 취약: 요청, 응답을 중간에 탈취 및 변조하여 다시 전송하는 공격 방식
  • 암호화: 암호화를 거친 통신은 정확한 키로 복호화하여야만 내용을 알 수 있음
  • 인증서: 브라우저에 응답과 함께 전달된 인증서 정보를 확인할 수 있음
    • CA가 발급한 인증서를 이용하여 데이터를 제공하는 안전한 서버를 사용하도록 유도

Hashing

  • Encryption: 암호화, 일련의 정보를 임의의 방식을 사용하여 다른 형태로 변환, 해당 방식에 대한 정보를 가지고 있는 사람 이외에는 이용할 수 없도록 알고리즘을 이용해 관리하는 방식
    • (ex) shiftBy('bicycle', 2) => shiftBy('dkezeng', -2)
  • Hashing: 어떠한 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것
    1. 해시 값을 계산하는데 오래 걸리지 않아야 함
    2. 최대한 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가짐
    3. 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 함
  • Salt: 암호화해야 하는 값에 어떤 '별도의 값'을 추가하여 결과를 변형하는 것
    1. 암호화만 해놓는다면 해시된 결과가 늘 동일
    • 해시된 값과 원래 값을 테이블(레인보우 테이블)로 만들어 decoding 가능
    1. 원본값에 임의로 약속된 '별도의 문자열'을 추가하여 해시를 진행하면 기존 해시값과 전혀 다른 해시값이 반환되어 알고리즘이 노출되어도 원본값을 보호하는 안전 장치
    2. 기존: (암호화하려는 값) => (해시 값)
    3. Salt 사용: (암호화하려는 값 + Salt) => (해시 값)
  • Salt 사용 시 주의점
    1. 유저와 패스워드 별로 유일한 값을 가져야 함
    2. 사용자 계정을 생성할 때와 비밀변호를 변경할 때 마다 새로운 임의의 Salt를 가져야 함
    3. 절대 재사용 금지
    4. DB의 유저 테이블에 같이 저장되어야 함


  • HTTP는 Stateless(무상태성), 이를 유지하기 위한 Cookie가 사용됨
  • 서버가 일방적으로 클라이언트에 전달하는 작은 데이터
  • 서버가 웹 브라우저(클라이언트)에 정보를 저장하고 불러올 수 있는 수단
  • 해당 도메인에 쿠키가 존재하면, 웹 브라우저는 도메인에게 http 요청 시 쿠키를 함께 전달
  • 데이터를 저장한 이후 아무 때나 데이터를 가져올 수 없음, 특정 조건이 만족한 경우에만 다시 가져올 수 있음
  • 쿠키 옵션: 위의 조건들은 쿠키 옵션으로 표현함
    • Domain: 서버와 요청의 도메인이 일치하는 경우 쿠키 전송
    • Path: 서버 요청의 세부경로가 일치하는 경우 쿠키 전송
    • MaxAge or Expires: 쿠키의 유효 기간 설정
    • Secure: 'HTTPS'에서만 쿠키 전송 여부를 결정
    • HTTPOnly: 스크립트(JS)에서 브라우저의 쿠키에 접근 여부를 결정
    • SameSite: Cross-Origin 요청을 받은 경우 요청에서 사용한 메소드와 해당 옵션의 조합으로 서버의 쿠키 전송 여부를 결정
      • Lax: Cross-Origin 요청이면 'GET'메소드에 대해서만 쿠키를 전송
      • Strict: Cross-origin이 아닌 same-site인 경우에만 쿠키를 전송
      • None: 항상 쿠키를 보내줄 수 있음, 다만 secure옵션이 필요함
  • 이러한 옵션들을 지정한 다음 서버에서 클라이언트로 쿠키를 처음 전송하게 된다면 헤더에 Set-Cookie라는 프로퍼티에 쿠키를 담아 쿠키를 전송, 이후 클라이언트 혹은 서버에서 쿠키를 전송해야 한다면 클라이언트는 헤더에 Cookie라는 프로퍼티에 쿠키를 담아 서버에 쿠키를 전송
  • 쿠키의 특성을 이용하여 서버는 클라이언트에 인증정보를 담은 쿠키를 전송하고, 클라이언트는 전달받은 쿠키를 요청과 같이 전송하여 Stateless 한 인터넷 연결을 Stateful 하게 유지할 수 있음, 하지만 기본적으로는 쿠키는 오랜 시간 동안 유지될 수 있고, 자바스크립트를 이용해서 쿠키에 접근할 수 있기 때문에 쿠키에 민감한 정보를 담는 것은 위험함

0개의 댓글