Подтвердить что ты не робот

Ошибка: невозможно проверить первый сертификат в nodejs

Я пытаюсь загрузить файл с сервера jira с помощью URL-адреса, но я получаю сообщение об ошибке. как включить сертификат в код для проверки Ошибка:

Error: unable to verify the first certificate in nodejs

at Error (native)
    at TLSSocket.<anonymous> (_tls_wrap.js:929:36)

  at TLSSocket.emit (events.js:104:17)

at TLSSocket._finishInit (_tls_wrap.js:460:8)

Мой код Nodejs:

var https = require("https");
var fs = require('fs');
var options = {
    host: 'jira.example.com',
    path: '/secure/attachment/206906/update.xlsx'
};

https.get(options, function (http_res) {

    var data = "";


    http_res.on("data", function (chunk) {

        data += chunk;
    });


    http_res.on("end", function () {

        var file = fs.createWriteStream("file.xlsx");
        data.pipe(file);

    });
});
4b9b3361

Ответ 1

Попробуйте добавить соответствующий корневой сертификат

Это всегда будет намного более безопасным вариантом, чем слепое принятие несанкционированных конечных точек, которые, в свою очередь, должны использоваться только в качестве крайней меры.

Это может быть так просто, как добавление

require('https').globalAgent.options.ca = require('ssl-root-cas/latest').create();

к вашему заявлению.

Пакет SSL корневых центров сертификации (как используется здесь) является очень полезным пакетом для решения этой проблемы.

Ответ 2

для неспособности проверить первый сертификат в nodejs отказ от несанкционированного доступа

 request({method: "GET", 
        "rejectUnauthorized": false, 
        "url": url,
        "headers" : {"Content-Type": "application/json",
        function(err,data,body) {
    }).pipe(
       fs.createWriteStream('file.html'));

Ответ 3

Еще один грязный хак, который сделает все ваши запросы небезопасными:

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0

Ответ 4

Сервер, который вы пытаетесь загрузить, может быть плохо настроен. Даже если он работает в вашем браузере, он может не включать все общедоступные сертификаты в цепочке, необходимые для проверки клиента с кешем-кешем.

Я рекомендую проверить сайт в инструменте SSLlabs: https://www.ssllabs.com/ssltest/

Посмотрите на эту ошибку:

Эта цепочка сертификатов сервера не завершена.

И это:

Проблемы с цепочкой......... Неполные

Ответ 5

Возможно, вы сможете это сделать, изменив параметры запроса, как показано ниже. Если вы используете самозаверяющий сертификат или отсутствующий посредник, установка strictSSL в false не приведет к принудительному пакету запроса для проверки сертификата.

var options = {
   host: 'jira.example.com',
   path: '/secure/attachment/206906/update.xlsx',
   strictSSL: false
}

Ответ 6

Сертификат SSL для GoDaddy

Я испытал это, пытаясь подключиться к нашему серверу API backend с сертификатом GoDaddy, и вот код, который я использовал для решения проблемы.

var rootCas = require('ssl-root-cas/latest').create();

rootCas
  .addFile(path.join(__dirname, '../config/ssl/gd_bundle-g2-g1.crt'))
  ;

// will work with all https requests will all libraries (i.e. request.js)
require('https').globalAgent.options.ca = rootCas;

PS:

Используйте прилагаемый сертификат и не забудьте установить библиотеку npm install ssl-root-cas

Ответ 7

Это фактически решило это для меня, из https://www.npmjs.com/package/ssl-root-cas

// INCORRECT (but might still work)
var server https.createServer({
  key: fs.readFileSync('privkey.pem', 'ascii')
, cert: fs.readFileSync('cert.pem', 'ascii')   // a PEM containing ONLY the SERVER certificate
});

// CORRECT (should always work)
var server https.createServer({
  key: fs.readFileSync('privkey.pem', 'ascii')
, cert: fs.readFileSync('fullchain.pem', 'ascii') // a PEM containing the SERVER and ALL INTERMEDIATES
});

Ответ 8

Это сработало для меня => добавление агента и 'rejectUnauthorized' установлен в false

const https = require('https'); //Add This
const bindingGridData = async () => {
  const url = 'your URL-Here';
  const request = new Request(url, {
    method: 'GET',
    headers: new Headers({
      Authorization: 'Your Token If Any',
      'Content-Type': 'application/json',
    }),
    //Add The Below
    agent: new https.Agent({
      rejectUnauthorized: false,
    }),
  });
  return await fetch(request)
    .then((response: any) => {
      return response.json();
    })
    .then((response: any) => {
      console.log('response is', response);
      return response;
    })
    .catch((err: any) => {
      console.log('This is Error', err);
      return;
    });
};

Ответ 9

Я использовал модуль nmamailer npm. Приведенный ниже код решил проблему

     tls: {
     // do not fail on invalid certs
     rejectUnauthorized: false
     }