За дел c, если вы передадите true
следующим образом:
res.connection.getPeerCertificate(true)
Затем вы получите подробную информацию о всей цепочке. Когда запрашивается полная цепочка сертификатов, каждый сертификат будет содержать свойство issuerCertificate
, содержащее объект, представляющий сертификат его эмитента, и вы можете следовать по цепочке, используя его. Вот пример:
var https = require('https');
var options = {
host: 'google.com',
port: 443,
method: 'GET'
};
const request = https.request(options, function(res) {
let cert = res.connection.getPeerCertificate(true);
let list = new Set();
do {
list.add(cert);
console.log("subject", cert.subject);
console.log("issuer", cert.issuer);
console.log("valid_from", cert.valid_from);
console.log("valid_to", cert.valid_to);
cert = cert.issuerCertificate;
} while (cert && typeof cert === "object" && !list.has(cert));
res.on('data', data => {
//console.log(data.toString('utf8'));
});
});
request.end();
do c не объясняет, как вы узнаете, когда находитесь в конце цепочки (я бы подумал, что это будет обозначено эмитентом null
, но console.log()
сообщил о циклической ссылке, поэтому я добавил Set
, чтобы отслеживать сертификаты, которые мы видели до сих пор, чтобы определить, когда цепь стала круговой, чтобы знать, когда прекратить следовать за цепочкой.