একটি এসএসএল কী এবং শংসাপত্র দেওয়া, কীভাবে একজন এইচটিটিপিএস পরিষেবা তৈরি করে?
একটি এসএসএল কী এবং শংসাপত্র দেওয়া, কীভাবে একজন এইচটিটিপিএস পরিষেবা তৈরি করে?
উত্তর:
আমি নিম্নলিখিত উদাহরণ খুঁজে পেয়েছি।
এটি নোড 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
এক্সপ্রেস এপিআই ডক চমত্কার পরিষ্কারভাবে এই spells আউট।
অতিরিক্তভাবে এই উত্তরটি স্ব-স্বাক্ষরিত শংসাপত্র তৈরির পদক্ষেপ দেয়।
আমি নোড.জেএস এইচটিটিপিএস ডকুমেন্টেশন থেকে কিছু মন্তব্য এবং একটি স্নিপেট যুক্ত করেছি :
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
, তারপরে openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 3001
https://localhost:8080
। এইচটিটিপি এইচটিটিপিএস নয়।
উপরের উত্তরগুলি ভাল তবে এক্সপ্রেস এবং নোড সহ এটি ভাল কাজ করবে।
এক্সপ্রেস যেহেতু আপনার জন্য অ্যাপ তৈরি করে, তাই আমি এখানে এড়িয়ে যাব।
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
? এর জন্য কোনও প্রয়োজন নেই
নোড.জেএসসে এইচটিটিপিএস সার্ভারের জন্য ন্যূনতম সেটআপটি এরকম হবে:
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);
গ্রিনলক.জেএস এর মাধ্যমে লেটস এনক্রিপ্ট ব্যবহার করুন
আমি লক্ষ্য করেছি যে এই উত্তরগুলির কোনওটিই দেখায় না যে চেইনে একটি ইন্টারমিডিয়েট রুট সিএ যুক্ত করা হচ্ছে, এটি দেখার জন্য এখানে খেলতে শূন্যের কয়েকটি উদাহরণ রয়েছে :
স্নিপেট:
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
কিছু প্রাথমিক সূচনা ফাংশনটিতে পাস করার সুযোগ দেয় যা সংযোগ / এক্সপ্রেস অ্যাপ্লিকেশন তৈরি করে (যদি আপনি একই সার্ভারে এসএসএল এর মাধ্যমে ওয়েবসকেট করতে চান , উদাহরণস্বরূপ)।
উভয় শোনার জন্য আপনার app সক্ষম করতে http
এবং https
পোর্ট 80
এবং 443
যথাক্রমে নিম্নোক্ত কাজ
একটি এক্সপ্রেস অ্যাপ তৈরি করুন:
var express = require('express');
var app = express();
ফিরিয়ে দেওয়া অ্যাপ্লিকেশনটি express()
একটি জাভাস্ক্রিপ্ট ফাংশন। অনুরোধগুলি পরিচালনা করার জন্য এটি নোডের এইচটিটিপি সার্ভারগুলিতে কলব্যাক হিসাবে দেওয়া যেতে পারে। এটি একই কোড বেস ব্যবহার করে আপনার অ্যাপ্লিকেশনটির এইচটিটিপি এবং এইচটিটিপিএস উভয় সংস্করণ সরবরাহ করা সহজ করে তোলে।
আপনি নিম্নলিখিত হিসাবে এটি করতে পারেন:
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);
সম্পূর্ণ বিবরণের জন্য ডকটি দেখুন
আপনি এটি ফ্যাসিফাই কাঠামোর সাহায্যে সংরক্ষণাগারও ব্যবহার করতে পারেন:
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');
});