我正在尝试使用p12文件或pfx发出请求,但无法正常工作。如果我使用PEM和KEY,则代码可以正常工作。但是Azure Keyvault不支持PEM和KEY。是否有其他替代方法可与KEY / PEM证书一起使用?
如果这是问题的话,这就是我生成p12 / pfx文件的方式。
openssl pkcs12-导出-out certificate.pfx -inkey 1231181189.key -in 1231181189.pem -certfile CA.pem
这是示例代码,如果我注释掉cert并密钥,则系统无法正常工作,
错误:读取ECONNRESET
但是,如果我注释掉pfx和密码短语并使用pem并键入连接工作的密码。
var request = require('request');
var fs = require('fs');
var path = require('path');
var certFile = __dirname + '/certs/1231181189.pem';
var keyFile = __dirname + '/certs/1231181189.key';
var options = {
method: 'POST',
url: 'https://mss.cpc.getswish.net/swish-cpcapi/api/v1/paymentrequests',
headers: { 'Content-Type': 'application/json' },
agentOptions: {
cert: fs.readFileSync(certFile),
key: fs.readFileSync(keyFile),
pfx: fs.readFileSync(__dirname + '/certs/certificate.pfx'),
passphrase: 'swish'
},
body: {
payeePaymentReference: '0123456789',
callbackUrl: 'https://example.com/api/swishcb/paymentrequests',
payerAlias: '4671234768',
payeeAlias: '1231181189',
amount: '100',
currency: 'SEK',
message: 'Kingston USB Flash Drive 8 GB'
},
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(response.headers);
console.log(body);
});
答案 0 :(得分:1)
ECONNRESET
表示远端(在您的情况下为swish.net上的端点)毫不客气地从nodejs程序中的https客户端断开了连接。很难确切知道为什么要这么做。这可能是由于某种安全性故障造成的。健壮的服务器无法解释安全性失败;毕竟为什么要帮助网络爬行?查看该服务器上的日志可能会告诉您更多信息。
同时,用于包装节点的https代理功能的npm request
package可能对.pfx
文件或密码一无所知,因此尝试在没有任何客户端证书的情况下进行连接。
pemutils
package 可能允许您从.pfx
文件中提取所需的信息并使用它。像这样的事情可能会起作用(未调试)。
var request = require('request');
var pemutils = require('pemutils');
var fs = require('fs');
var path = require('path');
const pfxFile = __dirname + '/certs/certificate.pfx';
pemutils.fromPfx({
path: pfxFile,
password: 'myPass'
}, function(err, pfxresults) {
if(err) throw err;
var options = {
method: 'POST',
url: 'https://mss.cpc.getswish.net/swish-cpcapi/api/v1/paymentrequests',
headers: { 'Content-Type': 'application/json' },
agentOptions: {
cert: pfxresults.certificate,
key: pfxresults.key,
},
body: {
...
},
json: true
};
...
请注意,.fromPfx
方法是异步的。