P12ファイルまたはpfxでリクエストを行おうとしていますが、機能しません。 PEMとKEYを使用すると、コードは正常に機能します。ただし、AzureKeyvaultはPEMとKEYをサポートしていません。 KEY/PEM証明書で機能する代替手段はありますか?
それが問題である場合、これは私がp12/pfxファイルを生成した方法です。
openssl pkcs12 -export -outcertificate.pfx -inkey 1231181189.key -in 1231181189.pem -certfile CA.pem
これがサンプルコードです。証明書とキーをコメントアウトすると、システムが機能しません。
エラー: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);
});
ECONNRESET
は、遠端(この場合はswish.netのエンドポイント)がnodejsプログラムのhttpsクライアントから不用意に切断されていることを意味します。なぜそうしたのかを正確に知ることは困難です。何らかのセキュリティ障害が原因である可能性があります。堅牢なサーバーはセキュリティ障害を説明しません。結局のところ、なぜサイバークリープを助けるのですか?そのサーバーのログを見ると、詳細がわかる可能性があります。
それまでの間、ノードのhttpsエージェント関数をラップするために使用する npm request
package は、.pfx
ファイルまたはパスワードについて何も知らないため、接続を試みる可能性があります。クライアント証明書なし。
pemutils
packagemayを使用すると、.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
メソッドが非同期であることに注意してください。