Bir express.js sunucusu için bir SSL sertifikasını nasıl kurarım?


128

Daha önce, express'in eski bir sürümünde şunu yapabiliyordum:

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

Ancak, daha yeni ifade sürümlerinde bu artık çalışmıyor:

var app = express();

Ben arayayım mı app.use()certs kurulur? Öyleyse nasıl?

Yanıtlar:


151

Bkz Ekspres docs yanı sıra https.createServer için Düğüm dokümanlar (kullanımına tavsiye ettiğinin ifade edilir):

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

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

CreateServer için diğer seçenekler şu adrestedir: http://nodejs.org/api/tls.html#tls_tls_createserver_options_secureconnectionlistener


Düğümden Hmmm: https.createServer (seçenekler, [requestListener]), bu yüzden uygulamanın geçişi tamam mı? bu uygulama bir 'nesne' değil mi ...
murvinlai

1
'uygulama' için işlev imzası nedir? ekspres için
github'a

1
Tanımına bir göz atın createServeriçinde connect.js(sadece bu bağlantı devraldığı ifade). Doğru imzaya sahip bir işlev döndürdüğünü göreceksiniz. connect()basitçe bir takma addır connect.createServer()ve bu nedenle de öyledir express()(muhtemelen fazladan başlatma yapar, ancak sonuç yine de bir istek işleyicisi olarak kullanıma uygun bir işlevdir).
ebohlman

11
@Qix - OPs örneğinde apptanımlanmıştır. Bu cevap tatmin edicidir.
Seiyria

4
.pem dosyalarının nasıl elde edileceğinin ana hatları var mı? Sertifika sağlayıcımdan iki .crt dosyam var.
SCBuergel.eth

103

Aşağıdaki standart kodla SSL çalıştırmayı başardım:

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
Tarayıcıda merhaba dünyayı gerçekten nasıl görüyorsunuz? 127.0.0.1:8000 bana bir Hata 107 veriyor (net :: ERR_SSL_PROTOCOL_ERROR): SSL protokol hatası.
aCuria

çok erken oy verildi. Anladım - Hata: addListener yalnızca Function örneklerini alıyor
Meekohi

bunun epey bir süre önce yazıldığını unutmayın. Bunun artık Express veya
Node.js'nin

8
Bu yıllar çok geç, ancak SSL_PROTOCOL_ERROR, http: // <ssl_enabled_endpoint> kullanıyor olmanızdan kaynaklanıyor olabilir. Https: // <ssl_enabled_endpoint> olmalıdır
andreimarinescu

9

Bu, ekspres 4.0 için çalışma kodum .

express 4.0, 3.0 ve diğerlerinden çok farklıdır.

4.0, https ekleyeceğiniz / bin / www dosyanız var.

"npm start", express 4.0 sunucusunu başlatmanın standart yoludur.

readFileSync () işlevi __dirname kullanmalı ve mevcut dizini al

gerektirirken () kullanın ./ geçerli dizine bakın.

Önce private.key ve public.cert dosyasını / bin klasörünün altına koyarsınız, WWW dosyası ile aynı klasördür .

böyle bir dizin bulunamadı hatası:

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

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

hata, böyle bir dizin bulunamadı

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

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

Çalışma kodu olmalıdır

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

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

Tam https kodu:

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);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.