recebendo erro: 'Erro: erro SSL: SELF_SIGNED_CERT_IN_CHAIN' enquanto estiver usando o npm

292

Estou usando o npm v1.0.104 / nó 0.6.12 no ubuntu - estou recebendo o erro copiado abaixo ao tentar instalar novos módulos via npm (testei o socket.io anteriormente usando http, não https embora e estou pensando se isso poderia resultaram no problema com npm / certificados não assinados). O erro aparece quando o npm tenta resolver o ' https://registry.npmjs.org URL ' '. Existe alguma maneira de ignorar o erro ou talvez localizar / adicionar o certificado a uma loja confiável para continuar usando o npm.

Qualquer insight sobre o que precisa ser feito para resolver o problema será apreciado (eu preferiria resolvê-lo através da configuração, em vez de reinstalar, se possível).

Erro: "Erro: Erro SSL: SELF_SIGNED_CERT_IN_CHAIN"

Mensagem completa:

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
ali haider
fonte
1
Não remova o SSL estrito. Ter um olhar para stackoverflow.com/a/16534065
nolim1t
15
Em 27 de fevereiro de 2014, o npm não suporta mais seus certificados autoassinados. Consulte a postagem do blog da npm ou a resposta recente abaixo para obter mais informações.
22814 Kevin Reilly
1
Caso você esteja tendo problemas com isso no AWS Elastic Beanstalk, uma solução está disponível aqui: stackoverflow.com/questions/22096459/…
Guillaume Flandre
1
nolim1t : isso não aborda a causa do problema e Kevin : os comandos na postagem do blog estão incompletos. Consulte stackoverflow.com/a/22099006/106302 para obter os comandos que funcionaram para mim.
Estamos todos Monica
1
@ali Altere a 'Resposta aceita' Esse problema está aparecendo devido a uma atualização npm, e não ao SSL. Desativar o SSL é MAU, e principalmente porque a resposta atualmente correta é atualizar o npm. A resposta de Kevin Reilly deve ser a resposta Aceita. Obrigado.
precisa saber é o seguinte

Respostas:

391

A execução do seguinte ajudou a resolver o problema:

npm config set strict-ssl false

Não posso comentar se isso causará outros problemas neste momento. Espero que ajude.

ali haider
fonte
39
executar "npm set config ca nula" em vez, ignorando erros de SSL é uma má idéia
alex
6
O @SnowInferno SSL também garante que você está falando com o real registry.npmjs.org. Alguém pode potencialmente instalar pacotes maliciosos.
adotout 13/01
58
Isso está imundo errado. Por que você está se incomodando em usar SSL, se toda vez que faz a única coisa que deve fazer, é desativada? "Sempre que ignorar um erro leva ao sucesso, os desenvolvedores farão exatamente isso."
precisa saber é
20
Por favor, não ignore os problemas de SSL, pois o erro existe por um motivo muito bom. Além disso, um pouco de pesquisa resultou no seguinte tweet, que aponta para a solução oficial do seu problema (atualização npm): twitter.com/npmjs/status/439279809307242496
Thomas Vervest
41
Meu problema foi causado por um proxy que eu estou atrás, "npm config set ca null" e 'npm config set ca ""' ainda me deram o mesmo erro, mas a remoção do SSL funcionou perfeitamente. Às vezes, as boas práticas não são tão importantes quanto o que realmente funciona.
Cory Schulz
220

Em 27 de fevereiro de 2014, o npm não suporta mais seus certificados autoassinados . As opções a seguir, conforme recomendado pelo npm, são as seguintes:

Atualize sua versão do npm

npm install npm -g --ca=""

- OU -

Diga à sua versão atual do npm para usar registradores conhecidos

npm config set ca ""

Atualização: o npm postou Mais ajuda com SELF_SIGNED_CERT_IN_CHAIN ​​e o npm com mais soluções específicas para diferentes ambientes



Você pode ou não precisar anexar sudoas recomendações.


Outras opções

Parece que as pessoas estão tendo problemas usando as recomendações do npm, então aqui estão algumas outras soluções em potencial.

Atualizar o próprio nó O
recebimento desse erro pode sugerir que você tenha uma versão mais antiga do nó, que naturalmente vem com uma versão mais antiga do npm. Uma solução é atualizar sua versão do Node. Essa é provavelmente a melhor opção, pois atualiza e corrige bugs e vulnerabilidades existentes.

O processo aqui depende de como você instalou o Node, seu sistema operacional e outros.

Update npm
Como você provavelmente chegou aqui ao tentar installum pacote, é possível que npm install npm -gisso ocorra com o mesmo erro. Se for esse o caso, use em updatevez disso. Como sugerido por Nisanth Sojan:

npm update npm -g

Atualizar alternativa do npm
Uma maneira de contornar o problema subjacente é usar registradores conhecidos, instalar e parar de usar registradores conhecidos. Como sugerido por jnylen:

npm config set ca ""
npm install npm -g
npm config delete ca
Kevin Reilly
fonte
10
Provavelmente, a solução mais fácil é fazer o download da versão mais recente do Nodejs, incluindo uma nova versão do npm em que esse problema foi resolvido. Nenhum dos comandos acima funcionou para mim.
Strille 28/02
1
Eu uso essa solução, já que é a primeira a não ignorar o ssl (configurando a verificação como false na configuração ou usando o http). Obrigado!
Hcpl 28/02
12
npm install npm -g também me dá o erro SELF_SIGNED_CERT_IN_CHAIN
Anders Bornholm
3
Se isso não funcionar, faça npm config set ca ""primeiro, depois atualize e desfaça a alteração na configuração. Veja: stackoverflow.com/a/22099006/106302
We Are All Monica
1
@Redsandro sudoaltera o usuário, o -gsinalizador define se deve ser instalado globalmente para esse usuário ou apenas no local node_modules.
Radek
68

Por enquanto, mudei o URL do registro de https para http. Como isso:

npm config set registry="http://registry.npmjs.org/"
Hermann
fonte
1
Caiu como uma luva para mim. Eu não queria perder a autoridade de certificação original ou forçá-la a ignorar erros de SSL.
SnowInferno
Funcionou perfeitamente. Obrigado!
muhammed basil
13
Desativar a segurança não pode ser a solução!
Alessandro Pezzato 28/02
1
Eu já havia usado isso anteriormente, mas, por algum motivo, retorná-lo para 'https: //' de 'http: //' fez o meu funcionar novamente.
kshreve
Depois de tentar tudo outra solução, este trabalho para mim finalmente :-)
Swapnil Kadu
49
npm config set strict-ssl false -g

Para salvá-lo globalmente

Robin
fonte
Fazendo isso dá-me o infame cb() never called!erro npm
Jeremy
Após essa configuração, estou geeting abaixo do erro npm ERR! código E401 npm ERR! Não é possível autenticar, é necessário: Negociar, NTLM npm ERR! Um log completo dessa execução pode ser encontrado em: npm ERR! C: \ BuildAgent \ npm-cache_logs \ 2019-06-24T10_23_46_563Z-debug.log
Shami Qureshi
31

Você precisa atualizar o 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

Pode ser necessário prefixar esses comandos com sudo .

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

Somos todos Monica
fonte
@ Oliver Salzburg: re. sua edição: no OS X, acho que não sudoé necessário, e apenas o prefixo do comando upgrade sudofuncionou bem para mim. YMMV.
Estamos todos Monica
Ah, isso funcionou para mim. Obrigado pelas instruções específicas sobre como desfazer a alteração na configuração (para que eu não tenha que desenterrá-la)!
28414 Matt
Interessante. Eu apenas fiz a edição depois de testar isso em um servidor Debian. Eu gosto da revisão atual embora;)
Der Hochstapler
Ubuntu / Debian requerem links adicionais, veja minha resposta abaixo.
Redsandro 28/02
2
Essa deve ser a solução aceita. Isso não desativa a segurança e é a solução "oficial" descrita no blog do npm.
Alessandro Pezzato 28/02
21

O erro SELF_SIGNED_CERT_IN_CHAIN significa que você possui um certificado autoassinado na cadeia de certificados, que basicamente não é confiável pelo sistema.

Se isso acontecer, basicamente algo suspeito está acontecendo; portanto, como as pessoas já comentaram, não é recomendável desabilitar apenas as verificações de certificado, mas uma abordagem melhor é entender qual é o problema e corrigir a causa.

Talvez isso esteja relacionado a:

  • endereço de repositório personalizado que não possui o certificado certo,

  • uma rede corporativa com proxy transparente.

    Se você possui um proxy da web corporativo, deve configurar as variáveis ​​de ambiente HTTP_PROXY/ apropriadas HTTPS_PROXYou configurá-las via npm:

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

    Consulte: Como configurar o Node.js e o Npm atrás de um proxy da Web corporativo

Se você confiar no host, poderá exportar o certificado autoassinado da cadeia e importá-lo para o sistema, para que seja marcado como confiável.

Isso pode ser conseguido verificando os certificados por (mude example.compara o repositório npm que está falhando com base no npm-debug.log):

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

salve o conteúdo do certificado (entre BEGINe END) no .crtarquivo para importá-lo.

Linux

Conforme sugestão , você pode adicionar um certificado exportado ao/etc/environment arquivo (Nó 7.4+), como:

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

CentOS

No CentOS 5, isso pode ser anexado ao /etc/pki/tls/certs/ca-bundle.crtarquivo, por exemplo

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: Para exportar apenas o primeiro certificado, remova g no início.

No CentOS 6, o arquivo de certificado pode ser copiado para /etc/pki/ca-trust/source/anchors/ .

Ubuntu / Debian

No Ubuntu / Debian, copie o arquivo CRT /usr/local/share/ca-certificates/ e execute:

sudo update-ca-certificates

Mac OS

No macOS, você pode executar:

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

janelas

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


Consulte também: npm - Solução de problemas - Erro SSL

kenorb
fonte
1
> Nesse caso, você precisa exportar o certificado autoassinado da cadeia e importá-lo para o sistema, para que seja marcado como confiável. - Faz truque para mim.
dmi3y
2
Ótimo! Também ajuda a adicionar NODE_EXTRA_CA_CERTS = / etc / pki / ca-trust / source / anchors / yourCerts.pem ao / etc / environment. Nó 7.4+ leva isso em conta
ph4r05
9

Colocar isso antes do comando parece funcionar NODE_TLS_REJECT_UNAUTHORIZED=0. ex:NODE_TLS_REJECT_UNAUTHORIZED=0 npm ...

Seria melhor descobrir como fazer o nó ver o certificado autoassinado como válido. A sugestão strict-ssl acima não funcionou para mim por algum motivo. Se você entende as implicações de segurança e precisa de uma solução rápida temporária, foi o que encontrei em alguns problemas aleatórios do github durante a pesquisa do erro no Google.

Adam Lane
fonte
1
para Windows, use "set NODE_TLS_REJECT_UNAUTHORIZED = 0". E então funciona como um encanto !!
Tarun
8

O repositório não suporta mais certificados autoassinados. Você precisa atualizar 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

Você precisa abrir uma nova sessão do terminal para usar a atualização npm.

Fonte: Esta foi originalmente uma edição da resposta de jnylen . Embora as diretrizes digam "Congratulamo-nos com todas as edições construtivas, mas as tornemos substanciais", a edição foi rejeitada devido a "Esta edição muda muito na postagem original; o significado ou a intenção original da postagem seriam perdidos". Eu acho que a comunidade prefere uma resposta separada.

Redsandro
fonte
Isso funcionou para mim. No entanto, eu não precisava do último comando: sudo ln -s /usr/bin/nodejs /usr/bin/node.
absynce
1
Provavelmente depende se você instalou a partir dos repositórios oficiais do Ubuntu, um repositório de terceiros (para uma versão mais recente) ou se compilou (para a versão mais recente).
Redsandro 28/03
7

Para aqueles que em um mac com o mesmo problema e instalaram o npm via homebrew :

brew uninstall npm

então

brew install npm

Funciona para mim no osx (10.9.1)

EDIT : Você pode precisar brew updateantes de instalar o npm. Você também pode fazer uma brew upgradeapós a atualização do homebrew. Também pode ser útil executar brew doctorse você tiver outros problemas.

Patrick
fonte
4

Solução rápida e limpa (testada em Linux) (após o fatídico em 27 de fevereiro de 2014)


Desinstalar npm

npm rm npm -g

Instale o npm (o novo URL é www.npmjs.org em vez de npmjs.org )

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

Dica : como instalar o node.js no linux https://stackoverflow.com/a/22099363/333061

Igor Parra
fonte
O comando não funciona mais devido a um redirecionamento 301, mas você ainda pode digitar https://www.npmjs.org/install.shno seu navegador e fazer o download antes de executá-lo manualmente.
22414 svassr
Ou executar onda com a bandeira -L
Evan Cordell
curl https://npmjs.org/install.shcomando anterior está redirecionando para https://www.npmjs.org/install.shé por isso que curl https://www.npmjs.org/install.sh | shfunciona perfeitamente. está bem para instalar a partir de agora pouco padawan. :)
Igor Parra
2

Desativar o SSL parece ser uma péssima idéia. O blog da npm explica que eles não oferecem mais suporte ao certificado autoassinado. Eles sugerem a atualização do npm via npm install npm -g, mas é claro que recebi o mesmo erro SELF_SIGNED_CERT_IN_CHAIN. Acabei de atualizar o nó, que atualizou o npm junto com ele. O procedimento exato depende de como você instalou o nó em primeiro lugar.

Jeremiah Orr
fonte