nodejs API 基本身份验证的证书链错误中的自签名证书

问题描述

我正在尝试使用 REST API 将数据添加到我的弹性搜索索引,并且它在 POSTMAN 中运行良好。我也尝试了与请求的 python 脚本相同的工作。

但是 nodejs 也同样失败了。它给了我证书链中的自签名证书错误

pub type A = Arc<dyn Fn(&dyn FnOnce(&mut [u8]),usize) -> Result<(),()> + Send + Sync>;
//                      ^--- added &

这是错误

var unirest = require('unirest');
console.log("start");
var req = unirest('PUT','https://24.73.543.228:9001/accelerators/_doc/12')
  .headers({
    'Content-Type': 'application/json','Authorization': 'Basic ZWxhc3RpYzpQYXNzd29yZEAxcjdcMjM0='
  })
  .send(JSON.stringify({"name":"ajj","type":"test","description":"khukhkd","created_date":"2021-02-18T20:20:41.560Z"}))
  .end(function (res) { 
    if (res.error) throw new Error(res.error); 
    console.log(res.raw_body);
  });

尝试了基本身份验证

Error: Error: self signed certificate in certificate chain
    at C:\Users\Desktop\test.js:10:26
    at Request.handleRequestResponse [as _callback] (C:\Users\node_modules\unirest\index.js:444:15)
    at self.callback (C:\Users\Bittu.Raju\node_modules\request\request.js:185:22)
    at Request.emit (events.js:315:20)
    at Request.onRequestError (C:\Users\Bittu.Raju\node_modules\request\request.js:877:8)
    at ClientRequest.emit (events.js:315:20)
    at TLSSocket.socketErrorListener (_http_client.js:426:9)
    at TLSSocket.emit (events.js:315:20)
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)

并尝试在标题中使用 auth 变量仍然出现相同的错误

对 Python 请求进行了相同的尝试,效果很好。如何让它在 nodejs 中工作。

auth = "Basic " + new Buffer(username + ":" + password).toString("base64");

解决方法

由于您的证书是自签名的,您可以通过调用 strictSSL(false) 来尝试不验证它:

var req = unirest('PUT','https://24.73.543.228:9001/accelerators/_doc/12')
  .strictSSL(false)       <---- add this line
  .headers({
    'Content-Type': 'application/json','Authorization': 'Basic ZWxhc3RpYzpQYXNzd29yZEAxcjdcMjM0='
  })
  .send(JSON.stringify({"name":"ajj","type":"test","description":"khukhkd","created_date":"2021-02-18T20:20:41.560Z"}))
  .end(function (res) { 
     ...

另一种选择是使用 this other solution

指定自签名 CA 证书

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...