আমি কীভাবে একটি এক্সপ্রেস.জেএস সার্ভারের জন্য একটি SSL শংসাপত্র সেটআপ করব?


128

এক্সপ্রেসের একটি পুরানো সংস্করণে আগে, আমি এটি করতে পারতাম:

express.createServer({key:'keyFile', cert:'certFile'});

তবে এক্সপ্রেসের নতুন সংস্করণগুলিতে এটি আর কাজ করে না:

var app = express();

app.use()শংসাপত্রগুলি সেট করার জন্য আমার কল করা উচিত ? যদি তাই হয়, কিভাবে?

উত্তর:


151

দেখুন এক্সপ্রেস ডক্স সেইসাথে https.createServer জন্য নোড ডক্স (যা কি প্রকাশ ব্যবহারের বিশেষ পরামর্শ দেওয়া হচ্ছে):

var privateKey = fs.readFileSync( 'privatekey.pem' );
var certificate = fs.readFileSync( 'certificate.pem' );

https.createServer({
    key: privateKey,
    cert: certificate
}, app).listen(port);

ক্রিয়েট সার্ভারের অন্যান্য বিকল্পগুলি এখানে রয়েছে: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnicationlistener


নোড থেকে হুম্ম্ম: https.createServer (বিকল্পগুলি, [অনুরোধলিস্টেনার]) সুতরাং অ্যাপ্লিকেশনটি পাস করা ঠিক আছে কি? অ্যাপ্লিকেশনটি কোনও 'অবজেক্ট' নয় ...
মুরভিনলাই

1
'অ্যাপ' এর জন্য ফাংশনের স্বাক্ষর কী? আমি প্রকাশের জন্য
গিথুবকে

1
createServerইন এর সংজ্ঞাটি একবার দেখুন connect.js(এক্সপ্রেসটি কেবল এটি সংযোগ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়)। আপনি দেখতে পাবেন যে এটি সঠিক স্বাক্ষর সহ কোনও ফাংশন দেয়। connect()কেবলমাত্র একটি উপাধি connect.createServer()এবং তাই এটিও express()(যা সম্ভবত কিছু অতিরিক্ত সূচনা করে তবে ফলাফলটি এখনও অনুরোধ হ্যান্ডলার হিসাবে ব্যবহারের জন্য উপযুক্ত একটি ফাংশন)।
ইবোহলমান

11
@ কিউস - ওপিএস উদাহরণে appসংজ্ঞায়িত করা হয়। এই উত্তর সন্তোষজনক।
সেয়ারিয়া

4
.pem ফাইলগুলি কীভাবে প্রাপ্ত করবেন তার কোনও রূপরেখা আছে? আমার শংসাপত্র প্রদানকারী থেকে আমার কাছে দুটি .crt ফাইল রয়েছে।
এসসিবিউয়ারগেল.এথ

103

আমি নিম্নলিখিত বয়লারপ্লেট কোডের সাথে এসএসএলকে কাজ করতে সক্ষম হয়েছি:

var fs = require('fs'),
    http = require('http'),
    https = require('https'),
    express = require('express');

var port = 8000;

var options = {
    key: fs.readFileSync('./ssl/privatekey.pem'),
    cert: fs.readFileSync('./ssl/certificate.pem'),
};

var app = express();

var server = https.createServer(options, app).listen(port, function(){
  console.log("Express server listening on port " + port);
});

app.get('/', function (req, res) {
    res.writeHead(200);
    res.end("hello world\n");
});

1
আপনি কীভাবে ব্রাউজারে হ্যালো ওয়ার্ল্ডটি দেখতে পাচ্ছেন? 127.0.0.1:8000 আমাকে একটি ত্রুটি 107 দেয় (নেট :: ERR_SSL_PROTOCOL_ERROR): এসএসএল প্রোটোকল ত্রুটি।
আউকিরিয়া

upvated খুব শীঘ্রই। আমি পেয়েছি - ত্রুটি: অ্যাডলিস্টনার কেবল ফাংশনের উদাহরণ নেয়
মেকোহি

মনে রাখবেন যে বেশ আগে লেখা হয়েছিল। এটি আর এক্সপ্রেস বা নোড.জেএস এর নতুন সংস্করণগুলিতে আর কাজ করে না
এমনটি সম্ভব

8
এটি বছর অনেক দেরি হয়ে গেছে, তবে আপনি SSL: // <এসএসএল_এনবলড_পয়েন্ট> ব্যবহার করছেন এমন কারণে SSL_PROTOCOL_ERROR এর কারণ হতে পারে। এটি https: // <ssl_enabled_endPoint>
andreimarinescu

9

এক্সপ্রেস ৪.০ এর জন্য এটি আমার কাজের কোড

এক্সপ্রেস ৪.০ 3.0 এবং অন্যদের থেকে খুব আলাদা।

৪.০ আপনার / বিন / www ফাইল রয়েছে যা আপনি এখানে https যুক্ত করতে যাচ্ছেন।

"এনপিএম স্টার্ট" হ'ল স্ট্যান্ডার্ড উপায় আপনি 4.0.০ সার্ভার এক্সপ্রেস শুরু করেন।

readFileSync () ফাংশনটিতে __ ডিরেক্টরি ব্যবহার করে বর্তমান ডিরেক্টরি পাওয়া উচিত

যখন প্রয়োজন () ব্যবহার করুন। / বর্তমান ডিরেক্টরি দেখুন।

প্রথমে আপনি private.key এবং public.cert ফাইলটিকে / বিন ফোল্ডারের নীচে রাখবেন, এটি ডাব্লুডাব্লুডাব্লু ফাইলের মতো একই ফোল্ডার

এই জাতীয় ডিরেক্টরিতে ত্রুটি পাওয়া যায় নি:

  key: fs.readFileSync('../private.key'),

  cert: fs.readFileSync('../public.cert')

ত্রুটি, এমন কোনও ডিরেক্টরি পাওয়া যায় নি

  key: fs.readFileSync('./private.key'),

  cert: fs.readFileSync('./public.cert')

ওয়ার্কিং কোড হওয়া উচিত

key: fs.readFileSync(__dirname + '/private.key', 'utf8'),

cert: fs.readFileSync(__dirname + '/public.cert', 'utf8')

সম্পূর্ণ https কোডটি হ'ল:

const https = require('https');
const fs = require('fs');

// readFileSync function must use __dirname get current directory
// require use ./ refer to current directory.

const options = {
   key: fs.readFileSync(__dirname + '/private.key', 'utf8'),
  cert: fs.readFileSync(__dirname + '/public.cert', 'utf8')
};


 // Create HTTPs server.

 var server = https.createServer(options, app);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.