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
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.
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
Sudo
aux recommandations .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
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/"
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
npm config set strict-ssl false -g
Pour le sauvegarder globalement
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.
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/yourCerts.pem
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/
.
Dans Ubuntu/Debian, copiez le fichier CRT dans /usr/local/share/ca-certificates/
puis exécutez:
Sudo update-ca-certificates
Dans MacOS, vous pouvez exécuter:
Sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/foo.crt
Sous Windows: certutil -addstore -f "ROOT" new-root-certificate.crt
Voir aussi: npm - Dépannage - Erreur SSL
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.
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.
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
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 ...
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.
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.