100%를 한번에 바꾸는건 어려워도 1%를 100번 바꾸는건 쉽다.

생각정리 자세히보기

개발/Node.js(Express)

[Node.js] Express에 HTTPS 적용하기

dc-choi 2022. 3. 4. 21:42
반응형

최근, 프로젝트에 HTTPS를 써야하는일이 생겨서 적용을 시키게 되었습니다.

배움에는 끝이 없다... 정말...

 

적용법을 시작하기 앞서 각각의 개념에 대해서 정리해보았습니다.

 

HTTPS란?

HTTP에서 보안이 강화된 프로토콜로, SSL을 이용하여 암호화를 합니다.

기존의 HTTP의 경우 암호화되지 않은 방법으로 데이터를 전송하므로, 메시지를 주고 받는 과정에서 감청당할 수 있습니다. 만약 중요한 정보를 전송한다면, 메시지를 주고받는 과정이 암호화 되지않은 상태로 노출될 수 있습니다.

 

SSL이란?

SSL은 서버와 클라이언트간의 통신을 제 3자가 보증하는 전자문서로, 주로 하는 역할은 암호화입니다. SSL은 암호화된 데이터를 전송하기 위해서 공개키와 대칭키를 혼합해서 사용합니다

 

자세한 내용
https://opentutorials.org/course/228/4894

 

OpenSSL 설치 및 인증서 발급

먼저, HTTPS에는 SSL 인증서가 필요하다고 합니다.

로컬에서 HTTPS를 적용하기 위해서는 OpenSSL에서 쉽게 인증서를 발급할 수 있습니다.

http://slproweb.com/products/Win32OpenSSL.html에 들어가면 인증서를 각 운영체제에 맞게 받을 수 있습니다.

 

설치를 하고나면 설치된 경로를 환경변수로 지정해줘야 합니다.

저는 윈도우로 진행을 해서, 윈도우 환경변수를 지정해줬습니다.

 

경로는 다음처럼 설정해두었습니다.

C:\Program Files\OpenSSL-Win64\bin

환경변수를 정상적으로 작동시키려면, 윈도우를 재시작해야합니다.

 

SSL의 대칭키와, 공개키를 생성해야합니다. 먼저 대칭키를 생성합니다.

openssl genrsa 1024 > private.pem

다음으로 대칭키에 대한 공개키를 생성합니다.

openssl req -x509 -new -key private.pem > public.pem

 

로컬 서버에 적용

Node.js에서는 내장모듈인 https를 이용하여 로컬에서 서버구축이 가능합니다.

코드는 다음과 같습니다.

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

const app = express();

const options = {
  key: fs.readFileSync('./keys/private.pem'),
  cert: fs.readFileSync('./keys/public.pem')
};

const server = https.createServer(options, app);

server.listen(port, () => {
  console.log("HTTPS server listening on port " + port);
});

 

적용을 다 마치면, 서버가 정상적으로 실행됩니다.

 

참고

https://cinema4dr12.tistory.com/984

https://melius.tistory.com/50

반응형