TIL : 210802_월_(https)

10773 단어 TILhttpsTIL

HTTPS

  • httpssl을 이용한것이 https

SSL

  • 그렇다면 ssl이란?
  1. 디지털인증서. 클라이언트와 서버의 통신을 제3자가 보증해주는 전자화된 문서
  2. ct가 요청을 보내면 server가 to ct 인증서 정보를 전달.
  3. ct는 인증서가 신뢰할만한 것인지 검증한다.
  • ssl로 얻을 수 있는것 ?
  1. 통신이 제3자에게 노출 되지 못하게 한다.
  2. 서버가 신뢰할 수 있는 서버인지 판단할 수 있다.

대칭키

  • ct와 server가 같은 키값을 가지고 암호화와 복호화를 진행한다.
  • 대칭키의 단점은 둘다 같은 키값을 가지기 위해서는 암호화되지 않은 키값을 통신으로 주고받아야하는데, 이때 유출될 가능성이 높다.

공개키 (for 암호화 / 인증 )

  • 서로 다른 두개의 키
  • public키로 암호화를 하면, 그에 해당하는 private키만이 복호화가 가능하다.
  • 따라서 키 배달사고가 발생하지 않는다.

공개키를 이용해서 인증하기

받은 정보가 내가 원하던 사람이 보낸 정보가 맞나 ?

  • 위 사진은 암호로서의 기능이 없음.
  • a키를 가진 사람이 보낸 정보로, b키가 복호화에 성공했다는 의미는
    a키를 가진 사람이 내가 원하던 사람이는 것 보증
  • 단 매우 복잡한 연산이므로, 통신의 초창기 비밀키 생성을 위해 사용하는 편.

HTTPS 사설 인증서 발급

mkcert?

  • 로컬환경에서 신뢰할 수 있는 인증서를 만들어주는 도구 ,
  • 설치
  1. 설치하기 명령어 Ubuntu

sudo apt install linbnss-tools

wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64 //mkcert깃클론

chmod +x

sudo cp mkcert /usr/local/bin/

  1. 인증서 생성 명령어 (로컬을 인증된 발급기관으로 추가 )

mkcert -install

  1. 로컬 환경에 대한 인증서를 만들기 localhost로 대표되는 로컬 환경에 대한 인증서를 만들어준다.

mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
혹은
옵션으로 추가한 example.com 도메인에서 사용할 수 있는 인증서 발급
mkcert -key-file key.pem -cert-file cert.pem example.com *.example.com

  • 적용하기 node.js https모듈 사용
const https = require('https');
const fs = require('fs');

https
  .createServer(
    {
      key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'),
      cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'),
    },
    function (req, res) {
      res.write('Congrats! You made https server now :)');
      res.end();
    }
  )
  .listen(3001);

혹은 express

const https = require('https');
const fs = require('fs');
const express = require('express');

const app = express();

https
  .createServer(
    {
      key: fs.readFileSync(__dirname + '/key.pem', 'utf-8'),
      cert: fs.readFileSync(__dirname + '/cert.pem', 'utf-8'),
    },
    app.use('/', (req, res) => {
      res.send('Congrats! You made https server now :)');
    })
  )
  .listen(3001);

Hashing

어떠한 문자열에 임의의 연산(암호화)을 적용하여 다른 문자열로 변환하는 것

  • 일반적인 res와 req의 과정

  • 2번 과정 후에 암호화가 일어난다.
    즉, 서버에서 암호화를 해서 DB와 대조 (DB역시 암호화된 문자를 저장)

SALT

암호화 할 값에 어떤 '별도의 값 salt'를 추가하여 결과를 변형한다.

  • 문자열 + salt값 =>>> hash값
  • 이렇게 salt를 사용하여 알고리즘 노출시 위험을 줄여준다.
  • 단, 몇가지 주의점이 있음
    • salt 는 유저와 패스워드 별로 유일한 값을 가져야함
    • 계정생성 및 비번변경이 일어날때마다 새로운 salt필요
    • 재사용불가
    • DB의 유저테이블에 함께 저장된다.

COOKIE

클라이언트(브라우저) 로컬에 저장되는 키-값형태의 데이터이다.

  • 인증 유효시간 명시 가능하다.
  • 쿠키 데이터는 무한정이 아니다.
  • 사용자의 특별한 요청이 없어도 서버에 요청할때 자동으로Request Header를 포함한다.
  • 쿠키의 구성요소 / set-cookie
cookie: {
      domain: 'localhost',
      path: '/',
      maxAge: 24 * 6 * 60 * 10000,
      sameSite: 'None',
      httpOnly: true,
      secure: true,
},

좋은 웹페이지 즐겨찾기