我希望我的node.js服务器仅允许包含SSL证书的http请求,以避免出现“中间人”
问题是带有自签名证书的证书根本不起作用。
这是我简单的node.js服务器:
var fs = require('fs');
var https = require('https');
var util = require('util');
var options = {
key: fs.readFileSync('keys/myKey.key'),
cert: fs.readFileSync('keys/cert.crt'),
requestCert: true,
rejectUnauthorized: false,
agent: false,
};
https.createServer(options, function (req, res) {
console.log(new Date()+' '+
req.connection.remoteAddress+' '+
req.method+' '+req.url + 'auth = ' + req.client.authorized);
res.writeHead(200);
res.end("hello world\n");
}).listen(8443);
Client.authorized将始终为否,因为它是一个自签名证书。
有什么主意,我该如何管理允许带有证书的请求,并将没有证书的请求放到另一个地方?种类:
https.createServer(options, function (req, res) {
if (req.hasCertificateThatMatchTheOneOnMyServer) {
// do something
}
else {
// do something else
}
}
非常感谢。
答案 0 :(得分:0)
将环境变量NODE_EXTRA_CA_CERTS
设置为指向包含服务器和客户端自签名证书的文件系统位置。
此外,请考虑阅读此答案中的解释,以确保您的自签名证书与启用的NodeJS密码套件同步:https://stackoverflow.com/a/53325115/1235935