NodeJS和AngularJS-具有客户端证书身份验证的安全REST API

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上运行

我目前正在努力使我的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以将其与每个请求一起发送?有什么建议吗