SSL anahtarı ve sertifikası verildiğinde, HTTPS hizmeti nasıl oluşturulur?
SSL anahtarı ve sertifikası verildiğinde, HTTPS hizmeti nasıl oluşturulur?
Yanıtlar:
Aşağıdaki örneği buldum.
Bu, v0.1.94 - v0.3.1 düğümü için geçerlidir. server.setSecure()
düğümü yeni sürümlerinde kaldırıldı.
Doğrudan bu kaynaktan:
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
kullanımdan kaldırıldı. Bunun yerine şunu kontrol edin stackoverflow.com/questions/5136353/node-js-https-secure-error
Ekspres API doc oldukça net bir şekilde bu büyü.
Ayrıca bu yanıt , kendinden imzalı bir sertifika oluşturma adımları verir.
Node.js HTTPS belgelerinden bazı yorumlar ve bir snippet ekledim :
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
önce koyduğunuzdan emin olun https.createServer
.
"Düğüm https" yi googling ederken bu soruyu buldum , ancak kabul edilen yanıttaki örnek çok eski - düğümün geçerli (v0.10) sürümünün belgelerinden alındığında , şöyle görünmelidir:
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
)? Bu sayfayı takiplocalhost:8000
etmeyi denedim , ancak tarayıcıda açarken veri alınmıyor (sadece yükleniyor ...).
openssl
, sonra cmd istemine, yazınopenssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
https://localhost:8080
. HTTP HTTPS DEĞİLDİR.
Yukarıdaki cevaplar iyidir, ancak Express ve düğüm ile bu iyi çalışır.
Ekspres sizin için uygulamayı oluşturduğundan, bunu burada atlayacağım.
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
? Buna gerek yok
Node.js'de bir HTTPS sunucusu için asgari kurulum şöyle olacaktır:
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);
Ayrıca http isteklerini desteklemek istiyorsanız, yalnızca bu küçük değişikliği yapmanız gerekir:
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);
Let's Encrypt'i Greenlock.js üzerinden kullanın
Bu cevapların hiçbirinin zincire bir Ara Kök CA eklemenin , burada görmek için oynamak için bazı sıfır yapılandırma örnekleri olduğunu göstermediğini fark ettim :
Pasaj:
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);
});
Bu, doğrudan bağlantı veya ekspres yoluyla yapmaya çalışmazsanız genellikle daha kolay olan şeylerden biridir , ancak yerel https
modülün işlemesine izin verin ve ardından bağlantı / ekspres uygulamanıza hizmet etmek için bunu kullanın.
Ayrıca, server.on('request', app)
sunucuyu oluştururken uygulamayı iletmek yerine kullanırsanız , server
örneği connect / express uygulamasını oluşturan bazı başlatıcı işlevine geçirme fırsatı verir ( aynı sunucuda ssl üzerinden websockets yapmak istiyorsanız , çünkü misal).
Her iki dinlemek için uygulamanızı etkinleştirmek için http
ve https
bağlantı noktalarında 80
ve 443
sırasıyla aşağıdakileri yapın
Hızlı bir uygulama oluşturun:
var express = require('express');
var app = express();
Tarafından döndürülen uygulama express()
bir JavaScript işlevidir. Düğümlerin HTTP sunucularına istekleri işlemek için geri arama olarak aktarılabilir. Bu, aynı kod tabanını kullanarak uygulamanızın hem HTTP hem de HTTPS sürümlerini sağlamayı kolaylaştırır.
Bunu aşağıdaki gibi yapabilirsiniz:
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);
Ayrıntılı bilgi için dokümana bakın
Bunu Fastify çerçevesiyle de arşivleyebilirsiniz:
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)
(ve openssl req -nodes -new -x509 -keyout server.key -out server.cert
test yazmanız gerekiyorsa dosyaları oluşturmak için çalıştırın )