NodeJS转发客户端SSL证书

时间:2018-08-25 09:06:15

标签: node.js express ssl

我正在使用启用SSL并接受客户端证书的Node.js服务器应用程序。我正在使用以下代码创建https服务器。

const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem'),
  ca: fs.readFileSync('ca.pem'),
  requestCert: true,
  rejectUnauthorized: true
};

https.createServer(options,app).listen(8090, function(){
    console.log("Listening on 8090");
});

其他基于Node.js的客户端应用程序能够使用其SSL证书进行连接并获得服务响应。

但是,从服务器上,我想拨打另一个服务器,并希望传递我收到的同一客户端证书。我只是想转发相同的证书,我知道我可以在请求对象中获取证书详细信息,但是如何从该对象中检索crt和密钥?

我正在尝试执行以下操作:

app.get('/myservice', (req,res) => {
    //req.socket.getPeerCertificate(true);
    var agent = new https.Agent({
        cert: somelibrary(req.socket.getPeerCertificate(true).??????),
            key: somelibrary(req.socket.getPeerCertificate(true).??????),
    });
    fetch('http://AnotherServiceURL', { method: 'GET' agent}).then(function(response){
        res.json(response);
    });

});

是否有任何库可以某种方式转换请求证书的详细信息,以便将其转发为keycert?还是有其他/更好的方法?

1 个答案:

答案 0 :(得分:1)

  

我知道我可以在请求对象中获取证书详细信息,但是如何从该对象中检索crt和密钥?

虽然可以通过客户端证书本身,但无法在与最终目标的另一个TLS连接中再次将其用作客户端证书。为此,您将需要访问客户端的私钥,顾名思义,私钥是客户端的私钥。关于获取客户证书(即公共部分)的信息,请参见Node.js: access the client certificate

相关问题