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
एक्सप्रेस एपीआई दस्तावेज़ बहुत स्पष्ट रूप से यह पता मंत्र।
इसके अतिरिक्त यह उत्तर स्व-हस्ताक्षरित प्रमाण पत्र बनाने के लिए चरण देता है।
मैंने कुछ टिप्पणियाँ और 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
हैं।
"नोड 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 नहीं है।
उपरोक्त उत्तर अच्छे हैं लेकिन एक्सप्रेस और नोड के साथ यह ठीक काम करेगा।
चूंकि एक्सप्रेस आपके लिए ऐप बनाती है, इसलिए मैं इसे यहाँ छोड़ दूँगा।
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 के माध्यम से एन्क्रिप्ट करें का उपयोग करें
मैंने देखा कि इनमें से कोई भी उत्तर यह नहीं दर्शाता है कि श्रृंखला में एक इंटरमीडिएट रूट 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()
एक जावास्क्रिप्ट फ़ंक्शन है। यह अनुरोधों को संभालने के लिए कॉलबैक के रूप में नोड के 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');
});