我正在尝试从 node-forge 的 p12 实例获取证书正文和 key (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 实例上。
有什么想法吗?
最佳答案
如果您知道您的 .p12 文件中使用了哪种私钥,任务就会简单得多:
1) 如果是 RSA key ,您可以通过 example 从“p12”对象中获取私钥来自“node-forge”的官方存储库:
// 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 key 。要获得它,您可以使用 example来自“node-forge”问题:
var keyBags = p12.getBags({bagType: forge.pki.oids.pkcs8ShroudedKeyBag});
var bag = keyBags[forge.pki.oids.pkcs8ShroudedKeyBag][0];
var privateKey = bag.key;
3) 如果 ECC key “node-forge”不是根据以下公开问题的选项:"PKCS12 to PEM"
Unfortunately, we haven't yet implemented ASN.1 parsing for ECC keys, only RSA keys. Forge has an implementation for ed25519 but using only the raw (much simpler) format. PRs are welcome!
关于node.js - 从 p12 node-forge 获取证书正文和私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54921171/