NodeJS从文件

时间:2017-03-12 21:44:40

标签: node.js typescript pfx pkcs#12 p12

我正在使用Node.JS和TypeScript编写一个小项目,其中一个要求是从.pfx文件读取PFX证书并在代码中使用它来加密有效负载主体

我有一个名为cert1.pfx的证书公钥/私钥文件,我的代码需要此证书,如下所示

...
const cert = loadPfx("cert1.pfx");
const p: Payload = new Payload();
p.addReaderCertificate(cert);
...

我已经搜索过但找不到为我的用例加载PFX的方法,我已经看到为HTTPS服务器或Express.JS加载PFX的示例,我看了一个节点-x509,但那是用于BASE64编码的CER或者PEM证书,我也查看了node-rsa,但那是使用公钥/私钥加密/解密的。

有人知道这是否可行?如果是这样,我会欣赏一些关于如何完成的指示。

3 个答案:

答案 0 :(得分:9)

因此,经过大量研究和拖网搜索Google档案后,我遇到了一个名为pem的软件包,其中包含以下方法:

pem.readPkcs12(bufferOrPath, [options], callback)

这可以读取PKCS#12文件(或者换句话说是*.pfx*.p12文件),我在之前的研究中一定错过了这个。

用法:

const pem = require("pem");
const fs = require("fs");

const pfx = fs.readFileSync(__dirname + "/test.pfx");
pem.readPkcs12(pfx, { p12Password: "password" }, (err, cert) => {
    console.log(cert);
});

输出:

{ cert: "...", ca: ["subca", "rootca"], key: "..." }

您可以找到更多herehere

答案 1 :(得分:1)

我也遇到了类似的问题,@ neil-stevens解决方案帮助我读取了.pfx文件,但我发现的是它返回加密后的pem的一个功能/错误(我不清楚它到底是什么)私钥主要在RSA中使用,但是如果您需要实际的私钥,则需要将加密的密钥导出到pkcs8中,这可以使用Node RSA完成。

用法:

const RSAKey = cert.key; const key = new NodeRSA(RSAKey); const privateKey = key.exportKey("pkcs8");

答案 2 :(得分:0)

听起来您只需要使用Node自己的https功能。节点可以直接读取PFX文件。 (Https.createServerSSL Options

来自Node.js网站的示例:

const https = require('https');
const fs = require('fs');

const options = {
  pfx: fs.readFileSync('test/fixtures/test_cert.pfx'),
  passphrase: 'sample'
};

https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('hello world\n');
}).listen(8000);