मैं एक express.js सर्वर के लिए एक 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);

CreateServer के अन्य विकल्प यहां हैं: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener


नोड से हम्म: https.createServer (विकल्प, [requestListener]) तो पासिंग ऐप ठीक है? ऐसा नहीं है कि ऐप एक 'ऑब्जेक्ट' है ...
murvinlai

1
'ऐप' के लिए फ़ंक्शन हस्ताक्षर क्या है? मैं एक्सप्रेस के लिए
गिटहब

1
की परिभाषा पर एक नजर डालें createServerमें connect.js(व्यक्त सिर्फ कनेक्ट से विरासत में)। आप देखेंगे कि यह सही हस्ताक्षर के साथ एक फ़ंक्शन देता है। connect()के लिए बस एक उपनाम है connect.createServer()और इसलिए ऐसा है express()(जो शायद कुछ अतिरिक्त आरंभीकरण करता है, लेकिन परिणाम अभी भी एक फ़ंक्शन है जो अनुरोध हैंडलर के रूप में उपयोग के लिए उपयुक्त है)।
1

11
@Qix - ओपी उदाहरण में, appपरिभाषित किया गया है। यह उत्तर संतोषजनक है।
सीयारिया

4
क्या कोई .pem फ़ाइलों को प्राप्त करने की कोई रूपरेखा है? मेरे पास अपने प्रमाणित प्रदाता से दो .crt फाइलें हैं।
SCBuergel.eth

103

मैं निम्नलिखित बायलरप्लेट कोड के साथ SSL काम कर पा रहा था:

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.18000 मुझे एक त्रुटि देता है 107 (शुद्ध :: ERR_SSL_PROTOCOL_ERROR): एसएसएल प्रोटोकॉल त्रुटि।
अर्कुरिया

बहुत जल्द उखाड़ लिया। मुझे मिलता है - त्रुटि: addListener केवल समारोह का उदाहरण लेता है
Meekohi

ध्यान रखें कि कुछ समय पहले लिखा गया था। यह संभव नहीं है कि यह अब एक्सप्रेस या Node.js के नए संस्करणों में काम करता है
जियोफ्रिक

8
इस साल बहुत देर हो चुकी है, लेकिन SSL_PROTOCOL_ERROR इस तथ्य के कारण हो सकता है कि आप http: // <ssl_enabled_endpoint> का उपयोग कर रहे हैं। यह होना चाहिए https: // <ssl_enabled_endpoint>
andreimarinescu

9

यह एक्सप्रेस 4.0 के लिए मेरा काम कोड है

एक्सप्रेस 4.0 3.0 और अन्य से बहुत अलग है।

4.0 आपके पास / बिन / www फ़ाइल है, जिसे आप यहां https जोड़ने जा रहे हैं।

"npm start" मानक तरीका है जिससे आप एक्सप्रेस 4.0 सर्वर शुरू करते हैं।

readFileSync () फ़ंक्शन को वर्तमान निर्देशिका प्राप्त करने के लिए __dirname का उपयोग करना चाहिए

जबकि () उपयोग की आवश्यकता होती है । वर्तमान निर्देशिका को देखें।

सबसे पहले आप Private.key और public.cert फाइल को / bin फोल्डर के नीचे रखते हैं, यह WWW फाइल की तरह ही फोल्डर है

ऐसी कोई निर्देशिका त्रुटि नहीं मिली:

  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);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.