如何解决在Windows上运行NodeJS的Web请求中包括带有证书的私钥
我需要通过向Web请求提供证书来对API进行身份验证。
我正在使用在Windows客户端上运行的NodeJS。
请求失败,显然是由于需要将私钥包含在纯文本中,而我却无法使用。
我是否缺少使用带有嵌入式密钥(不是纯文本)的X509的方法?
我可以通过两种方式获得带有私钥的完整证书,但是我不能以纯文本格式获得私钥。
我尝试过WIN-CA NPM模块,但是尝试过it does not deal with private keys。
感谢任何想法,问题的确认和解决方案。
谢谢!
解决方法
我能够使它以一种绕行的方式工作。问题的一部分是我们的证书颁发机构是内部提供者。
要解决该问题,我们:
- 我们将旧代码更新为Node.js https module.
- 然后我们添加了win-ca模块以注入公司证书颁发机构。
- 我们使用了win-cert模块来获取带有私钥的证书。
我们不想将证书复制到文件系统的节点,因此不建议使用NODE_EXTRA_CA_CERTS
and similar。
代码提取:
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,...
请注意,如果该进程未以admin身份运行,或者证书未标记为可导出,则将无法访问该密钥。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。