NodeJS和AngularJS-具有客户端证书身份验证的安全REST API
我目前正在努力使我的REST Api服务器(NodeJS+Express+Mongoose)安全,因此除了我的客户端应用程序(AngularJS 1.6)和我的管理应用程序(基于AngularJS 1.6)之外,没有人可以访问路由并获取或将数据放入我的数据库。所有内容都使用有效的SSL证书在https上运行 我主要考虑了两种方法:NodeJS和AngularJS-具有客户端证书身份验证的安全REST API,angularjs,node.js,security,ssl-certificate,Angularjs,Node.js,Security,Ssl Certificate,我目前正在努力使我的REST Api服务器(NodeJS+Express+Mongoose)安全,因此除了我的客户端应用程序(AngularJS 1.6)和我的管理应用程序(基于AngularJS 1.6)之外,没有人可以访问路由并获取或将数据放入我的数据库。所有内容都使用有效的SSL证书在https上运行 我主要考虑了两种方法: 特定路由需要“访问密钥”的共享密钥 客户端证书身份验证 我选择了2号,因为在我看来这是最安全的(如果我错了,请纠正:) 因此,我将API服务器设置为在https上运行
var options = {
ca: fs.readFileSync(__dirname + "/cert/server.ca"),
key: fs.readFileSync(__dirname + "/cert/server.key"),
cert: fs.readFileSync(__dirname + "/cert/server.crt"),
requestCert: true,
rejectUnauthorized: false
};
https.createServer(options, app)
.listen(PORT, () => {
console.log(`up and running @: ${os.hostname()} on port: ${PORT}`);
console.log(`enviroment: ${process.env.NODE_ENV}`);
});
我通过以下方式直接在应用程序中处理拒绝未授权用户的问题:
if (!req.client.authorized) {
var cert = req.socket.getPeerCertificate();
console.log("unauthorized: ", cert);
return res.status(401).send('Not authorized!');
}
问题就从这里开始:)。每次请求我的客户端应用程序时,我都会收到一个错误:
401-未授权
我认为客户端应用程序正在通过“requestCert”发送每个请求(或者如果nodejs请求)的SSL证书,并且一切正常。但这似乎有点复杂
在我的server.ca
文件中,我当前拥有从ca收到的证书链
在console.log中,请求中传输的证书,但它总是空的
我做错了什么?我是否必须配置Angular以将其与每个请求一起发送?有什么建议吗