SSL 키와 인증서가 주어지면 어떻게 HTTPS 서비스를 생성합니까?
SSL 키와 인증서가 주어지면 어떻게 HTTPS 서비스를 생성합니까?
답변:
다음 예제를 찾았습니다.
이것은 노드 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);
setSecure
더 이상 사용되지 않습니다. 대신 이것을 확인하십시오 stackoverflow.com/questions/5136353/node-js-https-secure-error
익스프레스 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);
options
먼저 입력하십시오 https.createServer
.
"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);
*.pem
있습니까 ( )? 이 페이지를 따라 시도했지만 localhost:8000
브라우저에서 열 때 데이터가 수신되지 않습니다 (로드 중입니다 ...).
openssl
한 다음 cmd 프롬프트에openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
https://localhost:8080
. HTTP는 HTTPS가 아닙니다.
위의 답변은 좋지만 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});
module.exports
합니까? 그럴 필요가 없습니다
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을 통해 웹 소켓 을 수행하려는 경우). 예).
모두 청취 할 응용 프로그램을 사용하려면 http
및 https
포트 80
와 443
각각 다음을 수행
특급 앱을 만듭니다.
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
테스트를 작성해야하는 경우 파일을 작성하기 위해 실행 )
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');
});