it-swarm.com.de

Fehler: Das erste Zertifikat in nodejs konnte nicht überprüft werden

Ich versuche, eine Datei von einem Jira-Server mit einer URL herunterzuladen, erhalte jedoch eine Fehlermeldung, wie das Zertifikat in den zu überprüfenden Code aufgenommen wird Fehler:

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)

Mein Nodejs-Code:

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

    });
});
75
Labeo

Fügen Sie das entsprechende Stammzertifikat hinzu

Dies ist immer eine viel sicherere Option als bloßes Akzeptieren nicht autorisierter Endpunkte, die wiederum nur als letztes Mittel verwendet werden sollten.

Dies kann so einfach sein wie das Hinzufügen

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

zu Ihrer Bewerbung.

Das SSL-Root-CAs-npm-Paket (wie hier verwendet) ist ein sehr nützliches Paket in Bezug auf dieses Problem.

72
Joshua

damit das erste Zertifikat in nodejs nicht verifiziert werden kann, ist die Zurückweisung nicht autorisiert erforderlich

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

Ein weiterer schmutziger Hack, der alle Ihre Anfragen unsicher macht:

process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0
20
Satara

Der Server, den Sie herunterladen möchten, ist möglicherweise falsch konfiguriert. Auch wenn es in Ihrem Browser funktioniert, sind möglicherweise nicht alle öffentlichen Zertifikate in der Kette enthalten, die ein Cache-leerer Client zur Überprüfung benötigt.

Ich empfehle die Website im SSLlabs-Tool zu überprüfen: https://www.ssllabs.com/ssltest/

Suchen Sie nach diesem Fehler:

Die Zertifikatskette dieses Servers ist unvollständig.

Und das:

Kettenprobleme ......... Unvollständig

16
Flimm

Möglicherweise können Sie dies tun, indem Sie die Anforderungsoptionen wie folgt ändern. Wenn Sie ein selbstsigniertes Zertifikat oder einen fehlenden Vermittler verwenden, wird durch Festlegen von strictSSL auf false das Request-Paket nicht dazu gezwungen, das Zertifikat zu überprüfen.

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

Das hat bei mir funktioniert => Agent hinzufügen und 'rejectUnauthorized' auf false setzen

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

GoDaddy SSL-Zertifikat

Ich habe dies erlebt, als ich versuchte, mit dem GoDaddy-Zertifikat eine Verbindung zu unserem Backend-API-Server herzustellen. Hier ist der Code, mit dem ich das Problem gelöst habe.

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:

Verwenden Sie das mitgelieferte Zertifikat und vergessen Sie nicht, die Bibliothek npm install ssl-root-cas zu installieren.

Dies hat es für mich tatsächlich gelöst, von 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
});
0
koolaang

Ich habe nodemailer npm module verwendet. Der folgende Code hat das Problem gelöst

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