TIL - 인증서 발급 및 HTTPS 서버 구현

MinWoo Park·2021년 2월 8일
2

TIL

목록 보기
5/49
post-thumbnail

Today I Learned

매일 배운 것을 정리하며 기록합니다. HTTPS에 대해 복습하며 인증서를 발급 받는 법을 정리했습니다.


HTTP (Hypertext Transfer Protocol)

  • 전 세계의 웹브라우저, 서버, 웹 애플리케이션의 통신 규약
  • 신뢰성 있는 데이터 전송 프로토콜
  • stateless (무상태성): HTTP는 특정 상태를 담고 있지 않으며, 이전 요청이나 다음 요청을 기억하지 않음
  • connectionless (비연결성): 연결 상태를 유지시키지 않음

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer)

  • 중요한 HTTP 트랜잭션을 안전하게 보호하기 위함
  • HTTP와 디지털 암호화 기술의 결합
  • 모든 HTTP 요청과 응답 데이터는 네트워크로 보내지기 전 하부에 보안 계층을 제공함으로써 암호화 됨.
  • 보안 계층은 안전 소켓 계층(Secure Sockets Layer, SSL) 혹은 이를 계승한 전송 계층 보안(Transport Layer Security, TLS)를 이용하여 구현 됨.
  • 비대칭키 암호 체계 : 인코딩과 디코딩에 다른 키를 사용하는 알고리즘
  • 공개키 암호법 : 서버와 통신하는 모든 클라이언트는 하나의 공캐키를 메시지를 인코딩하고 서버는 자신만의 디코딩 키로 메세지를 복호화한다.
  • 공개키 암호 방식 알고리즘은 느린 경향이 있어 실제로는 대칭과 비대칭 방식을 섞은 것이 쓰임

인증서 발급

  • mkcert : 로컬 환경에서 신뢰할 수 있는 인증서 발급 프로그램
  • localhost, 127.0.0.1(IPv4), ::1(IPv6)에서 사용할 수 있는 인증서 발급 순서는 다음과 같음(macOS)
  1. Homebrew를 통해 mkcert 설치
$ brew install mkcert
  1. 로컬을 인증된 발급기관으로 추가
$ mkcert -install
  1. 로컬 환경에 대한 인증서 발급
$ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
  1. cert.pem, key.pem 생성 완료

HTTPS 서버 작성

  • 생성한 인증서 파일들을 HTTPS서버에 적용해 주는 작업 필요

  • 방법 1 : 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);
  • 방법 2: 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);

Reference : 데이빗 고을리, 브라이언 토티, 마조리 세이어, 세일루 레디, 안슈 아가왈, 『HTTP 완벽 가이드』, 프로그래밍 인사이트(2014), p355-365.

profile
물음표를 느낌표로 바꾸는 순간을 사랑하는 개발자입니다.

0개의 댓글