Node.js 从p12节点forge获取证书正文和私钥
我正试图从NodeForge的p12实例中获取证书体和密钥(PEM格式) 对于一个类似的问题,但出于某种原因,它不适合我Node.js 从p12节点forge获取证书正文和私钥,node.js,Node.js,我正试图从NodeForge的p12实例中获取证书体和密钥(PEM格式) 对于一个类似的问题,但出于某种原因,它不适合我 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.pkcs12F
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密钥,您可以通过“node forge”的官方存储库从“p12”对象获取私钥: 2) 就我而言,这是PKCS8密钥。要获得它,您可以使用“节点锻造”问题: 3) 对于ECC密钥,根据以下未决问题,“节点锻造”不是选项: 不幸的是,我们还没有为ECC密钥实现ASN.1解析,只有RSA密钥。Forge有一个ed25519的实现,但只使用原始(更简单)格式。欢迎PRs
// 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;
var keyBags = p12.getBags({bagType: forge.pki.oids.pkcs8ShroudedKeyBag});
var bag = keyBags[forge.pki.oids.pkcs8ShroudedKeyBag][0];
var privateKey = bag.key;