我正在使用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,但那是使用公钥/私钥加密/解密的。
有人知道这是否可行?如果是这样,我会欣赏一些关于如何完成的指示。
答案 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: "..." }
答案 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.createServer,SSL 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);