之前,在旧版本的express中,我可以这样做:
express.createServer({key:'keyFile', cert:'certFile'});
但是,在较新版本的 Express 中,这不再起作用:
var app = express();
我应该致电
app.use()
来设置证书吗?如果是的话怎么办?
请参阅 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
我能够使用以下样板代码让 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");
});
这是我的工作代码用于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);
停止您的网络服务器一分钟。
使用命令:
certbot certonly --standalone
然后它会询问您的电子邮件和域名。一旦你输入这些,它就会吐出文件位置。
const cts = {
cert: fs.readFileSync("/etc/letsencrypt/-blah-/fullchain.pem"),
key: fs.readFileSync("/etc/letsencrypt/-blah-/privkey.pem")
}
app = express()
/*
app.use(...)
app.get(...)
.. etc etc
*/
https.createServer(cts, app).listen(443)
所有重要的站点都会在不同端口上有一些套接字服务器以及 Web 服务器。
秘密是您只需添加(即一行代码)一个 https 服务器专门为每个 wss 服务器。 (完整示例。)
// create https server SPECIFICALLY FOR wss 7788
let for_7788 = https.createServer(options).listen(7788)
let wss = new WSServer({ server: for_7788 })
wss.on(/* ... */)