variable start securepair log false error err cert_untrusted npm

start - ¿Cómo reparar un error de certificado SSL al ejecutar Npm en Windows?



npm start log (6)

Cuando intento instalar un paquete con npm, no funciona. Después de una larga espera, finalmente obtuve un error: no se pudo establecer el socket de tunelización, sutatusCode = 403 ''.

$ npm install coffee-script npm http GET https://registry.npmjs.org/coffee-script npm http GET https://registry.npmjs.org/coffee-script npm http GET https://registry.npmjs.org/coffee-script npm ERR! Error: tunneling socket could not be established, sutatusCode=403 npm ERR! at ClientRequest.onConnect (c:/Program Files/nodejs/node_modules/npm/node_modules/request/tunnel.js:148:19) npm ERR! at ClientRequest.g (events.js:193:14) npm ERR! at ClientRequest.EventEmitter.emit (events.js:123:20) npm ERR! at Socket.socketOnData (http.js:1393:11) npm ERR! at TCP.onread (net.js:403:27)

Sin embargo, cuando busco la misma URL en mi navegador web (Google Chrome) se carga bien (ver nota al pie). https://registry.npmjs.org/coffee-script

¿Qué está mal?

Si bien uso un proxy https, estoy seguro de que este no es el problema. Configuré la variable de entorno https_proxy (según la guía del usuario npm). Sé que la variable de entorno es correcta porque Python del administrador de paquetes de Python la sigue correctamente.

Creo que el problema se relaciona con los certificados SSL, porque si descargo esa URL con wget , recibo un error explícito sobre los certificados.

$ wget https://registry.npmjs.org/coffee-script SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc syswgetrc = c:/progra~1/wget/etc/wgetrc --2012-12-17 12:14:07-- https://registry.npmjs.org/coffee-script Resolving corpproxy... 10.254.215.35 Connecting to corpproxy|10.254.215.35|:8080... connected. ERROR: cannot verify registry.npmjs.org''s certificate, issued by `/C=US/ST=CA/L=Oakland/O=npm/OU=npm Certificate Authority/CN=npmCA/[email protected]'': Unable to locally verify the issuer''s authority. To connect to registry.npmjs.org insecurely, use `--no-check-certificate''. Unable to establish SSL connection.

¿Cómo puedo arreglar esto? Sin comprometer la seguridad.

Solía ​​obtener errores de certificado SSL en mi navegador web también, hasta que instalé el certificado ''npmCA'' como ''autoridad de certificación raíz de confianza'' en las Opciones de Internet del Panel de control (captura de pantalla) )

Editar: Intenté una solución insegura por https://npmjs.org/doc/config.html#strict-ssl

npm set strict-ssl false

Sin embargo, todavía agota el tiempo con el mismo error

$ npm install coffee-script npm http GET https://registry.npmjs.org/coffee-script npm http GET https://registry.npmjs.org/coffee-script npm http GET https://registry.npmjs.org/coffee-script npm ERR! Error: tunneling socket could not be established, sutatusCode=403


El problema radica en tu proxy. Debido a que el proveedor de ubicación de su paquete de instalación crea su propio certificado y no compra uno verificado de una autoridad aceptada, su proxy no permite el acceso al host de destino. Supongo que omites el proxy cuando utilizas el navegador Chrome. Entonces no hay verificación.

Hay algunas soluciones a este problema. Pero todos implican que confías en el proveedor del paquete.

Soluciones posibles:

  1. Como se menciona en otras respuestas, puede hacer un acceso http:// que puede omitir su proxy. Eso es un poco peligroso, porque el hombre en el medio puede inyectar malware en sus descargas.
  2. El wget sugiere usar una bandera --no-check-certificate . Esto agregará una directiva proxy a su solicitud. El proxy, si comprende la directiva, no verifica si el certificado de los servidores es verificado por una autoridad y pasa la solicitud. Quizás haya una configuración con npm que haga lo mismo que la bandera de wget.
  3. Configura su proxy para aceptar CA npm. No conozco tu proxy, así que no puedo darte una pista.

Estaba teniendo el mismo problema. Después de algunas excavaciones, me di cuenta de que muchos scripts de post / preinstalación intentaban instalar varias dependencias y algunas veces se usaban repositorios específicos. Una mejor manera es deshabilitar la comprobación de certificados para el módulo https para nodejs que funcionó para mí.

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"

De esta pregunta


Este problema se solucionó al usar la versión http del repositorio:

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


Estoy teniendo el mismo problema, supero el uso

npm config set proxy http://my-proxy.com:1080 npm config set https-proxy http://my-proxy.com:1080

Además información en node-doc


Me encontré con este problema SSL similar hace unos días. El problema es que su npm no establece el certificado raíz para el certificado utilizado por https://registry.npmjs.org .

Soluciones:

  1. Utilice wget https://registry.npmjs.org/coffee-script --ca-certificate=./DigiCertHighAssuranceEVRootCA.crt para reparar el problema de wget
  2. Use la npm config set cafile /path/to/DigiCertHighAssuranceEVRootCA.crt para establecer el certificado raíz para su programa npm.

puede descargar el certificado raíz de: https://www.digicert.com/CACerts/DigiCertHighAssuranceEVRootCA.crt

Aviso: Los diferentes programas pueden usar una forma diferente de administrar el certificado raíz, por lo tanto, no mezcle el navegador con otros.

Análisis:

wget https://registry.npmjs.org/coffee-script primero su problema wget https://registry.npmjs.org/coffee-script . tu fragmento dice:

ERROR: cannot verify registry.npmjs.org''s certificate, issued by /C=US/ST=CA/L=Oakland/O=npm/OU=npm Certificate Authority/CN=npmCA/[email protected]: Unable to locally verify the issuer''s authority.

Esto significa que su programa wget no puede verificar el certificado de https://registry.npmjs.org . Hay dos razones que pueden causar este problema:

  1. Su programa wget no tiene el certificado raíz de este dominio. El certificado raíz generalmente se envía con el sistema.
  2. La dosis de dominio no empaqueta el certificado raíz en su certificado.

Entonces, la solución está explícitamente establecida como certificado raíz para https://registry.npmjs.org . Podemos usar openssl para asegurarnos de que el motivo sea el siguiente.

intente: openssl s_client -host registry.npmjs.org -port 443 en la línea de comandos y obtendremos este mensaje (primero varias líneas):

CONNECTED(00000003) depth=1 /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3 verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/C=US/ST=California/L=San Francisco/O=Fastly, Inc./CN=a.sni.fastly.net i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3 i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA ---

Esta línea verify error:num=20:unable to get local issuer certificate se asegura de que https://registry.npmjs.org no empaquete el certificado raíz. Así que Google Google DigiCert High Assurance EV Root CA Certificate.


TL; DR : solo ejecuta esto y no deshabilites tu seguridad:

#For Windows/MacOS/Linux npm config set cafile "<path to your certificate file>" #Check the ''cafile'' npm config get cafile

Historia completa

He tenido que trabajar con npm, pip, maven, etc. detrás de un firewall corporativo en Windows, no es divertido. Trataré de mantener esta plataforma agnóstica / consciente siempre que sea posible.

HTTP_PROXY y HTTPS_PROXY

HTTP_PROXY y HTTPS_PROXY son variables de entorno utilizadas por muchos programas para saber dónde está tu proxy. En Windows, una gran cantidad de software también utiliza su proxy especificado del sistema operativo, que es algo totalmente diferente. Eso significa que puedes tener Chrome (que usa el proxy especificado en tus Opciones de Internet) conectando a la URL, pero npm, pip, maven, etc. no funcionan porque usan HTTPS_PROXY (excepto cuando usan HTTP_PROXY - ver más adelante). Normalmente, la variable de entorno sería algo así como:

http://proxy.example.com:3128

Pero obtienes un 403 que sugiere que no estás siendo autenticado contra tu proxy. Si se trata de autenticación básica en el proxy, querrá establecer la variable de entorno en algo de la forma:

http://user:[email protected]:3128

El temido NTLM

Hay un código de estado HTTP 407 (se requiere autenticación de proxy), que es la forma más correcta de decir que es el proxy en lugar del servidor de destino que rechaza su solicitud. Ese código me atormentó por mucho tiempo hasta después de mucho tiempo en Google, y descubrí que mi proxy usaba la autenticación NTLM . La autenticación básica de HTTP no fue suficiente para satisfacer el proxy que mis superiores corporativos habían instalado. Cntlm a usar Cntlm en mi equipo local (no autenticado), y luego tuve que manejar la autenticación NTLM con el proxy ascendente. Luego tuve que decirle a todos los programas que no podían hacer que NTLM utilizara mi máquina local como proxy, que generalmente es tan simple como configurar HTTP_PROXY y HTTPS_PROXY . De lo contrario, para el uso npm (como sugiere @Agus):

npm config set proxy http://proxy.example.com:3128 npm config set https-proxy http://proxy.example.com:3128

"Necesitamos descifrar todo el tráfico HTTPS porque los virus"

Después de que esta configuración había estado zumbando (ruidosamente) durante aproximadamente un año, los jefes supremos corporativos decidieron cambiar el proxy. ¡No solo eso, sino que ya no usará NTLM! Un mundo nuevo y valiente para estar seguro. Pero debido a que los escritores de software malicioso ahora estaban entregando malware a través de HTTPS, la única forma en que podían proteger a los pobres usuarios inocentes era conectar todas las conexiones en busca de amenazas antes incluso de que llegaran a nosotros. Como se puede imaginar, me invadió la sensación de seguridad.

Para abreviar, el certificado autofirmado debe instalarse en npm para evitar SELF_SIGNED_CERT_IN_CHAIN :

npm config set cafile "<path to certificate file>"

Creo que eso es todo lo que sé sobre cómo hacer que npm trabaje detrás de un proxy / firewall. Que alguien lo encuentre útil.

Editar : es una sugerencia muy común desactivar HTTPS para este problema, ya sea mediante el uso de un registro HTTP o configurando NODE_TLS_REJECT_UNAUTHORIZED . Estas no son buenas ideas porque te estás abriendo a más ataques de hombre en el medio o de redirección. Una rápida parodia de sus registros DNS en la máquina que realiza la instalación del paquete y se encontrará confiando en paquetes desde cualquier lugar. Puede parecer mucho trabajo hacer que HTTPS funcione, pero es muy recomendable. Cuando eres el responsable de permitir que el código no sea de confianza en la empresa, entenderás por qué.