如何为 Express.js 服务器设置 SSL 证书?

在此之前,在旧版的 Express 中,我可以这样做:

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

然而,在较新的 Express 版本中,这种方法不再有效:

var app = express();

我是否应该调用 app.use()来设置证书? 如果是如何设置的?

174247 次浏览

参见 快递文件Https.createServer 的节点文档(Express 建议使用) :

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

我能够使 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");
});

这是我的 工作守则代表 快递4.0

Express4.0与3.0及其他版本有很大的不同。

4.0版本中有/bin/www 文件,您将在这里添加 https。

“ npm start”是启动 Express 4.0服务器的标准方式。

ReadFileSync ()函数应该使用 < em > _ _ 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);