development

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

big-blog 2020. 3. 3. 23:04
반응형

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);

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


이를 Fastify 프레임 워크와 함께 보관할 수도 있습니다.

const { readFileSync } = require('fs')
const Fastify = require('fastify')

const fastify = Fastify({
  https: {
    key: readFileSync('./test/asset/server.key'),
    cert: readFileSync('./test/asset/server.cert')
  },
  logger: { level: 'debug' }
})

fastify.listen(8080)

( openssl req -nodes -new -x509 -keyout server.key -out server.cert테스트를 작성해야하는 경우 파일을 작성하기 위해 실행 )


  1. https://indy.fulgan.com/SSL/openssl-0.9.8r-i386-win32-rev2.zip 에서 openssl 설정 용 rar 파일을 다운로드하십시오.
  2. c 드라이브에 폴더를 복사하십시오.
  3. openssl.cnf 파일을 작성하고 다음 위치에서 해당 컨텐츠를 다운로드 하십시오 .
  4. propmt 명령을 열고 openssl.cnf 경로 C : \ set OPENSSL_CONF = d : /openssl.cnf를 설정하십시오.
  5. 그런 다음 OpenSSL> genrsa -des3 -out server.enc.key 1024를 실행하십시오.
  6. 그런 다음 암호 문구를 요구합니다 : 인증서의 암호로 4 ~ 11자를 입력하십시오
  7. 그런 다음이 Openssl> req -new -key server.enc.key -out server.csr을 실행하십시오.
  8. 그런 다음 국가 코드 상태 이름 등과 같은 세부 정보를 요청하여 자유롭게 채 웁니다. 도 10. 그런 다음 Openssl> rsa -in server.enc.key -out server.key를 실행하십시오.
  9. 이 OpenSSL> x509 -req -days 365 -server.csr -signkey server.key -out server.crt를 실행 한 다음 스택 오버플로에있는 이전 코드를 사용하십시오.

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

var app = express();

var staticPath = path.join(__dirname, '/public');
app.use(express.static(staticPath));

app.listen(8070, function() {
  console.log('Server started at port 8070');
});

참고 URL : https://stackoverflow.com/questions/5998694/how-to-create-an-https-server-in-node-js



반응형