J'essaye de télécharger un fichier du serveur jira en utilisant une URL mais j'obtiens une erreur. comment inclure le certificat dans le code pour vérifier l' erreur:
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)
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);
});
});
node.js
ssl-certificate
jira
Labeo
la source
la source
Réponses:
Essayez d'ajouter le certificat racine approprié
Ce sera toujours une option beaucoup plus sûre que d'accepter aveuglément des points d'extrémité non autorisés, qui ne devraient à leur tour être utilisés qu'en dernier recours.
Cela peut être aussi simple que d'ajouter
à votre application.
Le package npm des autorités de certification racine SSL (tel qu'utilisé ici) est un package très utile concernant ce problème.
la source
$(mkcert -CAROOT)/rootCA.pem
dans un nouveau fichier de certificat et faire quelque chose commehttps.globalAgent.options.ca = fs.readFileSync('fullchain.pem')
Voir github.com/FiloSottile/mkcert/issues/76ssl-root-cas
module npm a une requête à mozilla.org codée en dur git.coolaj86.com/coolaj86/ssl-root-cas.js/src/branch/master/… . C'est probablement sûr parce que Mozilla mais cela semble être un vecteur d'attaque.Un autre hack sale, qui rendra toutes vos demandes non sécurisées:
la source
pour incapable de vérifier le premier certificat dans nodejs, rejeter non autorisé est nécessaire
la source
Le serveur à partir duquel vous essayez de télécharger est peut-être mal configuré. Même si cela fonctionne dans votre navigateur, il se peut qu'il n'inclue pas tous les certificats publics de la chaîne nécessaires à un client vide de cache.
Je recommande de vérifier le site dans l'outil SSLlabs: https://www.ssllabs.com/ssltest/
Recherchez cette erreur:
Et ça:
la source
cat domainname.crt domainname.ca-bundle > domainname-ssl-bundle.crt
unable to verify the first certificate
La chaîne de certificats est incomplète.
Cela signifie que le serveur Web auquel vous vous connectez est mal configuré et n'inclut pas le certificat intermédiaire dans la chaîne de certificats qu'il vous a envoyé.
Chaîne de certificats
Cela ressemble très probablement à ceci:
Le certificat intermédiaire doit être installé sur le serveur, avec le certificat du serveur.
Les certificats racines sont intégrés aux applications logicielles, aux navigateurs et aux systèmes d'exploitation.
L'application servant le certificat doit envoyer la chaîne complète, c'est-à-dire le certificat du serveur lui-même et tous les intermédiaires. Le certificat racine est censé être connu du client.
Recréez le problème
Accédez à https://incomplete-chain.badssl.com en utilisant votre navigateur.
Il ne montre aucune erreur (le cadenas dans la barre d'adresse est vert).
C'est parce que les navigateurs ont tendance à compléter la chaîne si elle n'est pas envoyée depuis le serveur.
Maintenant, connectez-vous à https://incomplete-chain.badssl.com en utilisant Node:
Journaux: " Erreur: impossible de vérifier le premier certificat ".
Solution
Vous devez compléter la chaîne de certificats vous-même.
Pour faire ça:
1: Vous devez obtenir le certificat intermédiaire manquant au
.pem
format, puis2a: étendre le magasin de certificats intégré de Node en utilisant
NODE_EXTRA_CA_CERTS
,2b: ou passez votre propre bundle de certificats (intermédiaires et racine) en utilisant l'
ca
option.1. Comment obtenir un certificat intermédiaire?
Utilisation de
openssl
(livré avec Git pour Windows ).Enregistrez les détails du certificat du serveur distant:
Nous recherchons l'émetteur (le certificat intermédiaire est l'émetteur / signataire du certificat serveur):
Il devrait vous donner l'URI du certificat de signature. Télécharge le:
Enfin, convertissez-le en
.pem
:2a. NODE_EXTRA_CERTS
J'utilise cross-env pour définir les variables d'environnement dans le
package.json
fichier:2b.
ca
optionCette option va écraser les autorités de certification racine intégrées du nœud.
C'est pourquoi nous devons créer notre propre autorité de certification racine. Utilisez ssl-root-cas .
Ensuite, créez un
https
agent personnalisé configuré avec notre bundle de certificats (racine et intermédiaire). Transmettez cet agent àaxios
lors de la demande.Au lieu de créer un
https
agent personnalisé et de le transmettre àaxios
, vous pouvez placer les certifcats sur l'https
agent global:Ressources:
la source
Cela a en fait résolu le problème pour moi, sur https://www.npmjs.com/package/ssl-root-cas
la source
Vous pourrez peut-être le faire en modifiant les options de demande comme ci-dessous. Si vous utilisez un certificat auto-signé ou un intermédiaire manquant, la définition de strictSSL sur false ne forcera pas le package de requête à valider le certificat.
la source
Certificat CC GoDaddy SSL
J'ai vécu cela en essayant de me connecter à notre serveur API backend avec un certificat GoDaddy et voici le code que j'ai utilisé pour résoudre le problème.
PS:
Utilisez le certificat fourni et n'oubliez pas d'installer la bibliothèque
npm install ssl-root-cas
la source
Cela a fonctionné pour moi => ajout d'un agent et "rejeter non autorisé" défini sur faux
la source
Une autre approche pour résoudre ce problème consiste à utiliser le module suivant.
node_extra_ca_certs_mozilla_bundle
Ce module peut fonctionner sans aucune modification de code en générant un fichier PEM qui comprend tous les certificats racine et intermédiaires approuvés par Mozilla. Vous pouvez utiliser la variable d'environnement suivante (Fonctionne avec Nodejs v7.3 +),
NODE_EXTRA_CA_CERTS
Pour générer le fichier PEM à utiliser avec la variable d'environnement ci-dessus. Vous pouvez installer le module en utilisant:
puis lancez votre script de nœud avec une variable d'environnement.
D'autres façons d'utiliser le fichier PEM généré sont disponibles sur:
https://github.com/arvind-agarwal/node_extra_ca_certs_mozilla_bundle
REMARQUE: je suis l'auteur du module ci-dessus.
la source
J'utilisais le module nodemailer npm. Le code ci-dessous a résolu le problème
la source