개발자는 오늘도 달립니다.
[NodeJS] 셀프 인증서 발행 (Self-Signed, Trusted Certificates) for Express 본문
[NodeJS] 셀프 인증서 발행 (Self-Signed, Trusted Certificates) for Express
✍21시간 2021. 8. 24. 17:49Node.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 문제 가 발생 할 수 있는데 세팅에서 인증서 검사를 꺼야 합니다!
Settings 에서 Enable SSL Certificate verification 을 ON -> OFF 상태로 변경 해 주시면 됩니다.
'JavaScript > NodeJS' 카테고리의 다른 글
[NodeJS] nvm 설치, 노드 (NodeJS) 버전 관리 방법 Linux 환경(centOS, Ubuntu 등) (0) | 2021.08.25 |
---|---|
[NodeJS] NVM 설치, 다수 Node 버전 관리 (Windows 환경) (0) | 2021.07.30 |
[NodeJS] pm2 부트 스크립트 등록하기 (systemctl service) (0) | 2020.12.08 |