在 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, ...
请注意,如果进程不是 运行 管理员,或者证书未标记为可导出,则密钥将不可访问。
我需要通过为 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, ...
请注意,如果进程不是 运行 管理员,或者证书未标记为可导出,则密钥将不可访问。