[javascript] Node.js에서 HTTPS 서버를 만드는 방법은 무엇입니까?

SSL 키와 인증서가 주어지면 어떻게 HTTPS 서비스를 생성합니까?



답변

다음 예제를 찾았습니다.

https://web.archive.org/web/20120203022122/http://www.silassewell.com/blog/2010/06/03/node-js-https-ssl-server-example/

이것은 노드 v0.1.94-v0.3.1에서 작동합니다. server.setSecure()최신 버전의 노드에서 제거됩니다.

해당 소스에서 직접 :

const crypto = require('crypto'),
  fs = require("fs"),
  http = require("http");

var privateKey = fs.readFileSync('privatekey.pem').toString();
var certificate = fs.readFileSync('certificate.pem').toString();

var credentials = crypto.createCredentials({key: privateKey, cert: certificate});

var handler = function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
};

var server = http.createServer();
server.setSecure(credentials);
server.addListener("request", handler);
server.listen(8000);


답변

익스프레스 API의 문서는 매우 명확를 주문.

또한 이 답변 은 자체 서명 된 인증서를 만드는 단계를 제공합니다.

Node.js HTTPS 문서 에서 주석과 스 니펫을 추가했습니다 .

var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');

// This line is from the Node.js HTTPS documentation.
var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.cert')
};

// Create a service (the app object is just a callback).
var app = express();

// Create an HTTP service.
http.createServer(app).listen(80);
// Create an HTTPS service identical to the HTTP service.
https.createServer(options, app).listen(443);


답변

“node https”를 인터넷 검색하는 동안이 질문을 찾았지만 허용 된 답변 의 예 는 매우 오래되었습니다 . 현재 (v0.10) 버전의 노드 문서 에서 가져온 것입니다 .

var https = require('https');
var fs = require('fs');

var options = {
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);


답변

위의 답변은 좋지만 Express 및 노드를 사용하면 정상적으로 작동합니다.

express가 앱을 만들었으므로 여기서 건너 뛰겠습니다.

var express = require('express')
  , fs = require('fs')
  , routes = require('./routes');

var privateKey = fs.readFileSync('cert/key.pem').toString();
var certificate = fs.readFileSync('cert/certificate.pem').toString();

// To enable HTTPS
var app = module.exports = express.createServer({key: privateKey, cert: certificate});


답변

Node.js에서 HTTPS 서버의 최소 설정은 다음과 같습니다.

var https = require('https');
var fs = require('fs');

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

https.createServer(httpsOptions, app).listen(4433);

http 요청도 지원하려면 다음과 같이 약간만 수정하면됩니다.

var http = require('http');
var https = require('https');
var fs = require('fs');

var httpsOptions = {
    key: fs.readFileSync('path/to/server-key.pem'),
    cert: fs.readFileSync('path/to/server-crt.pem')
};

var app = function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}

http.createServer(app).listen(8888);
https.createServer(httpsOptions, app).listen(4433);


답변

최신 정보

Greenlock.js 를 통해 Let ‘s Encrypt 사용

원본 게시물

나는이 답변의 아무도가 추가 것을 보여주지주의 중간 루트 CA를 체인으로, 여기에 몇 가지 제로 설정 예제 가 참조하는 놀은 :

단편:

var options = {
  // this is the private key only
  key: fs.readFileSync(path.join('certs', 'my-server.key.pem'))

// this must be the fullchain (cert + intermediates)
, cert: fs.readFileSync(path.join('certs', 'my-server.crt.pem'))

// this stuff is generally only for peer certificates
//, ca: [ fs.readFileSync(path.join('certs', 'my-root-ca.crt.pem'))]
//, requestCert: false
};

var server = https.createServer(options);
var app = require('./my-express-or-connect-app').create(server);
server.on('request', app);
server.listen(443, function () {
  console.log("Listening on " + server.address().address + ":" + server.address().port);
});

var insecureServer = http.createServer();
server.listen(80, function () {
  console.log("Listening on " + server.address().address + ":" + server.address().port);
});

이것은 직접 연결이나 표현을 통해 시도 하지 않지만 기본 https모듈에서 처리하고 연결 / 표현 응용 프로그램을 제공하는 데 사용 하면 더 쉬운 방법 중 하나입니다 .

또한 server.on('request', app)서버를 만들 때 앱을 전달하는 대신 사용 server하면 연결 / 익스프레스 앱을 만드는 이니셜 라이저 함수로 인스턴스를 전달할 수 있습니다 ( 동일한 서버에서 SSL을 통해 웹 소켓 을 수행하려는 경우). 예).


답변

모두 청취 할 응용 프로그램을 사용하려면 httphttps포트 80443각각 다음을 수행

특급 앱을 만듭니다.

var express = require('express');
var app = express();

에서 반환 한 앱 express()은 JavaScript 함수입니다. 요청을 처리하기위한 콜백으로 Node의 HTTP 서버에 전달 될 수 있습니다. 이를 통해 동일한 코드 기반을 사용하여 앱의 HTTP 및 HTTPS 버전을 쉽게 제공 할 수 있습니다.

다음과 같이 할 수 있습니다 :

var express = require('express');
var https = require('https');
var http = require('http');
var fs = require('fs');
var app = express();

var options = {
  key: fs.readFileSync('/path/to/key.pem'),
  cert: fs.readFileSync('/path/to/cert.pem')
};

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

자세한 내용은 문서를 참조하십시오