npm ERR! código UNABLE_TO_GET_ISSUER_CERT_LOCALLY

118

Estoy probando todas las formas de crear una aplicación de reacción. Lo he intentado con maven y ahora lo estoy intentando con el sistema de compilación crate-react-app de Facebook Incubators.

Cuando intenté ejecutar el comando create-react-app my-appen el entorno npm, funcionó en mi sistema personal sin problemas. Pero cuando probé el mismo comando en mi entorno de trabajo, encontré este error en el símbolo del sistema

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
fuente
1
Tampoco pude usar sudocuando corrí npm install aws-sdk. Correr me sudo npm install aws-sdkprovocó este error.
Kyle Bridenstine

Respuestas:

296

Una solución rápida de la búsqueda en Internet fue npm config set strict-ssl false, afortunadamente, funcionó. Pero como parte de mi entorno de trabajo, estoy restringido a establecer el indicador estricto-ssl en falso.

Más tarde encontré una solución segura y funcional,

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

esto funcionó a la perfección y recibí un mensaje de éxito Happy Hacking!al no establecer el indicador estricto-ssl en falso.

Dinesh
fuente
2
Yo también, simplemente volví a usar la versión HTTP del repositorio NPM (a diferencia de registry.npmjs.org ), ya que mi proxy de trabajo estaba causando problemas (ya que actúa como un MITM, causando problemas de verificación de certificación). solucionar el problema del certificado, pero solo necesitaba descargar un paquete, ¡maldita sea!
Robert Dundon
1
Pensé, ya tengo esta configuración, pero cuando miré más de cerca, tenía https en lugar de http ( registro.npmjs.org ). Se cambió a http y funcionó.
Ashish Bajpai
Para mí hice esto pero tampoco pude usar sudocuando corrí npm install aws-sdk. Correr me sudo npm install aws-sdkprovocó este error.
Kyle Bridenstine
Recibía el mismo error que se muestra en esta publicación, así que corrí npm config set strict-ssl falsey, npm config set registry http://registry.npmjs.org/ pero todavía recibía el error al ejecutar, sudo npm install aws-sdkpero cuando dejé caer la sudopieza y simplemente la ejecuté npm install aws-sdk, funcionó.
Kyle Bridenstine
para mí nada más que la configuración de npm config set strict-ssl falseno funciona. Creo que esto es algo que el equipo node.jsy el npmequipo deberían analizar y documentar con una solución adecuada si no se puede solucionar para ellos.
RinoTom
23

lo que puede estar sucediendo es que su empresa descifra cierto tráfico y lo vuelve a cifrar con su certificado (que probablemente ya tenga en su llavero o certificados raíz de confianza)

si está utilizando el nodo 7 o posterior, he encontrado que esta solución es compatible con node y node-gyp (para Windows deberá hacer esto de manera diferente, pero básicamente solo necesita agregar esta variable de entorno):

export NODE_EXTRA_CA_CERTS="absolute_path_to_your_certificates.pem" (en Windows es posible que deba eliminar las comillas; consulte los comentarios)

el archivo pem puede tener varios certificados: https://nodejs.org/api/cli.html#cli_node_extra_ca_certs_file

asegúrese de que sus certificados estén en el formato pem adecuado (necesita saltos de línea reales, no literal \n)

Parece que no puedo hacer que funcione con rutas relativas ( .o ~)

Esta solución básicamente le dice a npm y node-gyp que usen la verificación contra las CA regulares, pero también permitan este certificado cuando lo encuentre

Idealmente, podría utilizar los certificados de confianza de su sistema, pero desafortunadamente este no es el caso.

Jordán
fuente
Excelente. Vota a favor tu explicación detallada. Me ayudó a comprender mejor. Buena información.
vissu
2
En Windows, la ruta no funcionó a menos que elimine las comillas.
Chris Anderson
1
Tengo este problema debido a BlueCoat y tengo que hacer referencia a su respuesta cada pocos meses. Definitivamente una mejor solución que deshabilitar SSL estricto, ¡gracias!
Jordan Grey
1
¿Dónde puedo encontrar el archivo .pem en Windows? Busqué en todo el disco duro el archivo pem y encontré algunos niveles dentro de Windows \ System32. Pero no está funcionando
Sanchit Jain
10

Cambiar la URL del repositorio de NPM a HTTP funciona como una solución rápida, pero quería usar HTTPS.

En mi caso, el poder de mi empleador (ZScaler) estaba causando problemas (ya que actúa como un MITM, causando problemas de verificación de certificación)

Olvidé que encontré un script que ayuda con esto y Git (para clonar repositorios de GitHub a través de HTTPS tenía el mismo problema) y lo bifurqué para mi uso

Básicamente, hace lo siguiente para git:

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

y para Node, se suma proxy=http://gateway.zscaler.net:80/al final dec:\Users\$USERNAME\npm\.npmrc

Eso me resolvió el problema.

Robert Dundon
fuente
2
Es posible que desee verificar en qué nube ZS está configurada su empresa. Básicamente, busque ip.zscaler.comel nombre de la nube y configúrelo en la URL. Por ejemplo: si dice zscalertwo.net, reemplácelo con la siguiente URL:gateway.zscalertwo.net
Rahul Bharadwaj
6

Después de probar todas las soluciones que pude encontrar:

  • Desactivación de SSL estricto: npm config set strict-ssl=false
  • Cambiar el registro a http en lugar de https: npm config set registry http://registry.npmjs.org/
  • Cambiar la configuración de mi café: npm config set cafile /path/to/your/cert.pem
  • Deje de rechazar CA desconocidas: set NODE_TLS_REJECT_UNAUTHORIZED=0

La solución que parece estar funcionando mejor para mí ahora es usar la variable de entorno NODE_EXTRA_CA_CERTS que extiende las CA existentes en lugar de reemplazarlas con la opción cafile en su archivo .npmrc. Puede configurarlo ingresando esto en su terminal:NODE_EXTRA_CA_CERTS=path/to/your/cert.pem

Por supuesto, configurar esta variable cada vez puede ser molesto, así que la agregué a mi perfil de bash para que se establezca cada vez que abra la terminal. Si aún no tiene un ~/.bash_profilearchivo, cree uno. Luego, al final de ese archivo, agregue export NODE_EXTRA_CA_CERTS=path/to/your/cert.pem. Luego, elimine la configuración de cafile en su .npmrc.

RyanDay
fuente
La cuarta opción fue un encanto; process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
tomdemuyt
5

Créame, esto funcionará para usted:

    npm config set registry http://registry.npmjs.org/  
Prashanth Keshanna
fuente
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden dejar de ser válidas si cambia la página enlazada. Consulte Cómo responder para leer más sobre cómo responder preguntas
Artog
4

Tuvo el mismo error. Parece que está relacionado con los certificados SSL. Si está utilizando NPM para paquetes públicos (no necesita la seguridad de HTTPS), puede desactivar la validación de clave SSL estricta con el siguiente comando.

Esta podría ser la solución más simple si solo está buscando instalar algunos paquetes disponibles públicamente una vez.

npm config set strict-ssl=false
Jason Geiger
fuente
5
Existe un riesgo inherente de hacer esto, si usted es víctima de un infame ataque man-in-the-middle, el paquete podría modificarse mientras lo descarga.
Alex KeySmith
@AlexKeySmith Tienes razón. Sin embargo, las probabilidades son bastante bajas. Esta podría ser la única opción para algunos. Caveat Emptor
Jason Geiger
1

Tuve este error cuando intenté actualizar npm, pero tenía una versión realmente antigua (¡1.3.6!) Instalada desde yum en AWS Linux. Pude instalar manualmente una versión más nueva de npm y todo se solucionó.

drusa
fuente
0

El siguiente código me funcionó perfectamente aquí, haga http solo en lugar de https

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

En mi caso, en algún momento configuré mi configuración global para usar un certificado que estaba destinado a un proyecto.

npm config list

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

Abrí el archivo, eliminé la línea y volví a npm installtrabajar.

joels
fuente
0

obtuve el siguiente error

PS C: \ Users \ chpr \ Documents \ GitHub \ vue-nwjs-hours-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! la solicitud a https://registry.npmjs.org/vue falló, motivo: no se pudo obtener el certificado del emisor local

npm ERR! Puede encontrar un registro completo de esta ejecución en: 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

El siguiente comando resolvió el problema:

npm config set strict-ssl false
Chatrughan Prasad
fuente