142

以前,在旧版本的 express 中,我可以这样做:

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

但是,在较新版本的 express 中,这不再有效:

var app = express();

我应该打电话app.use()来设置证书吗?如果有怎么办?

4

3 回答 3

172

请参阅Express 文档以及https.createServer 的 Node 文档(这是 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

于 2012-08-04T04:31:49.880 回答
116

我能够让 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");
});
于 2012-08-22T17:35:45.363 回答
12

这是我的express 4.0工作代码

express 4.0 与 3.0 和其他版本有很大不同。

4.0 你有 /bin/www 文件,你要在这里添加 https。

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

readFileSync() 函数应该使用__dirname获取当前目录

而 require()使用 ./引用当前目录。

首先你把 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);
于 2018-08-20T20:18:29.067 回答