web-dev-qa-db-ja.com

P12 PFXNodeJSリクエスト

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);
});
14

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メソッドが非同期であることに注意してください。

1
O. Jones