본문 바로가기

개발자는 오늘도 달립니다.

[NodeJS] 셀프 인증서 발행 (Self-Signed, Trusted Certificates) for Express 본문

JavaScript/NodeJS

[NodeJS] 셀프 인증서 발행 (Self-Signed, Trusted Certificates) for Express

✍21시간 2021. 8. 24. 17:49

Node.js / Express 앱 서버를 http가 아닌 https/SSL 레이어로 동작시키지 위해서는 자체 서명되고 신뢰할 수 있는 인증서 설정이 필요합니다.

소수 개발자분들이 보안에 대한 문제 의식을 많이 느끼지 못하고 HTTP를 그냥 이용하기도 하는데 평문을 그대로 이용할 시 남들에게는 패킷을 고스란히 보여주는 꼴이 되니.. 서비스에서는 절때 절때로 금지입니다!

HTTPS 를 제대로 활용하기에는 공식 된 곳에서 인증서를 발급받아 사용하는 것이 마땅하나, 통신 간 패킷을 암호화 할 목적이라면 셀프로 인증서를 발급해서 사용 하는 방법 있는데 이 방법을 블로깅 하도록 하겠습니다.

 

1. 키 및 인증서 생성

먼저 키와 해당 인증서를 생성해야 합니다. 터미널을 열고 다음 명령을 사용하여 이 작업을 수행합니다.

openssl genrsa -out localhost.key 2048
openssl req -new -x509 -key localhost.key -out localhost.crt -days 3650 -subj /CN=localhost

(다른 호스트를 사용하려면 "localhost" -> 원하는 도메인으로 모두 바꾸세요.)

 

아래와 같이 Nodejs 프로젝트 package.json 에 scripts 로 추가 하여 사용 하면 편합니다! (한번 발급 받으면 변경 할 일이 없기는 하지만.. 테스트 프로젝트에 입력 해 놓으면 그때 그때 쓰기 좋아요.)

"setup:https": "openssl genrsa -out ./cert/localhost.key 2048 && openssl req -new -x509 -key ./cert/localhost.key -out ./cert/localhost.crt -days 3650 -subj /CN=localhost"

 

2. 셀프 서명된 SSL 인증서를 사용하도록 Express 소스 수정!

#!/usr/bin/env node

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

let options = {
    key: fs.readFileSync( './localhost.key' ),
    cert: fs.readFileSync( './localhost.crt' ),
    requestCert: false,
    rejectUnauthorized: false
};

let app = express();
let port = process.env.PORT || 443;
let server = https.createServer( options, app );

server.listen( port, function () {
    console.log( 'Express server listening on port ' + server.address().port );
} );

(options 에서 requestCert 와 rejectUnauthorized 를 모두 false 로 해주세요.)

 

3. 클라이언트 측 셀프 인증서 수락 방법

 

- 웹 브라우저에서 사용 시 수락 방법

자체 서명된 인증서를 신뢰할 수 있도록 하려면 해당 인증서를 시스템에서 유효한 인증서로 수락해야 합니다. 이렇게 하면 빨간색 경고("보안되지 않음") 알림이 녹색 잠금으로 바뀌고 웹 사이트에서도 요청이 가능 합니다.

 

- Postman API 사용 시 수락 방법

아래와 같이 Postman 에서 SSL Error: Self signed certificate 문제 가 발생 할 수 있는데 세팅에서 인증서 검사를 꺼야 합니다!

postman SSL Error: Self signed certificate 문제

 

Settings 에서 Enable SSL Certificate verification 을 ON -> OFF 상태로 변경 해 주시면 됩니다.

postman enable ssl certificate verification 설정

 

Comments