[Node.js] https 서버 생성

2017. 11. 16. 01:26개발/Node.js

반응형

https


http프로토콜에서 security가 추가된 것으로 http로 통신했을때 보안 이슈를 방지하고자 만들어짐.

https 서버를 만들기 위해서는 SSL이라는 인증서가 필요한데 개발용으로 비용을 지불하고 인증서를 구매하기는 어려움.

즉, OpenSSL을 사용하면 개발용으로 충분히 사용가능.






OpenSSL


1. 설치

설치 경로 : http://slproweb.com/products/Win32OpenSSL.html

윈도우 환경이라면 path에 환경변수를 추가해줘야 사용 가능.

환경변수를 굳이 넣고싶지 않다면 설치된 경로로 들어가서 다음 프로세스를 진행하면 됨. (openssl에 들어가서 명령어를 입력할때는 다음 프로세스에 있는 명령어에서 openssl을 빼고 입력하면 됨.)


2. 개인키 생성

1
openssl genrsa -out private_key.pem 1024
cs

3. 공개키 생성

1
openssl rsa -in private_key.pem -out public_key.pem -pubout
cs






https 서버 생성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var fs = require('fs');
var https = require('https');
 
var index = require('./routes/index');
var users = require('./routes/users');
 
var app = express();
const PORT = 3000;
 
// key define
const optionsForHTTPS = {
  key : fs.readFileSync('./keys/key.pem'),
  cert : fs.readFileSync('./keys/cert.pem')
};
 
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine''ejs');
 
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
 
app.use('/', index);
app.use('/users', users);
 
// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});
 
// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env'=== 'development' ? err : {};
 
  // render the error page
  res.status(err.status || 500);
  res.render('error');
});
 
https.createServer(optionsForHTTPS, app).listen(PORT, function(){
  console.log('HTTPS Server Start PORT:' + PORT);
});
 
module.exports = app;
 
cs


반응형