Https

»

HTTPS

HTTPS는 Hyper Text Transfer Protocol Secure Socket layer의 약자입니다

HTTP 요청을 SSL 또는 TLS라는 알고리즘을 이용해 통신하는 과정에서 내용을 암호화하여 데이터를 전송하는 방법입니다

  • 인증서

    데이터 제공자 신원 보장

    도메인 종속

  • CA

    공인 인증서 발급 기관

    비대칭 키 암호화로 키 A를 암호화하면 키 B로만 복호화 가능

    CA가 발급한 인증서를 이용한 데이터를 제공하는 안전한 서버를 사용할 수 있게 사용자를 유도합니다

kaen@iseonghun-ui-MacBookAir ~ % mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1

Created a new certificate valid for the following names 📜

  • “localhost”
  • “127.0.0.1”
  • ”::1”

The certificate is at “cert.pem” and the key at “key.pem” ✅

It will expire on 2 November 2023 🗓

HTTPS 서버 작성

// node.js 이용
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.js 이용
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

어떠한 문자열에 ‘임의의 연산’을 적용하여 다른 문자열로 변환하는 것

  1. 모든 값에 대해 해시 값을 계산하는데 오래 걸리지 않아야 한다
  2. 최대한 해시 값을 피해야 하며 모든 값은 고유한 해시 값을 가진다
  3. 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 한다

![HTTPS%2025f786bf50654c48a1ae87b2e35a768b/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2021-08-02%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_10.24.48.png](HTTPS%2025f786bf50654c48a1ae87b2e35a768b/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA_2021-08-02%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB_10.24.48.png)

Salt

암호화해야 하는 값에 어떤 ‘별도의 값’을 추가하여 결과를 변형하는 것

  1. 암호화만 해놓는다면 해시된 결과가 늘 동일 해시된 값과 원ㄹ ㅐ값을 테이블(레인보우 테이블)로 만들어서 decoding 해버리는 경우도 생긴다
  2. 원본값에 임의로 약속된 ‘별도의 문자열’을 추가하여 해시를 진행한다면 기존 해시값과 전혀 다른 해시값이 반환되어 알고리즘이 노출되더라도 원본값을 보호할 수 있도록 하는 안전장치
  3. 기존: 암호화 하려는 값 ⇒ hash 값 Salt 사용 : 암호화하려는 값 + Salt용 값 ⇒ hash 값

Salt 사용시 주의사항

  1. Salt는 유저와 패스워드 별로 유일한 값을 가져야 합니다
  2. 사용자 계정을 생성할 때와 비밀번호를 변경할 때마다 새로운 임의의 Salt를 사용해서 해싱해야 합니다
  3. Salt는 재사용 금지
  4. Salt는 DB 유저 테이블에 같이 저장되어야 합니다