npm ERR! kod UNABLE_TO_GET_ISSUER_CERT_LOCALLY

118

Próbuję wszystkich sposobów tworzenia aplikacji React. Próbowałem z mavenem, a teraz próbuję z systemem budowania aplikacji typu crate-act-app z Facebook Incubators.

Kiedy próbowałem uruchomić polecenie create-react-app my-appw środowisku npm, działało na moim systemie osobistym bez żadnych problemów. Ale kiedy wypróbowałem to samo polecenie w moim środowisku pracy, napotkałem ten błąd w wierszu polecenia

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>
Dinesh
źródło
1
Nie mogłem też używać, sudokiedy biegałem npm install aws-sdk. Uruchamianie sudo npm install aws-sdkspowodowało ten błąd.
Kyle Bridenstine

Odpowiedzi:

296

Szybkim rozwiązaniem z wyszukiwarki internetowej było npm config set strict-ssl false, na szczęście zadziałało. Ale jako część mojego środowiska pracy jestem ograniczony do ustawienia flagi strict-ssl na wartość false.

Później znalazłem bezpieczne i działające rozwiązanie,

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

to działało doskonale i otrzymałem komunikat Happy Hacking!o sukcesie , nie ustawiając flagi strict-ssl na false.

Dinesh
źródło
2
Ja też właśnie wróciłem do korzystania z repozytorium NPM w wersji HTTP (w przeciwieństwie do register.npmjs.org ), ponieważ mój służbowy serwer proxy powodował problemy (ponieważ działa jako MITM, powodując problemy z weryfikacją certyfikacji) Pewnego dnia zrozumiem wydałem certyfikat, ale potrzebowałem tylko pobrać pakiet, do cholery!
Robert Dundon
1
Pomyślałem, że mam już to ustawienie, ale kiedy przyjrzałem się bliżej, zamiast http ( register.npmjs.org ) miałem https . Zmieniono na http i zadziałało.
Ashish Bajpai
Dla mnie zrobiłem to, ale nie mogłem też używać, sudokiedy biegałem npm install aws-sdk. Uruchamianie sudo npm install aws-sdkspowodowało ten błąd.
Kyle Bridenstine
Otrzymałem ten sam błąd, co w tym poście, więc uruchomiłem npm config set strict-ssl falsei npm config set registry http://registry.npmjs.org/ nadal otrzymywałem błąd podczas uruchamiania, sudo npm install aws-sdkale kiedy upuściłem sudoczęść i po prostu uruchomiłem npm install aws-sdk, zadziałało.
Kyle Bridenstine
u mnie nic poza ustawieniem npm config set strict-ssl falsenie działa. Uważam, że jest to coś, co zespół node.jsi npmzespół powinni zbadać i udokumentować, wykonując odpowiednią pracę, jeśli nie da się tego naprawić.
RinoTom
23

co może się dziać, jeśli Twoja firma odszyfrowuje określony ruch i ponownie szyfruje go swoim certyfikatem (który prawdopodobnie masz już w swoim pęku kluczy lub zaufanych certyfikatach głównych)

jeśli używasz węzła 7 lub nowszego, stwierdziłem, że ta poprawka jest kompatybilna z node i node-gyp (w systemie Windows musisz to zrobić inaczej, ale w zasadzie wystarczy dodać tę zmienną środowiskową):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (w systemie Windows może być konieczne usunięcie cytatów - patrz komentarze)

plik pem może mieć wiele certyfikatów: https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

upewnij się, że twoje certyfikaty są w odpowiednim formacie PEM (potrzebujesz prawdziwych podziałów wierszy, a nie dosłownych \n)

Nie mogłem zmusić go do pracy ze ścieżkami względnymi ( .lub ~)

Ta poprawka w zasadzie mówi npm i node-gyp, aby używali sprawdzenia w zwykłych urzędach certyfikacji, ale także zezwalali na ten certyfikat, gdy go napotkają

Idealnie byłoby, gdybyś mógł korzystać z zaufanych certyfikatów systemu, ale niestety tak nie jest.

Jordania
źródło
Wspaniały. Głosuj za szczegółowym wyjaśnieniem. Pomógł mi lepiej zrozumieć. Niezłe informacje.
vissu
2
W systemie Windows ścieżka nie działała, dopóki nie usunąłem cudzysłowów.
Chris Anderson
1
Mam ten problem z powodu BlueCoat i co kilka miesięcy muszę odnosić się do Twojej odpowiedzi. Zdecydowanie lepsze rozwiązanie niż wyłączenie ścisłego SSL - dziękujemy!
Jordan Grey
1
Gdzie mogę znaleźć plik .pem w systemie Windows. Przeszukałem cały dysk twardy w poszukiwaniu pliku pem, który znalazł kilka poziomów w głębi Windows \ System32. Ale to nie działa
Sanchit Jain
10

Zmiana adresu URL repozytorium NPM na HTTP działa jako szybka poprawka, ale chciałem użyć HTTPS.

W moim przypadku pełnomocnik u mojego pracodawcy (ZScaler) powodował problemy (ponieważ działa jako MITM, powodując problemy z weryfikacją certyfikacji)

Zapomniałem, że znalazłem skrypt, który pomaga w tym i Git (do klonowania repozytoriów GitHub przez HTTPS miał ten sam problem) i rozwidliłem go do mojego użytku

Zasadniczo robi to dla git:

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

a dla Node dodaje proxy=http://gateway.zscaler.net:80/na końcuc:\Users\$USERNAME\npm\.npmrc

To rozwiązało problem.

Robert Dundon
źródło
2
Możesz chcieć sprawdzić, w której chmurze ZS jest skonfigurowana Twoja firma. Zasadniczo sprawdź ip.zscaler.comnazwę chmury i ustaw ją w adresie URL. Np .: jeśli jest napisane, zscalertwo.netzamień na następujący adres URL:gateway.zscalertwo.net
Rahul Bharadwaj
6

Po wypróbowaniu każdego rozwiązania, które znalazłem:

  • Wyłączanie ścisłego protokołu SSL: npm config set strict-ssl=false
  • Zmiana rejestru na http zamiast https: npm config set registry http://registry.npmjs.org/
  • Zmiana ustawień mojej kafejki: npm config set cafile /path/to/your/cert.pem
  • Przestań odrzucać nieznane urzędy certyfikacji: set NODE_TLS_REJECT_UNAUTHORIZED=0

Rozwiązaniem, które wydaje się teraz działać dla mnie najlepiej, jest użycie zmiennej środowiskowej NODE_EXTRA_CA_CERTS, która rozszerza istniejące CA zamiast zastępowania ich opcją cafile w pliku .npmrc. Możesz to ustawić, wpisując w swoim terminalu:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

Oczywiście ustawienie tej zmiennej za każdym razem może być denerwujące, więc dodałem ją do mojego profilu basha, aby była ustawiana za każdym razem, gdy otwieram terminal. Jeśli nie masz jeszcze ~/.bash_profilepliku, utwórz go. Następnie na końcu tego pliku dodaj export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem. Następnie usuń ustawienie cafile w pliku .npmrc.

RyanDay
źródło
Czwarta opcja była urokiem; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
tomdemuyt
5

Zaufaj mi, to zadziała dla Ciebie:

    npm config set registry http://registry.npmjs.org/  
Prashanth Keshanna
źródło
Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie. Proszę skonsultować Jak Odpowiedź aby przeczytać więcej o tym, jak odpowiedzi na pytania
Artog
4

Miał ten sam błąd. Wygląda na to, że jest to związane z certyfikatami SSL. Jeśli używasz NPM dla pakietów publicznych (nie potrzebujesz zabezpieczenia HTTPS), możesz wyłączyć ścisłą weryfikację klucza SSL za pomocą następującego polecenia.

Może to być najprostsza poprawka, jeśli chcesz tylko jednorazowo zainstalować kilka publicznie dostępnych pakietów.

npm config set strict-ssl=false
Jason Geiger
źródło
5
Istnieje nieodłączne ryzyko zrobienia tego, jeśli jesteś ofiarą nikczemnego ataku typu man-in-the-middle, pakiet może zostać zmodyfikowany podczas pobierania.
Alex KeySmith,
@AlexKeySmith Masz rację. Jednak szanse są dość niskie. Dla niektórych może to być jedyna opcja. Caveat Emptor
Jason Geiger
1

Miałem ten błąd, gdy próbowałem zaktualizować npm, ale miałem naprawdę starą wersję (1.3.6!) Zainstalowaną z yum w AWS Linux. Udało mi się ręcznie zainstalować nowszą wersję npm i wszystko zostało naprawione.

Drussey
źródło
0

Poniższy kod działał dla mnie idealnie tutaj, aby http zamiast https

npm config set registry http://registry.npmjs.org/  
Mohd Shariq
źródło
0

W moim przypadku w pewnym momencie ustawiłem konfigurację globalną tak, aby używała certyfikatu przeznaczonego dla projektu.

npm config list

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

Otworzyłem plik, usunąłem linię i npm installznowu pracowałem.

joels
źródło
0

otrzymałem poniższy błąd

PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-tracking> npm install vue npm ERR! kod UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! żądanie do https://registry.npmjs.org/vue nie powiodło się, powód: nie można uzyskać certyfikatu lokalnego wydawcy

npm ERR! Pełny dziennik tego przebiegu można znaleźć w: 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

Poniższe polecenie rozwiązało problem:

npm config set strict-ssl false
Chatrughan Prasad
źródło