web-dev-qa-db-fra.com

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

J'utilise npm v1.0.104/node 0.6.12 sur Ubuntu - Je reçois le message d'erreur copié ci-dessous lors de la tentative d'installation de nouveaux modules via npm (j'ai déjà testé socket.io en utilisant http, pas https, mais je me demande si cela pourrait le problème avec les certificats npm/unsigned). L'erreur apparaît une fois que npm tente de résoudre l'URL ' https://registry.npmjs.org '. Y at-il de toute façon que je puisse ignorer l'erreur ou peut-être localiser/ajouter le certificat à un magasin approuvé afin de continuer à utiliser npm. 

Toute idée sur ce qui doit être fait pour résoudre le problème sera appréciée (je préférerais résoudre le problème via 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!     <[email protected]>
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
229
ali haider

L'exécution de ce qui suit a aidé à résoudre le problème:

npm config set strict-ssl false

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

291
ali haider

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=""

- OR -

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

npm config set ca ""

Mise à jour: npm a publié Plus d'aide sur SELF_SIGNED_CERT_IN_CHAIN ​​et npm avec plus de solutions spécifiques à différents environnements



Vous pouvez ou non avoir besoin de rajouter Sudo aux recommandations .


Autres options

Il semble que les gens rencontrent des difficultés pour utiliser les recommandations de npm. Voici donc d'autres solutions possibles.

Upgrade Node lui-même
Recevoir cette erreur peut suggérer que vous avez une version plus ancienne de node, qui vient naturellement avec une version plus ancienne de npm. Une solution consiste à mettre à niveau votre version de Node. C’est probablement la meilleure option car elle vous permet de mettre à jour et de corriger les bugs et vulnérabilités existants.

Le processus ici dépend de la manière dont vous avez installé Node, de votre système d’exploitation ou non.

Update npm
Étant donné que vous êtes probablement arrivé ici en essayant de install un paquet, il est possible que npm install npm -g échoue avec la même erreur. Si tel est le cas, utilisez plutôt update. Comme suggéré par Nisanth Sojan:

npm update npm -g

Update npm alternative
Une solution au 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
209
Kevin Reilly

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

npm config set registry="http://registry.npmjs.org/"
63
GermanZ

Vous devez mettre à niveau 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/7808085451721/npms-self-signed-certificate-is-no-more

30
jnylen
npm config set strict-ssl false -g

Pour le sauvegarder globalement 

28
Robin

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 quelque chose de louche. Par conséquent, comme le signalaient déjà les utilisateurs, il n'est pas recommandé de désactiver simplement les contrôles de certificat, mais une meilleure approche consiste à comprendre le problème et à en résoudre la cause.

Cela peut être lié soit à:

  • adresse de référentiel personnalisé 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 d'environnement HTTP_PROXY/HTTPS_PROXY appropriées ou 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 l'importer dans le système afin qu'il soit marqué comme approuvé.

Cela peut être réalisé en vérifiant les certificats comme suit (changez example.com dans le référentiel npm qui échoue en fonction du npm-debug.log):

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

puis enregistrez le contenu du certificat (entre BEGIN et END) dans le fichier .crt afin de l'importer.

Linux

Selon suggestion , vous pouvez ajouter le certificat exporté dans le fichier /etc/environment (Node 7.4+), comme suit:

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

CentOS

Sur CentOS 5, cela peut être ajouté au fichier /etc/pki/tls/certs/ca-bundle.crt, 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 g au début.

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

Ubuntu/Debian

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

Sudo update-ca-certificates

macOS

Dans 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

9
kenorb

Le référentiel ne prend plus en charge les certificats auto-signés. Vous devez mettre à jour 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 pouvoir utiliser la version npm mise à jour.

Source: Ceci était à l'origine une modification de la réponse de jnylen . Bien que les directives indiquent "Nous nous félicitons de toutes les modifications constructives, mais merci de les rendre substantielles," la modification a été rejetée en raison de "Cette modification modifie trop le message d'origine; être perdu." Je suppose que la communauté préfère une réponse séparée.

8
Redsandro

Pour ceux qui utilisent mac avec le même problème et qui 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 update avant d'installer npm. Vous pouvez également faire un brew upgrade après la mise à jour de l'homebrew. De plus, il pourrait être utile d’exécuter brew doctor si vous rencontrez d’autres problèmes. 

7
Patrick

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


Désinstaller npm

npm rm npm -g

Install npm (la nouvelle URL est www.npmjs.org à la place de npmjs.org)

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

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

3
Igor Parra

Désinstallez NPM et réinstallez-le.

Depuis le 27 février 2014, npm ne prend plus en charge ses certificats auto-signés. http://blog.npmjs.org/post/7808545451721/npms-self-signed-certificate-is-no-more

Le lien ci-dessus suggère de mettre à niveau NPM à l'aide de NPM. Cela échoue également avec SELF_SIGNED_CERT_IN_CHAIN ​​...

2
Florian Winter

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 noeud, qui a mis à jour npm avec. La procédure exacte dépend de la manière dont vous avez installé le noeud en premier lieu.

1
Jeremiah Orr

Mettre ceci avant que la commande semble fonctionner NODE_TLS_REJECT_UNAUTHORIZED=0. Ex: NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

Il serait préférable de déterminer comment faire en sorte que le noeud considère le certificat auto-signé comme valide. La suggestion de 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 si vous avez besoin d’une solution rapide, voici ce que j’ai trouvé dans certains problèmes aléatoires de github lors de la recherche Google de l’erreur. 

0
Adam Lane