Erreur: impossible de vérifier le premier certificate dans nodejs

J’essaie de télécharger un fichier depuis le serveur jira en utilisant une URL mais je reçois une erreur. comment inclure le certificate dans le code pour vérifier l’ erreur:

Error: unable to verify the first certificatee in nodejs at Error (native) at TLSSocket. (_tls_wrap.js:929:36) at TLSSocket.emit (events.js:104:17) at TLSSocket._finishInit (_tls_wrap.js:460:8) 

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

Essayez d’append le certificate racine approprié

Cela va toujours être une option beaucoup plus sûre que d’accepter aveuglément des points de terminaison non autorisés, qui ne doivent être utilisés qu’en dernier recours.

Cela peut être aussi simple que d’append

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

à votre application.

Le paquet npm SSL Root CA (utilisé ici) est un paquet très utile concernant ce problème.

pour impossible de vérifier le premier certificate dans nodejs, le rejet non autorisé est nécessaire

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

Le serveur à partir duquel vous essayez de télécharger peut être mal configuré. Même si cela fonctionne dans votre navigateur, il peut ne pas inclure tous les certificates publics dans la chaîne nécessaire à la vérification d’un client vide de cache.

Je recommande de vérifier le site dans l’outil SSLlabs: https://www.ssllabs.com/ssltest/

Recherchez cette erreur:

La chaîne de certificates de ce serveur est incomplète.

Et ça:

Problèmes de chaîne ……… incomplet

Un autre hack sale, qui rendra toutes vos demandes peu sûres:

 process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 

Vous pourrez peut-être le faire en modifiant les options de demande comme ci-dessous. Si vous utilisez un certificate auto-signé ou un intermédiaire manquant, la définition de ssortingctSSL sur false ne force pas le package de demande à valider le certificate.

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

Certificat SSL GoDaddy

Je l’ai expérimenté en essayant de me connecter à notre serveur API backend avec le certificate GoDaddy et voici le code que j’ai utilisé pour résoudre le problème.

 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 (ie request.js) require('https').globalAgent.options.ca = rootCas; 

PS:

Utilisez le certificate fourni et n’oubliez pas d’installer la bibliothèque npm install ssl-root-cas