errore di ricezione: "Errore: errore SSL: SELF_SIGNED_CERT_IN_CHAIN" durante l'utilizzo di npm


292

Sto usando npm v1.0.104 / nodo 0.6.12 su ubuntu - Ricevo l'errore copiato di seguito mentre provo a installare nuovi moduli tramite npm (ho testato socket.io in precedenza usando http, non https però e mi chiedo se ciò potrebbe ha provocato il problema con npm / certificati non firmati). L'errore viene visualizzato quando npm tenta di risolvere l' URL " https://registry.npmjs.org ". C'è comunque che posso ignorare l'errore o forse individuare / aggiungere il certificato in un archivio attendibile per continuare a utilizzare npm.

Qualsiasi approfondimento su ciò che deve essere fatto per risolvere il problema sarà apprezzato (preferirei risolvere il problema attraverso la configurazione piuttosto che reinstallare se possibile).

Errore: "Errore: errore SSL: SELF_SIGNED_CERT_IN_CHAIN"

Messaggio completo:

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

1
Non rimuovere SSL rigoroso. Date un'occhiata a stackoverflow.com/a/16534065
nolim1t

15
Dal 27 febbraio 2014 npm non supporta più i propri certificati autofirmati. Per ulteriori informazioni, consultare il post sul blog di npm o la risposta recente di seguito.
Kevin Reilly,

1
In caso di problemi con questo su AWS Elastic Beanstalk, una soluzione è disponibile qui: stackoverflow.com/questions/22096459/…
Guillaume Flandre,

1
nolim1t : questo non risolve la causa del problema, e Kevin : i comandi nel post del blog sono incompleti. Vedi stackoverflow.com/a/22099006/106302 per i comandi che hanno funzionato per me.
Siamo tutti Monica,

1
@ali PER FAVORE modifica la "Risposta accettata" Questo problema si presenta a causa di un aggiornamento npm e non di un problema con SSL. La disattivazione di SSL è MALE, soprattutto perché la risposta attualmente corretta è aggiornare npm. La risposta di Kevin Reilly dovrebbe essere la risposta accettata. Grazie.
Mikezx6r,

Risposte:


391

L'esecuzione di quanto segue ha aiutato a risolvere il problema:

npm config set strict-ssl false

Non posso commentare se questo causerà altri problemi in questo momento. Spero che sia d'aiuto.


39
eseguire "npm config set ca null" invece, ignorare gli errori ssl è una cattiva idea
alex

6
@SnowInferno SSL garantisce anche che stai parlando con il vero register.npmjs.org. Qualcuno potrebbe potenzialmente installare pacchetti dannosi.
adotout,

58
Questo è totalmente sporco. Perché ti preoccupi anche di usare SSL se ogni volta che fa l'unica cosa che dovresti fare lo spegni? "Ogni volta che ignorare un errore porta al successo, gli sviluppatori faranno proprio questo."
Djechlin,

20
Si prega di non ignorare i problemi di SSL, poiché l'errore è presente per un'ottima ragione. Inoltre, un po 'di ricerca ha portato al seguente tweet, che collega alla soluzione ufficiale al tuo problema (aggiornamento npm): twitter.com/npmjs/status/439279809307242496
Thomas Vervest,

41
Il mio problema è stato causato da un proxy che sono dietro, "npm config set ca null" e 'npm config set ca ""' mi hanno ancora dato lo stesso errore, ma la rimozione di SSL ha funzionato perfettamente. A volte le buone pratiche non sono così importanti come ciò che realmente funziona.
Cory Schulz,

220

A partire dal 27 febbraio 2014, npm non supporta più i propri certificati autofirmati . Le seguenti opzioni, come raccomandato da npm, sono le seguenti:

Aggiorna la tua versione di npm

npm install npm -g --ca=""

-- O --

Indica alla tua versione attuale di npm di utilizzare registrar noti

npm config set ca ""

Aggiornamento: npm ha pubblicato ulteriore aiuto con SELF_SIGNED_CERT_IN_CHAIN ​​e npm con più soluzioni specifiche per ambienti diversi



Potrebbe essere necessario o meno dover anteporre sudoalle raccomandazioni.


Altre opzioni

Sembra che le persone stiano riscontrando problemi usando i consigli di npm, quindi ecco alcune potenziali soluzioni.

Aggiorna nodo stesso La
ricezione di questo errore può suggerire la presenza di una versione precedente del nodo, che naturalmente viene fornita con una versione precedente di npm. Una soluzione è aggiornare la tua versione di Node. Questa è probabilmente l'opzione migliore in quanto ti aggiorna e corregge bug e vulnerabilità esistenti.

Il processo qui dipende da come hai installato Node, dal tuo sistema operativo e altro.

Aggiornamento npm Dato
che probabilmente sei arrivato qui durante il tentativo di installun pacchetto, è possibile che npm install npm -gpotrebbe non riuscire con lo stesso errore. In tal caso, utilizzare updateinvece. Come suggerito da Nisanth Sojan:

npm update npm -g

Aggiorna npm alternativa
Un modo per aggirare il problema di fondo è utilizzare registrar noti, installare e quindi smettere di usare registrar noti. Come suggerito da jnylen:

npm config set ca ""
npm install npm -g
npm config delete ca

10
Probabilmente la soluzione più semplice è scaricare l'ultima versione di Nodejs stesso, include una nuova versione di npm in cui il problema è stato risolto. Nessuno dei comandi sopra ha funzionato per me.
Strille,

1
Vado con questa soluzione poiché è la prima a non ignorare ssl (impostando il controllo su false in config o usando invece http). Grazie!
hcpl,

12
npm install npm -g mi dà anche l'errore SELF_SIGNED_CERT_IN_CHAIN
Anders Bornholm,

3
Se il problema persiste, esegui npm config set ca ""prima l'aggiornamento, quindi annulla la modifica della configurazione. Vedi: stackoverflow.com/a/22099006/106302
Siamo tutti Monica

1
@Redsandro sudocambia l'utente, -gflag imposta se installare globalmente per quell'utente o solo in locale node_modules.
Radek,

68

Per ora ho appena cambiato l'URL del registro da https a http. Come questo:

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

1
Ha funzionato benissimo per me. Non volevo perdere la CA originale o forzarla a ignorare gli errori SSL.
SnowInferno,

Ha funzionato perfettamente. Grazie!
Muhammed Basil,

13
Disabilitare la sicurezza non può essere la soluzione!
Alessandro Pezzato,

1
Lo avevo usato in precedenza, ma per qualche motivo il passaggio a 'https: //' da 'http: //' ha fatto funzionare di nuovo il mio.
kshreve,

Dopo aver provato tutte le altre soluzioni, finalmente questo lavoro per me :-)
Swapnil Kadu,

49
npm config set strict-ssl false -g

Per salvarlo a livello globale


Questo mi dà il famigerato cb() never called!errore npm
Jeremy

Dopo questa impostazione, eseguo il geeting sotto l'errore npm ERR! codice E401 npm ERR! Impossibile eseguire l'autenticazione, necessità: negoziazione, NTLM npm ERR! Un registro completo di questa corsa è disponibile in: npm ERR! C: \ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
Shami Qureshi

31

Devi aggiornare 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

Potrebbe essere necessario aggiungere un prefisso a questi comandi sudo.

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


@Oliver Salzburg: re. la tua modifica: su OS X non credo sudosia necessario, e solo il prefisso del comando upgrade ha sudofunzionato bene per me. YMMV.
Siamo tutti Monica,

Ah, questo ha funzionato per me. Grazie per le istruzioni specifiche su come annullare la modifica della configurazione (quindi non ho dovuto scavare da solo)!
Matt,

Interessante. Ho effettuato la modifica solo dopo averlo testato su un server Debian. Tuttavia, mi piace l'attuale revisione;)
Der Hochstapler,

Ubuntu / Debian richiedono collegamenti aggiuntivi, vedere la mia risposta di seguito.
Redsandro,

2
Questa dovrebbe essere la soluzione accettata. Questo non disabilita la sicurezza ed è la soluzione "ufficiale" descritta nel blog di npm.
Alessandro Pezzato,

21

L'errore SELF_SIGNED_CERT_IN_CHAINindica che hai un certificato autofirmato nella catena di certificati che non è sostanzialmente considerato attendibile dal sistema.

Se ciò accade, fondamentalmente sta succedendo qualcosa di sospetto, quindi, come già commentato dalle persone, non è consigliabile disabilitare solo i controlli dei certificati, ma un approccio migliore è capire qual è il problema e risolverne la causa.

Ciò potrebbe essere correlato a:

  • indirizzo del repository personalizzato che non ha il certificato giusto,

  • una rete aziendale con proxy trasparente.

    Se sei dietro un proxy Web aziendale, devi impostare le variabili appropriate HTTP_PROXY/ HTTPS_PROXYambiente o impostarle tramite npm:

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

    Vedi: Come configurare Node.js e Npm dietro un proxy Web aziendale

Se ritieni attendibile l'host, puoi esportare il certificato autofirmato dalla catena e importarlo nel sistema, quindi sono contrassegnati come attendibili.

Ciò può essere ottenuto controllando i certificati da (modifica example.comin repository npm che non funziona in base a npm-debug.log):

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

quindi salvare il contenuto del certificato (tra BEGINe END) in un .crtfile per importarlo.

Linux

Come da suggerimento , puoi aggiungere il certificato esportato nel /etc/environmentfile (Nodo 7.4+), come:

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

CentOS

Su CentOS 5 questo può essere aggiunto in un /etc/pki/tls/certs/ca-bundle.crtfile, ad es

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

Nota: per esportare solo il primo certificato, rimuoverlo gall'inizio.

In CentOS 6, è possibile copiare il file del certificato /etc/pki/ca-trust/source/anchors/.

Ubuntu / Debian

In Ubuntu / Debian, copiare il file CRT in /usr/local/share/ca-certificates/ quindi eseguire:

sudo update-ca-certificates

Mac OS

In macOS puoi eseguire:

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

finestre

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


Vedi anche: npm - Risoluzione dei problemi - Errore SSL


1
> In tal caso, è necessario esportare il certificato autofirmato dalla catena e importarlo nel sistema, quindi sono contrassegnati come affidabili. - Mi fa scherzare.
dmi3y,

2
Grande! Aiuta anche ad aggiungere NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchors / yourCerts.pem all'ambiente / etc /. Il nodo 7.4+ ne tiene conto
ph4r05,

9

Metterlo davanti al comando sembra funzionare NODE_TLS_REJECT_UNAUTHORIZED=0. ex:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

Sarebbe meglio capire come fare in modo che il nodo consideri il certificato autofirmato valido. Il suggerimento restrittivo sopra riportato non ha funzionato per me per qualche motivo. Se capisci le implicazioni di sicurezza e hai bisogno di una soluzione rapida temporanea, questo è quello che ho trovato in alcuni problemi casuali di github durante la ricerca dell'errore da parte di Google.


1
per Windows, utilizzare "set NODE_TLS_REJECT_UNAUTHORIZED = 0". E poi funziona come un fascino !!
Tarun,

8

Il repository non supporta più i certificati autofirmati. Devi aggiornare 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

È necessario aprire una nuova sessione terminale per utilizzare l'aggiornamento npm.

Fonte: questa era originariamente una modifica della risposta di Jnylen . Sebbene le linee guida dicano "Accogliamo con favore tutte le modifiche costruttive, ma per favore renderle sostanziali", la modifica è stata respinta a causa di "Questa modifica cambia troppo nel post originale; il significato originale o l'intento del post andrebbero persi". Immagino che la comunità preferisca una risposta separata.


Questo ha funzionato per me. Tuttavia non ho avuto bisogno l'ultimo comando: sudo ln -s /usr/bin/nodejs /usr/bin/node.
absynce il

1
Probabilmente dipende dal fatto che sia stato installato dai repository Ubuntu ufficiali, da un repository di terze parti (per una versione più recente) o compilato dall'utente (per la versione più recente).
Redsandro,

7

Per coloro che su un Mac con lo stesso problema e installato npm tramite homebrew :

brew uninstall npm

poi

brew install npm

Funziona per me su osx (10.9.1)

EDIT : potrebbe essere necessario brew updateprima di installare npm. Puoi anche fare un brew upgradedopo l'aggiornamento di homebrew. Inoltre, potrebbe essere utile eseguire brew doctorse si verificano altri problemi.


4

Soluzione rapida e pulita (testata per Linux) (After fatidic, 27 febbraio 2014)


Disinstallare npm

npm rm npm -g

Installa npm (il nuovo URL è www.npmjs.org invece npmjs.org )

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

Suggerimento : come installare node.js in linux https://stackoverflow.com/a/22099363/333061


Il comando non funziona più a causa di un reindirizzamento 301 ma è comunque possibile digitare https://www.npmjs.org/install.shnel browser e scaricarlo prima di eseguirlo manualmente.
svassr,

Oppure corri con la bandiera -L
Evan Cordell,

il curl https://npmjs.org/install.shcomando precedente sta reindirizzando a https://www.npmjs.org/install.shquesto motivo per cui curl https://www.npmjs.org/install.sh | shfunziona senza problemi. va bene installare da ora in poi Little Padawan. :)
Igor Parra


2

Disattivare SSL sembra un'idea profondamente negativa. Il blog di npm spiega che non supportano più il loro certificato autofirmato. Suggeriscono di aggiornare npm tramite npm install npm -g, ma ovviamente ho ricevuto lo stesso errore SELF_SIGNED_CERT_IN_CHAIN. Quindi ho appena aggiornato il nodo, che ha aggiornato npm insieme ad esso. La procedura esatta dipende innanzitutto dalla modalità di installazione del nodo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.