Я работаю над серверным приложением Node.js, которое поддерживает SSL и принимает сертификаты клиентов. Я использую следующий код для создания 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.info("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? Или есть другой / лучший способ сделать это?





I understand I can get the certificate details in request object, but how to retrieve the crt and key from that object?
Хотя можно было бы передать сам сертификат клиента, его невозможно снова использовать в качестве сертификата клиента в другом TLS-соединении с конечной целью. Для этого вам потребуется доступ к закрытому ключу клиента, который, как следует из названия, является частным для клиента. Что касается получения сертификата клиента (то есть публичной части), см. Node.js: доступ к сертификату клиента.