当前位置: 首页 > 知识库问答 >
问题:

Nodejs对具有的web服务的请求。p12证书

党源
2023-03-14

所以,标题很简单。我想使用一家公司的Web服务,我有. cers和. p12文件。据说,我应该在发出请求时使用. p12。我已经将. cers导入到windows中,我可以很容易地使用postman发出请求。但是当我尝试使用node.js进行请求时,我会出错。这是代码,我使用请求模块:

var headersOpt = {
    "content-type": "application/json",
};

var options = {
    url: 'https://some-url/api',
    cert: fs.readFileSync(__dirname + '/certs/myCert.p12'),
    headers: headersOpt
};

request.get(options, (error, response, body) => {
    console.log(error);
    console.log(response);
    console.log(body);
});

我收到以下错误:

{ Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Object.createSecureContext (_tls_common.js:89:17)
    at Object.exports.connect (_tls_wrap.js:1048:48)
    at Agent.createConnection (https.js:111:22)
    at Agent.createSocket (_http_agent.js:224:26)
    at Agent.addRequest (_http_agent.js:192:10)
    at new ClientRequest (_http_client.js:256:16)
    at Object.request (http.js:39:10)
    at Object.request (https.js:239:15)
    at Request.start (D:\parser\node_modules\request\request.js:748:32)
    at Request.end (D:\parser\node_modules\request\request.js:1512:10)
  opensslErrorStack:
   [ 'error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib' ] }

共有2个答案

邓声
2023-03-14

Bertrand Martel的其他评论中的请求API已弃用,因此不安全,您也可以使用axios来实现同样的事情:

const fs = require('fs');
const axios = require('axios');
const https = require('https');

const response = await axios.request({
    url: *URL_HERE*,
    method: 'post',
    headers: {
        "content-type": "application/json",
    },
    data: JSON.stringify({
        *YOUR_DATA_HERE*
    }),
    httpsAgent: new https.Agent({
        passphrase: *PASSPHRASE_HERE*,
        pfx: fs.readFileSync(__dirname + '\\..\\certificates\\certificate.p12'),
    })
});
浦修文
2023-03-14

对pkcs12格式使用代理选项中的pfx属性:

'use strict';

const request = require('request');
const fs = require('fs');

var options = {
    url: 'https://some-url/api',
    headers: {
        "content-type": "application/json",
    },
    agentOptions: {
        pfx: fs.readFileSync(__dirname + '/certs/myCert.p12'),
        passphrase: ''
    }
};

request.get(options, (error, response, body) => {
    console.log(error);
    console.log(response);
    console.log(body);
});

如果您的证书是自签名的,请检查此项

 类似资料:
  • 问题内容: 我写了非常简单的服务器: 我使用nodejs运行它。 现在我想编写一个简单的客户端,该客户端使用ajax调用将请求发送到服务器并打印响应(Hello World) clinet的javascript: 当我打开客户端html文件时,在控制台中出现以下错误: 我尝试将以下内容添加到ajax调用中: 但后来我明白了 任何人都可以解释我做错了什么,也许如何解决? 非常感谢! 问题答案: 第一

  • 我在heroku服务器上部署了nodejs代码。 我面临H12请求超时问题 这是与pgsql的db连接,它是异步的 这是我如何调用这个数据库 以及立面功能 同样的编码在本地工作,它也在heroku工作。但是突然间我得到了这个问题。有什么帮助吗?

  • 下面是我的用例: 我的服务是:ServiceA。 它依赖于以下服务:ServicesB和ServiceC。 ServiceA向ServiceB发送一个POST请求,其中包含一些身份验证细节(用户名+密码),ServiceB返回一个具有sessionID的json文档。 答复: 上面的sessionId用于从ServiceA到ServiceC的所有api调用。 ServiceA请求serviceC使

  • 下面是我的java代码,它是示例WebService的一部分: 可选(错误域=nsurlerrordomain代码=-1017“不能解析响应”userinfo={nserrorfailingurlstringkey=http://192.168.10.229:8080/jerseydemos/rest/employees,_kcfstreamerrorcodekey=-1,nserrorfaili

  • 我正在尝试从www.mysite上的ASPX页面向web服务发出请求。com使用jQuery。 我的Web服务托管在https://www.mysite2.com. 我已尝试以这种方式执行请求(我在网上找到了部分代码): 我遇到两个问题: 1)IE返回拒绝访问错误(代码0x80070005) 2) Chrome返回“不安全响应”错误 返回的JSON将用于填充自动完成源。 有什么解决这个问题的建议吗

  • 问题内容: 我在 需要身份验证的服务上运行Google Cloud的CORS相关问题。 如果我尝试通过带有Bearer令牌的cli执行curl命令,则 一切正常。不幸的是,如果我尝试通过javascript中的ajax执行相同的调用,则会 收到403。 云运行日志中的错误是这样的: 容器永远不会被击中。 我看到的问题是,当我在Web 浏览器中使用Ajax拨打电话时。Web浏览器正在发出飞行前请求(