erreur de réception: «Erreur: erreur SSL: SELF_SIGNED_CERT_IN_CHAIN» lors de l'utilisation de npm

292

J'utilise npm v1.0.104 / node 0.6.12 sur ubuntu - Je reçois l'erreur copiée ci-dessous lors de la tentative d'installation de nouveaux modules via npm (j'ai testé socket.io plus tôt en utilisant http, pas https cependant et je me demande si cela pourrait ont entraîné le problème avec npm / certificats non signés). L'erreur apparaît une fois que npm essaie de résoudre l' URL ' https://registry.npmjs.org '. Existe-t-il de toute façon que je peux ignorer l'erreur ou peut-être localiser / ajouter le certificat à un magasin de confiance afin de continuer à utiliser npm.

Tout aperçu de ce qui doit être fait pour résoudre le problème sera apprécié (je préférerais résoudre le problème par la configuration plutôt que de le réinstaller si possible).

Erreur: "Erreur: erreur SSL: SELF_SIGNED_CERT_IN_CHAIN"

Message complet:

npm ERR! Error: SSL Error: SELF_SIGNED_CERT_IN_CHAIN
npm ERR!     at ClientRequest.<anonymous> (/usr/lib/node_modules/npm/node_modules/request/main.js:252:28)
npm ERR!     at ClientRequest.emit (events.js:67:17)
npm ERR!     at HTTPParser.onIncoming (http.js:1261:11)
npm ERR!     at HTTPParser.onHeadersComplete (http.js:102:31)
npm ERR!     at CleartextStream.ondata (http.js:1150:24)
npm ERR!     at CleartextStream._push (tls.js:375:27)
npm ERR!     at SecurePair.cycle (tls.js:734:20)
npm ERR!     at EncryptedStream.write (tls.js:130:13)
npm ERR!     at Socket.ondata (stream.js:38:26)
npm ERR!     at Socket.emit (events.js:67:17)
npm ERR! Report this *entire* log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>
npm ERR! 
npm ERR! System Linux 2.6.38-13-generic
npm ERR! command "node" "/usr/bin/npm" "install" "jed"
npm ERR! node -v v0.6.12
npm ERR! npm -v 1.0.104
Ali Haider
la source
1
Ne supprimez pas le SSL strict. Jetez un œil à stackoverflow.com/a/16534065
nolim1t
15
Depuis le 27 février 2014, npm ne prend plus en charge ses certificats auto-signés. Veuillez consulter le blog de npm ou la réponse récente ci-dessous pour plus d'informations.
Kevin Reilly
1
En cas de problème avec AWS Elastic Beanstalk, une solution est disponible ici: stackoverflow.com/questions/22096459/…
Guillaume Flandre
1
nolim1t : cela ne résout pas la cause du problème, et Kevin : les commandes dans le billet de blog sont incomplètes. Voir stackoverflow.com/a/22099006/106302 pour les commandes qui ont fonctionné pour moi.
We Are All Monica
1
@ali S'IL VOUS PLAÎT modifier la «réponse acceptée» Ce problème apparaît en raison d'une mise à niveau npm, et non d'un problème avec SSL. Désactiver SSL est MAUVAIS, et d'autant plus que la réponse actuellement correcte est de mettre à jour npm. La réponse de Kevin Reilly devrait être la réponse acceptée. Merci.
Mikezx6r

Réponses:

391

L'exécution des éléments suivants a aidé à résoudre le problème:

npm config set strict-ssl false

Je ne peux pas dire si cela causera d'autres problèmes pour le moment. J'espère que ça aide.

Ali Haider
la source
39
exécuter "npm config set ca null" à la place, ignorer les erreurs ssl est une mauvaise idée
alex
6
@SnowInferno SSL garantit également que vous parlez au vrai Registry.npmjs.org. Quelqu'un pourrait potentiellement installer des packages malveillants.
adotout
58
C'est terriblement faux. Pourquoi vous embêtez-vous même à utiliser SSL si chaque fois qu'il fait la seule chose qu'il est censé faire, vous l'éteignez? "Chaque fois que ignorer une erreur mène au succès, les développeurs vont faire exactement cela."
djechlin
20
Veuillez ne pas ignorer les problèmes SSL, car l'erreur est là pour une très bonne raison. En outre, un peu de recherche a abouti au tweet suivant, qui renvoie à la solution officielle à votre problème (mise à jour npm): twitter.com/npmjs/status/439279809307242496
Thomas Vervest
41
Mon problème est dû à un proxy derrière lequel je me trouve, "npm config set ca null" et 'npm config set ca ""' m'ont toujours donné la même erreur, mais la suppression de SSL a parfaitement fonctionné. Parfois, les bonnes pratiques ne sont pas aussi importantes que ce qui fonctionne réellement.
Cory Schulz
220

Depuis le 27 février 2014, npm ne prend plus en charge ses certificats auto-signés . Les options suivantes, recommandées par npm, consistent à effectuer l'une des opérations suivantes:

Mettez à niveau votre version de npm

npm install npm -g --ca=""

-- OU --

Dites à votre version actuelle de npm d'utiliser des bureaux d'enregistrement connus

npm config set ca ""

Mise à jour: npm a publié plus d'aide avec SELF_SIGNED_CERT_IN_CHAIN ​​et npm avec plus de solutions particulières à différents environnements



Vous devrez peut-être ou non ajouter sudoles recommandations.


Autres options

Il semble que les gens rencontrent des problèmes lors de l'utilisation des recommandations de npm, alors voici d'autres solutions potentielles.

Mettre à niveau le nœud lui-même La
réception de cette erreur peut suggérer que vous avez une ancienne version de nœud, qui vient naturellement avec une ancienne version de npm. Une solution consiste à mettre à niveau votre version de Node. C'est probablement la meilleure option car elle vous met à jour et corrige les bugs et vulnérabilités existants.

Le processus ici dépend de la façon dont vous avez installé Node, de votre système d'exploitation et autrement.

Mettre à jour npm
Étant donné que vous êtes probablement arrivé ici en essayant installun package, il est possible que npm install npm -gcela échoue avec la même erreur. Si tel est le cas, utilisez updateplutôt. Comme suggéré par Nisanth Sojan:

npm update npm -g

Mettre à jour l'alternative npm
Une façon de contourner le problème sous-jacent consiste à utiliser des bureaux d'enregistrement connus, à installer, puis à cesser d'utiliser des bureaux d'enregistrement connus. Comme suggéré par jnylen:

npm config set ca ""
npm install npm -g
npm config delete ca
Kevin Reilly
la source
10
La solution la plus simple est probablement de télécharger la dernière version de Nodejs elle-même, elle inclut une nouvelle version de npm où ce problème est résolu. Aucune des commandes ci-dessus n'a fonctionné pour moi.
Strille
1
Je choisis cette solution car c'est la première qui n'ignore pas ssl (en définissant la vérification sur false dans config ou en utilisant http à la place). Merci!
hcpl
12
npm install npm -g me donne également l'erreur SELF_SIGNED_CERT_IN_CHAIN
Anders Bornholm
3
Si cela ne fonctionne pas, faites d' npm config set ca ""abord, puis mettez à niveau, puis annulez le changement de configuration. Voir: stackoverflow.com/a/22099006/106302
We Are All Monica
1
@Redsandro sudochange l'utilisateur, -gdéfinit les ensembles d'indicateurs pour l'installer globalement pour cet utilisateur ou juste en local node_modules.
Radek
68

Pour l'instant, je viens de passer l'URL du registre de https à http. Comme ça:

npm config set registry="http://registry.npmjs.org/"
Hermann
la source
1
A fonctionné à merveille pour moi. Je ne voulais pas perdre l'autorité de certification d'origine ni la forcer à ignorer les erreurs SSL.
SnowInferno
Fonctionne parfaitement. Merci!
basilic muhammed le
13
Désactiver la sécurité ne peut pas être la solution!
Alessandro Pezzato
1
J'avais déjà utilisé cela, mais pour une raison quelconque, le faire revenir à «https: //» de «http: //» a fait fonctionner le mien à nouveau.
kshreve
Après avoir essayé toutes les autres solutions, cela fonctionne enfin pour moi :-)
Swapnil Kadu
49
npm config set strict-ssl false -g

Pour l'enregistrer globalement

Robin
la source
Faire cela me donne la cb() never called!fameuse erreur npm
Jeremy
Après ce paramètre, je suis en dessous de l'erreur npm ERR! code E401 npm ERR! Impossible de s'authentifier, besoin: Négocier, NTLM npm ERR! Un journal complet de cette course peut être trouvé dans: npm ERR! C: \ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
Shami Qureshi
31

Vous devez mettre à jour npm.

// Do this first, or the upgrade will fail
npm config set ca ""

npm install npm -g

// Undo the previous config change
npm config delete ca

Vous devrez peut-être préfixer ces commandes avec sudo .

Source: http://blog.npmjs.org/post/78085451721/npms-self-signed-certificate-is-no-more

Nous sommes tous Monica
la source
@Oliver Salzburg: re. votre édition: sur OS XI, ne pensez pas que ce sudosoit nécessaire, et préfixer la commande de mise à niveau avec sudoa bien fonctionné pour moi. YMMV.
We Are All Monica
Ah, cela a fonctionné pour moi. Merci pour les instructions spécifiques sur l'annulation du changement de configuration (donc je n'ai pas eu à le creuser moi-même)!
Matt
Intéressant. Je n'ai fait le montage qu'après l'avoir testé sur un serveur Debian. J'aime bien la révision actuelle;)
Der Hochstapler
Ubuntu / Debian nécessitent des liens supplémentaires, voir ma réponse ci-dessous.
Redsandro
2
Cela devrait être la solution acceptée. Cela ne désactive pas la sécurité et est la solution "officielle" décrite dans le blog npm.
Alessandro Pezzato
21

L'erreur SELF_SIGNED_CERT_IN_CHAIN signifie que vous avez un certificat auto-signé dans la chaîne de certificats qui n'est fondamentalement pas approuvé par le système.

Si cela se produit, il se passe essentiellement quelque chose de louche, donc comme les gens l'ont déjà dit, il n'est pas recommandé de simplement désactiver les vérifications de certificats, mais la meilleure approche consiste à comprendre quel est le problème et à en résoudre la cause.

Cela peut être lié à:

  • adresse de référentiel personnalisée qui n'a pas le bon certificat,

  • un réseau d'entreprise avec proxy transparent.

    Si vous êtes derrière un proxy Web d'entreprise, vous devez configurer les variables HTTP_PROXY/ HTTPS_PROXYenvironnement appropriées ou les définir via npm:

    npm config set proxy http://proxy.company.com:8080
    npm config set https-proxy http://proxy.company.com:8080

    Voir: Comment configurer Node.js et Npm derrière un proxy Web d'entreprise

Si vous faites confiance à l'hôte, vous pouvez exporter le certificat auto-signé de la chaîne et les importer dans le système, afin qu'ils soient marqués comme approuvés.

Ceci peut être réalisé en vérifiant les certificats par (changer example.comen npm repo qui échoue sur la base du npm-debug.log):

openssl s_client -showcerts -connect example.com:443 < /dev/null

puis enregistrez le contenu du certificat (entre BEGINet END) dans un .crtfichier afin de l'importer.

Linux

Selon la suggestion , vous pouvez ajouter un certificat exporté dans un /etc/environmentfichier (Node 7.4+), comme:

NODE_EXTRA_CA_CERTS=/etc/pki/ca-trust/source/anchors/yourCer‌​ts.pem

CentOS

Sur CentOS 5, cela peut être ajouté au /etc/pki/tls/certs/ca-bundle.crtfichier, par exemple

ex +'g/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | openssl s_client -showcerts -connect example.com:443) -scq | sudo tee -a /etc/pki/tls/certs/ca-bundle.crt
sudo update-ca-trust force-enable
sudo update-ca-trust extract
npm install

Remarque: pour exporter uniquement le premier certificat, supprimez-le gau début.

Dans CentOS 6, le fichier de certificat peut être copié /etc/pki/ca-trust/source/anchors/.

Ubuntu / Debian

Dans Ubuntu / Debian, copiez le fichier CRT /usr/local/share/ca-certificates/ puis exécutez:

sudo update-ca-certificates

macOS

Sous macOS, vous pouvez exécuter:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/foo.crt

les fenêtres

Sous Windows: certutil -addstore -f "ROOT" new-root-certificate.crt


Voir aussi: npm - Dépannage - Erreur SSL

Kenorb
la source
1
> Si tel est le cas, vous devez exporter le certificat auto-signé de la chaîne et les importer dans le système, afin qu'ils soient marqués comme approuvés. - Ça me fait du mal.
dmi3y
2
Génial! Cela aide également à ajouter NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchors / yourCerts.pem à l'environnement / etc /. Le nœud 7.4+ prend cela en compte
ph4r05
9

Mettre cela avant la commande semble fonctionner NODE_TLS_REJECT_UNAUTHORIZED=0. ex:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

Il serait préférable de comprendre comment faire en sorte que le nœud considère le certificat auto-signé comme valide. La suggestion strict-ssl ci-dessus n'a pas fonctionné pour moi pour une raison quelconque. Si vous comprenez les implications en matière de sécurité et avez besoin d'une solution rapide temporaire, voici ce que j'ai trouvé dans certains problèmes aléatoires de github lors de la recherche Google de l'erreur.

Adam Lane
la source
1
pour Windows, utilisez "set NODE_TLS_REJECT_UNAUTHORIZED = 0". Et puis fonctionne comme un charme !!
Tarun
8

Le référentiel ne prend plus en charge les certificats auto-signés. Vous devez mettre à niveau npm.

// Disable the certificate temporarily in order to do the upgrade
npm config set ca ""

// Upgrade npm. -g (global) means you need root permissions; be root 
// or prepend `sudo`
sudo npm install npm -g

// Undo the previous config change
npm config delete ca

// For Ubuntu/Debian-sid/Mint, node package is renamed to nodejs which 
// npm cannot find. Fix this:
sudo ln -s /usr/bin/nodejs /usr/bin/node

Vous devez ouvrir une nouvelle session de terminal pour utiliser la mise à jour npm.

Source: Il s'agissait à l'origine d'une modification de la réponse de jnylen . Bien que les lignes directrices disent "Nous nous félicitons de toutes les modifications constructives, mais veuillez les rendre substantielles", la modification a été rejetée en raison de "Cette modification change trop dans le message d'origine; la signification ou l'intention d'origine du message serait perdue." Je suppose que la communauté préfère une réponse distincte.

Redsandro
la source
Cela a fonctionné pour moi. Cependant , je ne l' ai pas besoin de la dernière commande: sudo ln -s /usr/bin/nodejs /usr/bin/node.
absynce
1
Cela dépend probablement si vous avez installé à partir des référentiels officiels Ubuntu, un référentiel tiers (pour une version plus récente), ou compilé vous-même (pour la dernière version).
Redsandro
7

Pour ceux qui sur un mac avec le même problème et ont installé npm via homebrew :

brew uninstall npm

puis

brew install npm

Fonctionne pour moi sur OSX (10.9.1)

EDIT : vous devrez peut-être brew updateavant d'installer npm. Vous pouvez également faire un brew upgradeaprès la mise à jour de l'homebrew. Il peut également être utile de l'exécuter brew doctorsi vous rencontrez d'autres problèmes.

Patrick
la source
4

Solution rapide et propre (testée Linux) (Après fatidic 27 février 2014)


Désinstaller npm

npm rm npm -g

Installez npm (la nouvelle URL est www.npmjs.org au lieu de npmjs.org )

curl https://www.npmjs.org/install.sh | sh

Astuce : comment installer node.js sous linux https://stackoverflow.com/a/22099363/333061

Igor Parra
la source
La commande ne fonctionne plus en raison d'une redirection 301 mais vous pouvez toujours taper https://www.npmjs.org/install.shdans votre navigateur et la télécharger avant de l'exécuter manuellement.
svassr
Ou exécutez le curl avec le drapeau -L
Evan Cordell
la curl https://npmjs.org/install.shcommande précédente redirige vers https://www.npmjs.org/install.shc'est pourquoi curl https://www.npmjs.org/install.sh | shfonctionne de manière transparente. est OK pour installer à partir de maintenant le petit padawan. :)
Igor Parra
2

Désactiver SSL semble être une très mauvaise idée. Le blog de npm explique qu'ils ne prennent plus en charge leur certificat auto-signé. Ils suggèrent de mettre à jour npm via npm install npm -g, mais j'ai bien sûr eu la même erreur SELF_SIGNED_CERT_IN_CHAIN. Je viens donc de mettre à jour le nœud, qui a mis à jour npm avec lui. La procédure exacte dépend de la façon dont vous avez installé le nœud en premier lieu.

Jeremiah Orr
la source