npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY

118

J'essaye toutes les manières de créer une application de réaction. J'ai essayé avec maven et maintenant j'essaye avec le système de construction crate-react-app de Facebook Incubators.

Lorsque j'ai essayé d'exécuter la commande create-react-app my-appdans l'environnement npm, cela a fonctionné sur mon système personnel sans aucun problème. Mais lorsque j'ai essayé la même commande dans mon environnement de travail, j'ai rencontré cette erreur sur l'invite de commande

npm ERR! node v6.10.2
npm ERR! npm  v3.10.10
npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY

npm ERR! unable to get local issuer certificate
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>
Dinesh
la source
1
Je ne pouvais pas non plus utiliser sudoquand je courais npm install aws-sdk. L'exécution a sudo npm install aws-sdkcausé cette erreur pour moi.
Kyle Bridenstine

Réponses:

296

Une solution rapide de la recherche sur Internet était npm config set strict-ssl false, heureusement, cela a fonctionné. Mais dans le cadre de mon environnement de travail, je suis limité à définir l'indicateur strict-ssl sur false.

Plus tard, j'ai trouvé une solution sûre et efficace,

npm config set registry http://registry.npmjs.org/  

cela a parfaitement fonctionné et j'ai reçu un message de réussite Happy Hacking!en ne définissant pas l'indicateur strict-ssl sur false.

Dinesh
la source
2
Moi aussi, je viens de revenir à l'utilisation de la version HTTP du référentiel NPM (par opposition à registry.npmjs.org ), car mon proxy de travail causait des problèmes (car il agit comme un MITM, provoquant des problèmes de vérification de certification) Un jour, je vais comprendre le problème du certificat, mais j'avais juste besoin de télécharger un package, dang it!
Robert Dundon
1
J'ai pensé que j'avais déjà ce paramètre, mais en y regardant de plus près, j'avais https au lieu de http ( registry.npmjs.org ). Changé en http et cela a fonctionné.
Ashish Bajpai
Pour moi, j'ai fait cela, mais je ne pouvais pas non plus l'utiliser sudolorsque je courais npm install aws-sdk. L'exécution a sudo npm install aws-sdkcausé cette erreur pour moi.
Kyle Bridenstine
J'obtenais la même erreur que celle indiquée sur ce post, alors j'ai couru npm config set strict-ssl falseet npm config set registry http://registry.npmjs.org/ mais j'obtenais toujours l'erreur lors de l'exécution, sudo npm install aws-sdkmais lorsque j'ai laissé tomber la sudopièce et que je l'ai juste exécutée, npm install aws-sdkcela a fonctionné.
Kyle Bridenstine
pour moi rien d'autre que le réglage de npm config set strict-ssl falsene fonctionne pas. Je pense que c'est quelque chose que l' équipe node.jset npmdevrait examiner et documenter avec un travail approprié s'il n'est pas réparable pour eux.
RinoTom
23

ce qui peut se passer, c'est que votre entreprise déchiffre certains trafics et les re-crypte avec leur certificat (que vous avez probablement déjà dans votre trousseau ou certificats racine de confiance)

si vous utilisez le nœud 7 ou une version ultérieure, j'ai trouvé que ce correctif est compatible avec node et node-gyp (pour Windows, vous devrez le faire différemment, mais vous devez simplement ajouter cette variable d'environnement):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (sous Windows, vous devrez peut-être supprimer les guillemets - voir les commentaires)

le fichier pem peut avoir plusieurs certificats: https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

assurez-vous que vos certificats sont au format pem approprié (vous avez besoin de vrais sauts de ligne et non littéraux \n)

Je n'arrivais pas à le faire fonctionner avec des chemins relatifs ( .ou ~)

Ce correctif indique essentiellement à npm et node-gyp d'utiliser la vérification par rapport aux autorités de certification normales, mais autorise également ce certificat lorsqu'il le rencontre

Idéalement, vous pourrez utiliser les certificats de confiance de votre système, mais ce n'est malheureusement pas le cas.

Jordan
la source
Génial. Votez pour votre explication détaillée. M'a aidé à mieux comprendre. Belles infos.
vissu
2
Sous Windows, le chemin ne fonctionnait que si je supprimais les guillemets.
Chris Anderson le
1
J'ai ce problème dû à BlueCoat et je dois référencer votre réponse tous les quelques mois. Certainement une meilleure solution que de désactiver SSL strict - merci!
Jordan Grey
1
Où puis-je trouver le fichier .pem dans Windows. J'ai cherché dans tout le disque dur pour le fichier pem trouvé quelques niveaux profonds dans Windows \ System32. Mais ça ne marche pas
Sanchit Jain
10

Changer l'URL du dépôt NPM en HTTP fonctionne comme une solution rapide, mais je voulais utiliser HTTPS.

Dans mon cas, le proxy chez mon employeur (ZScaler) causait des problèmes (car il agit comme un MITM, provoquant des problèmes de vérification de certification)

J'ai oublié que j'ai trouvé un script qui aide avec cela et Git (pour le clonage des dépôts GitHub via HTTPS avait le même problème) et je l'ai fourché pour mon utilisation

En gros, il fait ce qui suit pour git:

git config --global http.proxy http://gateway.zscaler.net:80/
git config --system http.proxy http://gateway.zscaler.net:80/

et pour Node, il ajoute proxy=http://gateway.zscaler.net:80/à la fin dec:\Users\$USERNAME\npm\.npmrc

Cela a résolu le problème pour moi.

Robert Dundon
la source
2
Vous voudrez peut-être vérifier dans quel cloud ZS votre entreprise est configurée. En gros, vérifiez ip.zscaler.comle nom du cloud et définissez-le dans l'URL. Par exemple: si cela dit, zscalertwo.netremplacez-le par l'URL suivante:gateway.zscalertwo.net
Rahul Bharadwaj
6

Après avoir essayé toutes les solutions que j'ai pu trouver:

  • Désactiver le SSL strict: npm config set strict-ssl=false
  • Changement du registre en http au lieu de https: npm config set registry http://registry.npmjs.org/
  • Changer mes paramètres de cafile: npm config set cafile /path/to/your/cert.pem
  • Arrêtez de rejeter les autorités de certification inconnues: set NODE_TLS_REJECT_UNAUTHORIZED=0

La solution qui semble fonctionner le mieux pour moi maintenant est d'utiliser la variable d'environnement NODE_EXTRA_CA_CERTS qui étend les autorités de certification existantes plutôt que de les remplacer par l'option cafile dans votre fichier .npmrc. Vous pouvez le paramétrer en le saisissant dans votre terminal:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

Bien sûr, définir cette variable à chaque fois peut être ennuyeux, alors je l'ai ajoutée à mon profil bash afin qu'elle soit définie à chaque fois que j'ouvre le terminal. Si vous n'avez pas encore de ~/.bash_profilefichier, créez-en un. Puis à la fin de ce fichier, ajoutez export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem. Ensuite, supprimez le paramètre cafile dans votre .npmrc.

RyanDay
la source
La quatrième option était un charme; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
tomdemuyt
5

Croyez-moi, cela fonctionnera pour vous:

    npm config set registry http://registry.npmjs.org/  
Prashanth Keshanna
la source
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence. Les réponses aux liens uniquement peuvent devenir invalides si la page liée change. Veuillez consulter Comment répondre pour en savoir plus sur la façon de répondre aux questions
Artog
4

Eu la même erreur. On dirait que c'est lié aux certificats SSL. Si vous utilisez NPM pour des packages publics (vous n'avez pas besoin de la sécurité de HTTPS), vous pouvez désactiver la validation stricte de la clé SSL avec la commande suivante.

Cela pourrait être la solution la plus simple si vous cherchez simplement à installer une seule fois quelques packages disponibles publiquement.

npm config set strict-ssl=false
Jason Geiger
la source
5
Il y a un risque inhérent à faire cela, si vous êtes victime d'une attaque infâme de type man-in-the-middle, le paquet pourrait être modifié lorsque vous le téléchargez.
Alex KeySmith
@AlexKeySmith Vous avez raison. Cependant, les chances sont assez faibles. Cela pourrait être la seule option pour certains. Caveat Emptor
Jason Geiger
1

J'ai eu cette erreur lorsque j'ai essayé de mettre à jour npm, mais j'avais une version vraiment ancienne (1.3.6!) Installée à partir de yum dans AWS Linux. J'ai pu installer manuellement une version plus récente de npm et tout a été corrigé.

Drussey
la source
0

Le code ci-dessous a parfaitement fonctionné pour moi ici ne faites que http uniquement à la place https

npm config set registry http://registry.npmjs.org/  
Mohd Shariq
la source
0

Dans mon cas, à un moment donné, j'ai défini ma configuration globale pour utiliser un certificat destiné à un projet.

npm config list

/path/to/global/.npmrc
NODE_EXTRA_CA_CERTS = "./certs/chain.pem"

J'ai ouvert le fichier, supprimé la ligne et npm installtravaillé à nouveau.

joels
la source
0

obtenu l'erreur ci-dessous

PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm install vue npm ERR! code UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! échec de la demande à https://registry.npmjs.org/vue , raison: impossible d'obtenir le certificat de l'émetteur local

npm ERR! Un journal complet de cette exécution peut être trouvé dans: npm ERR!
C: \ Users \ chpr \ AppData \ Roaming \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-heures-tracking> npm ERR!
C: \ Users \ chpr \ AppData \ Roaming \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log

La commande ci-dessous a résolu le problème:

npm config set strict-ssl false
Chatrughan Prasad
la source