npm ERR! código UNABLE_TO_GET_ISSUER_CERT_LOCALLY

118

Estou tentando todas as maneiras de criar um aplicativo de reação. Eu tentei com o maven e agora estou tentando com o sistema de compilação crate-react-app do Facebook Incubators.

Quando tentei executar o comando create-react-app my-appno ambiente npm, ele funcionou no meu sistema pessoal sem problemas. Mas quando tentei o mesmo comando no meu ambiente de trabalho, encontrei este erro no prompt de comando

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
fonte
1
Eu também não pude usar sudoquando corri npm install aws-sdk. A execução sudo npm install aws-sdkcausou esse erro para mim.
Kyle Bridenstine

Respostas:

296

Uma solução rápida de busca na internet foi npm config set strict-ssl false, felizmente funcionou. Mas, como parte do meu ambiente de trabalho, estou restrito a definir o sinalizador strict-ssl como falso.

Mais tarde, encontrei uma solução segura e funcional,

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

funcionou perfeitamente e recebi uma mensagem de sucesso Happy Hacking!ao não definir o sinalizador strict-ssl como falso.

Dinesh
fonte
2
Eu também, acabei de voltar a usar a versão HTTP do repositório NPM (em oposição a registry.npmjs.org ), já que meu proxy de trabalho estava causando problemas (pois atua como um MITM, causando problemas de verificação de certificação) Um dia eu vou descobrir o problema do certificado, mas eu só precisava baixar um pacote, droga!
Robert Dundon
1
Eu pensei, eu já tenho essa configuração, mas olhando mais de perto, eu tinha https em vez de http ( registry.npmjs.org ). Mudou para http e funcionou.
Ashish Bajpai
Para mim, eu fiz isso, mas também não poderia usar sudoquando corria npm install aws-sdk. A execução sudo npm install aws-sdkcausou esse erro para mim.
Kyle Bridenstine
Eu estava recebendo o mesmo erro mostrado neste post, então eu corri npm config set strict-ssl falsee npm config set registry http://registry.npmjs.org/ ainda estava recebendo o erro durante a execução, sudo npm install aws-sdkmas quando deixei cair a sudopeça e apenas executei npm install aws-sdkfuncionou.
Kyle Bridenstine
para mim, nada além da configuração de npm config set strict-ssl falsenão funciona. Acho que isso é algo que a equipe node.jse npmdeve examinar e documentar com uma solução alternativa adequada, se não for possível corrigir para eles.
RinoTom
23

o que pode estar acontecendo é que sua empresa descriptografa determinado tráfego e o criptografa novamente com seu certificado (que você provavelmente já tem em seu keychain ou certificados raiz confiáveis)

se você estiver usando o node 7 ou posterior, descobri que essa correção é compatível com node e node-gyp (para Windows, você precisará fazer isso de forma diferente, mas basicamente só precisa adicionar esta variável de ambiente):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (no Windows, pode ser necessário remover as aspas - veja os comentários)

o arquivo pem pode ter vários certificados: https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

certifique-se de que seus certificados estão no formato pem adequado (você precisa de quebras de linha reais, não literais \n)

Não consegui fazer funcionar com caminhos relativos ( .ou ~)

Essa correção basicamente diz ao npm e ao node-gyp para usar a verificação nas CAs regulares, mas também permite esse certificado quando ele se depara

Idealmente, você poderia usar os certificados confiáveis ​​do seu sistema, mas infelizmente não é o caso.

Jordânia
fonte
Ótimo. Vote a favor de sua explicação detalhada. Me ajudou a entender melhor. Boa informação.
vissu
2
No Windows, o caminho não funcionava a menos que eu removesse as aspas.
Chris Anderson
1
Tenho esse problema devido ao BlueCoat e preciso consultar sua resposta a cada poucos meses. Definitivamente, uma solução melhor do que desativar o SSL estrito - obrigado!
Jordan Gray,
1
Onde posso encontrar o arquivo .pem no Windows. Eu pesquisei todo o disco rígido em busca do arquivo pem e encontrei alguns níveis dentro do Windows \ System32. Mas não está funcionando
Sanchit Jain
10

Alterar a URL do repositório NPM para HTTP funciona como uma solução rápida, mas eu queria usar HTTPS.

No meu caso, o proxy do meu empregador (ZScaler) estava causando problemas (pois atua como um MITM, causando problemas de verificação de certificação)

Esqueci que encontrei um script que ajuda com isso e Git (para clonar repositórios GitHub via HTTPS teve o mesmo problema) e bifurcou-o para meu uso

Basicamente, ele faz o seguinte para git:

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

e para Node, adiciona proxy=http://gateway.zscaler.net:80/ao final dec:\Users\$USERNAME\npm\.npmrc

Isso resolveu o problema para mim.

Robert Dundon
fonte
2
Você pode querer verificar em qual nuvem ZS sua empresa está configurada. Basicamente, verifique ip.zscaler.como nome da nuvem e defina-o na URL. Por exemplo: se disser zscalertwo.net, substitua pelo seguinte URL:gateway.zscalertwo.net
Rahul Bharadwaj
6

Depois de experimentar todas as soluções que pude encontrar:

  • Desativando SSL estrito: npm config set strict-ssl=false
  • Alterando o registro para http em vez de https: npm config set registry http://registry.npmjs.org/
  • Mudando minha configuração de café: npm config set cafile /path/to/your/cert.pem
  • Pare de rejeitar CAs desconhecidos: set NODE_TLS_REJECT_UNAUTHORIZED=0

A solução que parece estar funcionando melhor para mim agora é usar a variável de ambiente NODE_EXTRA_CA_CERTS que estende os CAs existentes ao invés de substituí-los pela opção cafile em seu arquivo .npmrc. Você pode defini-lo digitando isto em seu terminal:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

Claro, definir essa variável todas as vezes pode ser irritante, então eu adicionei ao meu perfil do bash para que seja definida toda vez que eu abrir o terminal. Se você ainda não tem um ~/.bash_profilearquivo, crie um. Então, no final desse arquivo, adicione export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem. Em seguida, remova a configuração cafile em seu .npmrc.

RyanDay
fonte
A quarta opção era um encanto; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
tomdemuyt
5

Acredite em mim, isso vai funcionar para você:

    npm config set registry http://registry.npmjs.org/  
Prashanth Keshanna
fonte
Embora este link possa responder à pergunta, é melhor incluir as partes essenciais da resposta aqui e fornecer o link para referência. As respostas somente com link podem se tornar inválidas se a página vinculada mudar. Consulte Como responder para ler mais sobre como responder a perguntas
Artog
4

Teve o mesmo erro. Parece que está relacionado a certificados SSL. Se você estiver usando NPM para pacotes públicos (não precisa da segurança de HTTPS), você pode desligar a validação de chave SSL estrita com o seguinte comando.

Esta pode ser a correção mais simples se você estiver apenas tentando instalar alguns pacotes disponíveis publicamente uma vez.

npm config set strict-ssl=false
Jason Geiger
fonte
5
Há um risco inerente de fazer isso. Se você for vítima de um nefasto ataque man-in-the-middle, o pacote poderá ser modificado durante o download.
Alex KeySmith
@AlexKeySmith Você está certo. No entanto, as chances são muito baixas. Esta pode ser a única opção para alguns. Caveat Emptor
Jason Geiger
1

Eu tive este erro quando tentei atualizar o npm, mas tinha uma versão muito antiga (1.3.6!) Instalada do yum no AWS Linux. Consegui instalar manualmente uma versão mais recente do npm e tudo foi corrigido.

Drussey
fonte
0

O código abaixo funcionou perfeitamente para mim aqui, faça http apenas em vez de https

npm config set registry http://registry.npmjs.org/  
Mohd Shariq
fonte
0

No meu caso, em algum momento eu defini minha configuração global para usar um certificado destinado a um projeto.

npm config list

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

Abri o arquivo, retirei a linha e npm installtrabalhei novamente.

joels
fonte
0

obteve o erro abaixo

PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-horas-tracking> npm install vue npm ERR! código UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! errno UNABLE_TO_GET_ISSUER_CERT_LOCALLY npm ERR! a solicitação para https://registry.npmjs.org/vue falhou, motivo: impossível obter o certificado do emissor local

npm ERR! Um registro completo dessa execução pode ser encontrado em: 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-horas-tracking> npm ERR!
C: \ Users \ chpr \ AppData \ Roaming \ npm-cache_logs \ 2020-07-29T03_22_40_225Z-debug.log

O comando abaixo resolveu o problema:

npm config set strict-ssl false
Chatrughan Prasad
fonte