10

我正在使用 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 的示例,我查看了 node-x509,但那是用于 BASE64 编码的 CER 或 PEM 证书,我还查看了 node-rsa,但那是使用公钥/私钥进行加密/解密。

有谁知道这是否可能?如果是这样,将不胜感激有关如何完成的一些指示。

4

3 回答 3

20

因此,经过大量研究和搜索 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: "..." }

你可以在这里这里找到更多。

于 2017-03-19T23:28:18.307 回答
13

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

来自 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);
于 2019-08-19T19:34:09.203 回答
3

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

用法 :

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

于 2019-08-30T02:57:32.993 回答