Błąd SSL: CERT_UNTRUSTED podczas używania polecenia npm

159

Próbuję zainstalować strukturę ekspresową za pomocą polecenia npm, ale pojawia się następujący błąd.

komunikat o błędzie to

E:\myFindings\nodejs_programs\node>npm install -g express
npm http GET https://registry.npmjs.org/express
npm ERR! Error: SSL Error: CERT_UNTRUSTED
npm ERR!     at ClientRequest.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\request\main.js:409:26)
npm ERR!     at ClientRequest.g (events.js:185:14)
npm ERR!     at ClientRequest.EventEmitter.emit (events.js:88:17)
npm ERR!     at HTTPParser.parserOnIncomingClient [as onIncoming] (http.js:1445:7)
npm ERR!     at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:111:23)
npm ERR!     at CleartextStream.socketOnData [as ondata] (http.js:1356:20)
npm ERR!     at CleartextStream.CryptoStream._push (tls.js:396:27)
npm ERR!     at SecurePair.cycle (tls.js:751:20)
npm ERR!     at EncryptedStream.CryptoStream.write (tls.js:131:13)
npm ERR!     at Socket.ondata (stream.js:38:26)
npm ERR!  [Error: SSL Error: CERT_UNTRUSTED]
npm ERR! You may report this log at:
npm ERR!     <http://github.com/isaacs/npm/issues>
npm ERR! or email it to:
npm ERR!     <npm-@googlegroups.com>

npm ERR! System Windows_NT 6.1.7601
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "-g" "express"
npm ERR! cwd E:\myFindings\nodejs_programs\node
npm ERR! node -v v0.8.0
npm ERR! npm -v 1.1.32
npm ERR! message SSL Error: CERT_UNTRUSTED
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     E:\myFindings\nodejs_programs\node\npm-debug.log
npm ERR! not ok code 0

pomóż mi rozwiązać

Sudip7
źródło

Odpowiedzi:

316

Możesz ominąć https za pomocą poniższych poleceń:

npm config set strict-ssl false

lub ustaw adres URL rejestru z https lub http, jak poniżej:

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

Jednak osobiście uważam, że ominięcie https nie jest prawdziwym rozwiązaniem, ale możemy go użyć jako obejścia.

ramesh.mimit
źródło
13
Nieco niebezpieczne, ale ładne rozwiązanie w prawdziwym świecie.
Bernard Saucier
1
Czy można usunąć opcję obejścia po użyciu powyższego polecenia. Jeśli tak, w jaki sposób możemy usunąć opcję obejścia?
wysypka111
1
@ rash111 Zakładam, że ustawienie tego na true powinno działać:npm config set strict-ssl true
Gromer
10
„ładne rozwiązanie w prawdziwym świecie” ... To wcale nie jest miłe, chyba że lubisz być hakowany.
trusktr
Dzięki! Jest to również konieczne w przypadku używania npm na maszynie wirtualnej VirtualBox z systemem Ubuntu 14.04. Jest to jedyny sposób na naprawienie błędu CERT, który występuje nawet wtedy, gdy rejestr jest skonfigurowany "http://registry.npmjs.org/"jako domyślny.
Prahlad Yeri
53
npm ERR! node -v v0.8.0
npm ERR! npm -v 1.1.32

Zaktualizuj instalację node.js.Następujące polecenia powinny to zrobić ( stąd ):

sudo npm cache clean -f
sudo npm install -g n
sudo n stable

Edycja: ok, jeśli naprawdę masz dobry powód, aby uruchomić starą wersję oprogramowania, npm set ca nullrozwiążesz problem. Stało się tak, ponieważ wbudowany certyfikat npm wygasł na przestrzeni lat.

Alex
źródło
3
Obecnie używam powyżej dwóch wersji, o co ci chodzi, nie mogłem zrozumieć
Sudip7
1
Chodzi mi o to: te wersje są stare, a wbudowane w nie certyfikaty npm już wygasły. Jeśli zainstalujesz najnowsze wersje, będą działać.
Alex
1
Próbowałem zainstalować najnowszą wersję i napotkałem problem podczas instalacji. Ktoś w SO zasugerował mi zainstalowanie powyższej wersji, została zainstalowana poprawnie, ale teraz npm nie działa.
Podaję
24
Okazało się, że działa sudo npm cache clean -fwtedy sudo npm install -g ndaje CERT_UNTRUSTED błąd po drugim poleceniu.
fuzzi
2
Zgodnie z odnośnikiem: „Ta metoda aktualizacji węzła jest teraz niestabilna i nie powinna być używana. Najlepszym sposobem zarządzania wersjami Node.js jest użycie NVM: Zarządzanie wersjami węzła. !”
chus
22

Miałem ten sam problem iw końcu zrozumiałem, że moja wersja węzła jest stara. Na przykład możesz zainstalować aktualną wersję aktywnego węzła LTS w Ubuntu, wykonując następujące czynności:

sudo apt-get update
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install nodejs -y

Instrukcje instalacji dla innych wersji i systemów można znaleźć pod następującym linkiem:

https://github.com/nodesource/distributions/blob/master/README.md

majran
źródło
Pracowałem nad Ubuntu 14.
Vignesh Chinnaiyan
9

Chyba mam powód powyższego błędu. Jest to korporacyjny serwer proxy (wirtualna sieć prywatna) zapewniany do pracy w sieci klienta. Bez tego połączenia często napotykałem ten sam problem, czy to maven build, czy npm install.

Sudip7
źródło
5

Jeśli korzystasz z korporacyjnego serwera proxy, wypróbuj to ustawienie dla npm z serwerem proxy Twojej firmy:

npm --https-proxy=http://proxy.company.com install express -g
Michael Oakley
źródło
3
Jeśli pracujesz w dużej organizacji, często występuje serwer proxy między Tobą a Internetem. Czasami powoduje ten problem. (Zrobiło to dla mnie) Jednym z możliwych testów byłoby wyjęcie komputera z sieci i npm install express z domu.
Michael Oakley,
2

Odkąd natknąłem się na post przez google:

Spróbuj npm cigo użyć , będzie to dużo więcej niż plik npm install.

Z instrukcji:

Krótko mówiąc, główne różnice między używaniem npm install i npm ci to:

  • Projekt musi mieć istniejący pakiet-lock.json lub npm-shrinkwrap.json.
  • Jeśli zależności w blokadzie pakietu nie są zgodne z tymi w package.json, npm ci zakończy działanie z błędem, zamiast aktualizować blokadę pakietu.
  • npm ci może instalować tylko całe projekty na raz: za pomocą tego polecenia nie można dodawać poszczególnych zależności.
  • Jeśli moduł node_modules jest już obecny, zostanie automatycznie usunięty, zanim npm ci rozpocznie instalację.
  • Nigdy nie zapisze do package.json ani żadnej z blokad pakietów: instalacje są zasadniczo zamrożone.
HerrWalter
źródło
1

Zainstaluj ponownie węzeł, a następnie zaktualizuj npm.

Najpierw usunąłem node

apt-get purge node

Następnie zainstaluj węzeł zgodnie z dystrybucją. Dokumenty tutaj .

Następnie

npm install npm@latest -g
jplattus
źródło