node.js - 从 p12 node-forge 获取证书正文和私钥

标签 node.js

我正在尝试从 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/

相关文章:

javascript - Node Cluster模块,与Passenger不兼容

node.js - Postgresql 捕获事务错误并回滚

node.js - NodeJS Express - 同一端口上的两个 NodeJS 实例(vhost)

javascript - 如何使用selenium和同步JS进行截图

javascript - Node.js 网络套接字内存泄漏?

javascript - Mongoose,推送数组 Model.update 不是函数

node.js - FCM : getting ' Error: data must be a non-null object' error?

node.js - 无法加载在 'flowtype' : Cannot find module 'package.json » eslint-config-react-app' 中声明的插件 'eslint/use-at-your-own-risk' 中的 npm 错误

node.js - 无法将图像文件上传到 PUBLISHED node.acs 应用程序

node.js - 更改MP3比特率