HTTPS

안정태·2021년 5월 27일
0

Study

목록 보기
31/33

HTTP와 HTTPS는 둘다 같은 역할을 한다. 차이점은 HTTPS는 보안장치가 더 결합된 통신방식이다.

🔐 HTTPS

HTTPS와 SSL

둘은 같은 의미로 이해하고 있는 경우가 많다. 이는 맞기도 틀리기도 하다. HTTPS 프로토콜은 SSL 위에서 돌아가는 프로토콜 이다.

SSL은 TLS와 같은 것이다. SSL 3.0을 TLS 1.0이 계승했다.

📜 SSL 인증서

클라이언트와 서버간의 통신을 제 3자가 보증해주는 전자화된 문서다.

  • 통신 내용이 공격자에게 노출되는 것을 막을 수 있다.
  • 클라이언트가 접속하려는 서버가 신뢰 할 수 있는 서버인지를 판단할 수 있다.
  • 통신 내용의 악의적인 변경을 막을 수 있다.

암호화
본 내용을 숨기기 위해서 내용을 암호화 하는 것

복호화
암호화된 내용을 본 내용으로 다시 복귀 시키는 것

이 모든 과정은 key를 사용해서 이루어진다.

비대칭 키 암호화

A로 암호화 -> 키 B로만 복호화 가능

Hand Shake : 클라이언트가 요청을 보내면 암호화 가능한 키와 인증서를 전달한다.
비밀 키 생성 : 키 제작용 스트링을 이용해서 서로 데이터를 주고받고 비밀키를 생성한다.
상호 키 검증 : 다시 암호화를 해서 서로 전달한다. 복호화를 성공했다면 키 검증 성공!!

Hashing

암호화는 일련의 정보를 임의의 방식을 사용해서 다른 형태로 변형해서 해당 방식을 소유한 사람을 제외하고는 이해할 수 없도록 관리하는 '알고리즘'을 이용해 정보를 관리하는 과정

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

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

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

  • 암호화만 해놓는다면 해시된 결과가 늘 동일
  • 원본값에 임의로 약속된 '별도의 문자열'을 추가하여 해시를 진행한다면 기존 값과 전혀 다른 해시값이 반환되어 알고리즘이 노출되더라도 원본값을 보호할 수 있게 하는 안전장치
  • 기존값 + Salt값 => hash값

HTTPS 서버 구현

// node.js 이용
const https = require('https');
const fs = require('fs');
const express = require('express');

// https를 이용한 구현

// 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 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);
profile
코딩하는 펭귄

0개의 댓글