( Daliy / TIL 0416) https

Seung Ho Yoon·2021년 4월 17일
0
post-thumbnail

HTTPS란?

HTTPS는 Hyper Text Transfer Protocol Secure Socket layer 의 약자입니다. HTTP over SSL(TLS), HTTP over Secure라고 부르기도 한다.

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

SSL과 TLS는 무엇일까?

  1. SSL란?

    Secure Soket Layer의 약자이며 인터넷 연결을 안전하게 유지하고
    두 시스템(client-serve)간의 전송데는 민감한 데이터를 보호하고
    범죄자가 중요한 정보를 못 읽게 하고 수정하지 못하게 방지하는 표준기술이다.

  2. TLS (Transport Layer Security)는 업데이트 된 더 안전한 SSL 버전입니다.

HTTPS가 필요한 이유

클라이언트는 데이터 제공자가 제공해준 데이터를 사용할 수 밖에 없고 서버에 데이터를 요청하고 이후 받은 데이터를 이용하여 화면에 렌더링 해야한다.
따라서, 요청/응답에 중간에 가로채가는 중간자 공격에 취약하다.

중간자 공격이란 클라이언트와 서버 사이에서 공격자와 서로의 요청 및 응답 데이터를 탈취 또는 변조하여 다시 전송하는 공격이다.

중간자 공격은 데이터가 중간에 다른 도메인을 거쳐서 전달되기 떄문에 서버가 해당 데이터는 https:/example.com 도메인에서 제공되없습니다.라는 추가 데이터를 응답 객체에 실려 보낸다면 중간자 공격으로 인해 다른 도메인에서 받은 클라이언트는 데이터를 제공한 도메인과 전달받은 도메인을 비교하여 중간자 공격이 존재하는지 알수 있다.

하지만 이러한 과정도 변조될 수 있기 떄문에 암호화가 필요하다.

http요청에 한번 암호화를 시킨다.

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

  • CA: 인증서를 발급하는 공인기관

  • 비대칭 함호화키: 암호화키와 복호화키
    하나는 비밀로 숨겨두고 다른 하나는 클라이언트에 공개하여 데이터를
    안전하게 전송 할 수 있다.

모든 통신에 대해서 모든 공개 키 방식을 사용하는 것이 아니다, 많은 클라이언트 대상으로 매번 사용하기에는 복잡한 알고리즘이기 떄문에 통신의 초창기 에서만 비밀키를 사용하기 위한 키를 만들어 내기위해 생성한다.

HTTPS - 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);
profile
Frontend Developer

0개의 댓글