在 Web 请求中包含带有证书的私钥 运行 Windows 上的 NodeJS

Include Private Key With Certificate in web request running NodeJS on Windows

我需要通过为 Web 请求提供证书来验证我对 API 的 GET 请求。

我在 Windows 客户端上使用 NodeJS 运行。

请求失败,显然是因为需要以纯文本形式包含私钥,而我没有。

我是否缺少使用嵌入密钥(非纯文本)的 X509 的方法?

我可以通过几种方式获得带有私钥的完整证书,但我无法获得纯文本形式的私钥。

我试过 WIN-CA NPM module, but it does not deal with private keys.

感谢任何想法、问题确认和解决方案。

谢谢!

我能够以 round-about 的方式让它工作。部分问题是我们的证书颁发机构是内部提供商。

为了解决这个问题,我们:

  • 我们将旧代码更新为 Node.js https module.
  • 然后我们添加了 win-ca 模块以注入企业证书颁发机构。
  • 我们使用win-cert模块获取带有私钥的证书。

我们不想将证书复制到文件系统的节点,因此不推荐使用 NODE_EXTRA_CA_CERTS

代码摘录:

const https = require('https');
const winCert = require('win-cert');
require('win-ca/api')({store: ['root', 'ca'], inject: true});

const certOptions = {
    storeName: 'My',
    storeLocation: 'LocalMachine',
    thumbprint: '098d3.....'
};

const httpOptions = {
    method: 'GET',
    headers: {
        'Accept': 'application/json',
        'Accept-Charset': 'utf-8',
    }
};


const certAndKey = winCert.getCertificate(certOptions).then((resolve, reject) => {
    certObtained = true;
    httpOptions.cert = resolve.cert;
    httpOptions.key = resolve.key;
});

const dpmRequest = https.request(httpOptions, ...

请注意,如果进程不是 运行 管理员,或者证书未标记为可导出,则密钥将不可访问。