我正在使用启用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);
});
});
是否有任何库可以某种方式转换请求证书的详细信息,以便将其转发为key
和cert
?还是有其他/更好的方法?
答案 0 :(得分:1)
我知道我可以在请求对象中获取证书详细信息,但是如何从该对象中检索crt和密钥?
虽然可以通过客户端证书本身,但无法在与最终目标的另一个TLS连接中再次将其用作客户端证书。为此,您将需要访问客户端的私钥,顾名思义,私钥是客户端的私钥。关于获取客户证书(即公共部分)的信息,请参见Node.js: access the client certificate。