我正在尝试从node-forge的p12实例中获取证书正文和密钥(PEM格式)。
I saw this answer到一个类似的问题,但由于某种原因,它对我不起作用。
var forge = require('node-forge');
var fs = require('fs');
var keyFile = fs.readFileSync("./gost.p12", 'binary');
var p12Asn1 = forge.asn1.fromDer(keyFile);
var p12 = forge.pkcs12.pkcs12FromAsn1(p12Asn1, '123456');
var bags = p12.getBags({bagType: forge.pki.oids.certBag});
var bag = bags[forge.pki.oids.certBag][0];
// convert to ASN.1, then DER, then PEM-encode
var msg = {
type: 'CERTIFICATE',
body: forge.asn1.toDer(bag.asn1).getBytes()
};
var pem = forge.pem.encode(msg);
console.log(pem);
bag.asn1
不在bag实例上。
有什么想法吗?
答案 0 :(得分:0)
如果您知道.p12文件中使用了哪种私钥,则任务会简单得多:
1)对于RSA密钥,您可以通过example从“ node-forge”的官方存储库中从“ p12”对象获取私钥:
// get key bags
var bags = p12.getBags({bagType: forge.pki.oids.keyBag});
// get key
var bag = bags[forge.pki.oids.keyBag][0];
var key = bag.key;
2)就我而言,它是PKCS8密钥。要获得它,您可以使用来自“ node-forge”问题的example:
var keyBags = p12.getBags({bagType: forge.pki.oids.pkcs8ShroudedKeyBag});
var bag = keyBags[forge.pki.oids.pkcs8ShroudedKeyBag][0];
var privateKey = bag.key;
3)根据以下未解决的问题,如果没有ECC密钥,则“ node-forge”不是一个选项:"PKCS12 to PEM"
不幸的是,我们还没有为ECC密钥(只有RSA密钥)实现ASN.1解析。 Forge具有ed25519的实现,但仅使用原始(更简单)的格式。欢迎公关!