首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >P12 PFX NodeJS请求

P12 PFX NodeJS请求
EN

Stack Overflow用户
提问于 2018-11-19 10:08:17
回答 2查看 5.3K关注 0票数 14

我试图使用p12文件或pfx提出请求,但我无法让它工作。如果我使用PEM并键入键,代码就能正常工作。但是Azure密钥库不支持PEM和KEY。是否有用于密钥/PEM证书的替代方案?

如果问题是这样的话,我就是这样生成p12/pfx文件的。

openssl pkcs12 -export -out certificate.pfx -inkey 1231181189密钥-in 1231181189.pem -certfile CA.pem

下面是一个示例代码,如果我注释掉证书并键入系统不工作,

错误:请阅读ECONNRESET

但如果我注释掉pfx和密码,使用pem并键入连接工作。

代码语言:javascript
复制
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);
});
EN

回答 2

Stack Overflow用户

发布于 2019-05-23 10:14:29

ECONNRESET意味着远端--在您的例子中是swish.net上的端点--与nodejs程序中的https客户端不隆重地断开连接。很难确切地知道为什么会这样做。很可能是因为某种安全故障。健壮的服务器不能解释安全故障;毕竟,为什么要帮助网络爬行呢?查看服务器上的日志可以告诉您更多信息。

同时,您用来包装节点的https代理函数的 package可能不知道任何关于.pfx文件或密码的信息,因此尝试在没有任何客户端证书的情况下进行连接。

package允许您从.pfx文件中提取所需的信息并使用它。像这样的东西可能会起作用(不是调试)。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2022-04-06 08:01:16

我和Azure APIM有同样的问题,我也需要基本的要求。

我使用axios发送请求,如下所示:

代码语言:javascript
复制
const fs = require("fs");
const axios = require("axios");
const https = require("https");

(async function () {
    try {
        const response = await axios.request({
            url: "url",
            method: "get",
            headers: {
                accept: "application/json",
            },
            auth: {
                username: "name",
                password: "pw",
            },
            httpsAgent: new https.Agent({
                pfx: fs.readFileSync(
                    __dirname + "/mycert.pfx"
                ),
            }),
        });

        console.log(JSON.stringify(response.data));
    } catch (error) {
        console.log(error);
    }
})();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53372322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档