之前,在较旧版本的快递中,我可以这样做:
express.createServer({key:'keyFile', cert:'certFile'});
但是,在较新版本的快递中,这不再有效:
var app = express();
我应该致电app.use()
来设置证书吗?如果是这样的话?
答案 0 :(得分:128)
请参阅the Express docs以及Node docs for 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
答案 1 :(得分:93)
我能够使用以下样板代码获取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");
});
答案 2 :(得分:6)
这是我 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);