HTTPS 사설 인증서 발급 및 서버 구현
1. 설치(mkcert)
$ sudo apt install libnss3-tools
$ wget -O mkcert https://github.com/FiloSottile/mkcert/releases/download/v1.4.3/mkcert-v1.4.3-linux-amd64
$ chmod +x mkcert
$ sudo cp mkcert /usr/local/bin/
$ brew install mkcert
$ brew install nss
2. 인증서 생성
$ mkcert -install
$ mkcert -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1
3. https 서버 작성
3.1 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 mad https server now :)');
res.end();
}
).listen(3001);
3.2 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);
4. ngrok을 이용한 https로 터널링
- ngrok: http로 만들어진 서버를 https 프로토콜로 터널링 해주는 프로그램.
- 설치
$ brew install --cask ngrok
const http = require('http');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
$ node index.js
Server running at http://127.0.0.1:3000/
$ ngrok http 3000
- ngrok 터널에서 실행 결과
- https프로토콜로 포워딩된 사이트로 접속해도 연결가능
- 세션 유효기간이 2시간이라 계속 유지하고 싶은 경우, ngrok사이트에 회원가입하고 토큰을 받아와서 사용하면 됨
# ngrok 실행시 authtoken값을 입력하여 실행하는 방법
$ ngrok authtoken [토큰값]
- 다시 ngrok을 실행히시키면 유효시간 정보는 없어진걸 볼수 있다. 도메인나 포트번호도 지정가능함.