npm ERR! codice UNABLE_TO_GET_ISSUER_CERT_LOCALLY


118

Sto provando tutti i modi per creare un'applicazione React. Ho provato con Maven e ora sto provando con il sistema di compilazione di app Crate-React dagli Incubatori di Facebook.

Quando ho provato a eseguire il comando create-react-app my-appnell'ambiente npm, ha funzionato sul mio sistema personale senza problemi. Ma quando ho provato lo stesso comando nel mio ambiente di lavoro, ho riscontrato questo errore sul prompt dei comandi

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>

1
Inoltre non potevo usare sudoquando correvo npm install aws-sdk. L'esecuzione ha sudo npm install aws-sdkcausato questo errore per me.
Kyle Bridenstine

Risposte:


296

Una soluzione rapida dalla ricerca su Internet è stata npm config set strict-ssl false, fortunatamente ha funzionato. Ma come parte del mio ambiente di lavoro, sono limitato a impostare il flag strict-ssl su false.

Successivamente ho trovato una soluzione sicura e funzionante,

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

questo ha funzionato perfettamente e ho ricevuto un messaggio di successo Happy Hacking!non impostando il flag strict-ssl su false.


2
Anch'io, sono appena tornato a utilizzare la versione HTTP del repository NPM (al contrario di registry.npmjs.org ), poiché il mio proxy di lavoro stava causando problemi (poiché funge da MITM, causando problemi di verifica della certificazione) Un giorno capirò il problema del certificato, ma avevo solo bisogno di scaricare un pacchetto, dannazione!
Robert Dundon

1
Ho pensato, ho già questa impostazione, ma quando ho guardato più da vicino ho avuto https invece di http ( registry.npmjs.org ). Modificato in http e ha funzionato.
Ashish Bajpai

Per me l'ho fatto ma non potevo nemmeno usare sudoquando correvo npm install aws-sdk. L'esecuzione ha sudo npm install aws-sdkcausato questo errore per me.
Kyle Bridenstine

Stavo ricevendo lo stesso errore mostrato in questo post, quindi ho eseguito npm config set strict-ssl falsee npm config set registry http://registry.npmjs.org/ ma stavo ancora ricevendo l'errore durante l'esecuzione, sudo npm install aws-sdkma quando ho lasciato cadere la sudoparte e ho appena eseguito, npm install aws-sdkha funzionato.
Kyle Bridenstine

per me nient'altro che l'impostazione di npm config set strict-ssl falsenon funziona. Sento che questo è qualcosa che l' node.jse npmsquadra dovrebbe esaminare e documentare con un adeguato lavoro intorno se non è risolvibile per loro.
RinoTom

23

quello che potrebbe accadere è che la tua azienda decrittografa un determinato traffico e lo ricodifica con il suo certificato (che probabilmente hai già nel tuo portachiavi o certificati radice attendibili)

se stai usando il nodo 7 o successivo, ho trovato questa correzione compatibile con node e node-gyp (per Windows dovrai farlo in modo diverso, ma in pratica devi solo aggiungere questa variabile d'ambiente):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (in Windows potrebbe essere necessario rimuovere le virgolette - vedere i commenti)

il file pem può avere più certificati: https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

assicurati che i tuoi certificati siano nel formato pem corretto (hai bisogno di interruzioni di riga reali non letterali \n)

Non riuscivo a farlo funzionare con percorsi relativi ( .o ~)

Questa correzione fondamentalmente dice a npm e node-gyp di utilizzare il controllo rispetto alle CA regolari, ma consente anche questo certificato quando lo incontra

Idealmente potresti utilizzare i certificati attendibili del tuo sistema, ma sfortunatamente non è così.


Grande. Vota per la tua spiegazione dettagliata. Mi ha aiutato a capire meglio. Nice info.
vissu

2
In Windows, il percorso non funzionava a meno che non avessi rimosso le virgolette.
Chris Anderson,

1
Ho questo problema a causa di BlueCoat e devo fare riferimento alla tua risposta ogni pochi mesi. Sicuramente una soluzione migliore rispetto alla disabilitazione di SSL rigoroso: grazie!
Jordan Grey

Dove posso trovare il file .pem in Windows. Ho cercato l'intero disco rigido per il file pem trovato pochi livelli in profondità all'interno di Windows \ System32. Ma non funziona
Sanchit Jain

10

La modifica dell'URL del repository NPM in HTTP funziona come una soluzione rapida, ma volevo utilizzare HTTPS.

Nel mio caso, il proxy del mio datore di lavoro (ZScaler) stava causando problemi (poiché funge da MITM, causando problemi di verifica della certificazione)

Ho dimenticato di aver trovato uno script che aiuta con questo e Git (per clonare i repository GitHub tramite HTTPS ha avuto lo stesso problema) e l' ho biforcato per il mio uso

Fondamentalmente, fa quanto segue per git:

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

e per Node, aggiunge proxy=http://gateway.zscaler.net:80/alla fine dic:\Users\$USERNAME\npm\.npmrc

Questo ha risolto il problema per me.


2
Potresti voler controllare in quale cloud ZS è configurata la tua azienda. Fondamentalmente, controlla ip.zscaler.comil nome del cloud e impostalo nell'URL. Ad esempio: se dice, zscalertwo.netsostituisci con il seguente URL:gateway.zscalertwo.net
Rahul Bharadwaj

6

Dopo aver provato ogni soluzione che ho trovato:

  • Disattivazione SSL rigoroso: npm config set strict-ssl=false
  • Modifica del registro in http anziché https: npm config set registry http://registry.npmjs.org/
  • Modifica delle impostazioni di cafile: npm config set cafile /path/to/your/cert.pem
  • Smetti di rifiutare CA sconosciute: set NODE_TLS_REJECT_UNAUTHORIZED=0

La soluzione che sembra funzionare al meglio per me ora è usare la variabile d'ambiente NODE_EXTRA_CA_CERTS che estende le CA esistenti piuttosto che sostituirle con l'opzione cafile nel tuo file .npmrc. Puoi impostarlo inserendo questo nel tuo terminale:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

Ovviamente, impostare questa variabile ogni volta può essere fastidioso, quindi l'ho aggiunta al mio profilo bash in modo che venga impostata ogni volta che apro il terminale. Se non hai già un ~/.bash_profilefile, creane uno. Quindi alla fine di quel file aggiungi export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem. Quindi, rimuovi l'impostazione cafile nel tuo .npmrc.


La quarta opzione era un fascino; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
tomdemuyt

5

Fidati di me, questo funzionerà per te:

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

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere le parti essenziali della risposta qui e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. Si prega di consultare Come rispondere per saperne di più su come rispondere alle domande
Artog

4

Ha avuto lo stesso errore. Sembra che sia correlato ai certificati SSL. Se utilizzi NPM per pacchetti pubblici (non è necessaria la sicurezza di HTTPS), puoi disattivare la convalida della chiave SSL rigorosa con il seguente comando.

Questa potrebbe essere la soluzione più semplice se stai solo cercando di installare alcuni pacchetti disponibili pubblicamente una volta.

npm config set strict-ssl=false

5
C'è il rischio intrinseco di farlo, se sei vittima di un nefasto attacco man-in-the-middle il pacchetto potrebbe essere modificato mentre lo scarichi.
Alex KeySmith

@AlexKeySmith Hai ragione. Tuttavia, le probabilità sono piuttosto basse. Questa potrebbe essere l'unica opzione per alcuni. Caveat Emptor
Jason Geiger

1

Ho riscontrato questo errore quando ho provato ad aggiornare npm, ma avevo una versione molto vecchia (1.3.6!) Installata da yum in AWS Linux. Sono stato in grado di installare manualmente una versione più recente di npm e tutto è stato risolto.


0

Il codice seguente ha funzionato perfettamente per me qui rende solo http invece https

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

0

Nel mio caso, a un certo punto ho impostato la mia configurazione globale per utilizzare un certificato destinato a un progetto.

npm config list

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

Ho aperto il file, rimosso la linea e ho npm installlavorato di nuovo.


0

ha ricevuto il seguente errore

PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm install vue npm ERR! codice UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! richiesta a https://registry.npmjs.org/vue non riuscita, motivo: impossibile ottenere il certificato dell'emittente locale

npm ERR! Un registro completo di questa corsa può essere trovato in: 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-hours-tracking> npm ERR!
C: \ Users \ chpr \ AppData \ Roaming \ NPM-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log

Il comando seguente ha risolto il problema:

npm config set strict-ssl false
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.