Cuando intento instalar un paquete con npm, no funciona. Después de una larga espera, finalmente obtengo 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 navego a la misma URL en mi navegador web (Google Chrome), se carga bien (ver nota al pie). https://registry.npmjs.org/coffee-script
¿Qué va mal?
Si bien uso un proxy https, estoy seguro de que este no es el problema. He configurado la variable de entorno https_proxy
(según la guía del usuario de npm ). Sé que la variable de entorno es correcta, porque el administrador de paquetes de Python la pip
sigue correctamente.
Creo que el problema está relacionado con los certificados SSL, porque si descargo esa URL con wget
, obtengo 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.
También solía obtener errores de certificado SSL en mi navegador web, hasta que instalé el certificado 'npmCA' como una 'autoridad de certificación raíz confiable' en las Opciones de Internet del Panel de control (captura de pantalla )
Editar: probé una solución insegura según https://npmjs.org/doc/config.html#strict-ssl
npm set strict-ssl false
Sin embargo, todavía se agota 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
Respuestas:
TL; DR : simplemente ejecute esto y no deshabilite su seguridad:
Reemplazar certificados existentes
o extender certificados existentes
Establezca esta variable de entorno para extender certificados predefinidos:
NODE_EXTRA_CA_CERTS
a"<path to certificate file>"
Historia completa
Tuve que trabajar con npm, pip, maven, etc., detrás de un firewall corporativo bajo Windows, no es divertido. Intentaré mantener esta plataforma agnóstica / consciente siempre que sea posible.
HTTP_PROXY y HTTPS_PROXY
HTTP_PROXY
&HTTPS_PROXY
son variables de entorno que utilizan muchos software para saber dónde está su proxy. Bajo Windows, muchos software también usan el proxy especificado por su sistema operativo, lo cual es algo totalmente diferente. Eso significa que puede hacer que Chrome (que usa el proxy especificado en sus Opciones de Internet) se conecte bien 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 se vería así:Pero obtienes un 403 que sugiere que no estás autenticado con tu proxy. Si se trata de una autenticación básica en el proxy, querrá establecer la variable de entorno en algo de la forma:
El temido NTLM
Existe 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 el que rechaza su solicitud. Ese código me atormentó durante más tiempo hasta que después de mucho tiempo en Google, supe que mi proxy usaba autenticación NTLM . La autenticación básica HTTP no fue suficiente para satisfacer cualquier proxy que mis señores corporativos hubieran instalado. Recurrí al uso de Cntlm en mi máquina local (no autenticado), luego hice que manejara la autenticación NTLM con el proxy ascendente. Luego tuve que decirles a todos los programas que no podían hacer NTLM que usaran mi máquina local como proxy, que generalmente es tan simple como configurar
HTTP_PROXY
yHTTPS_PROXY
. De lo contrario, para uso de npm (como sugiere @Agus):"Necesitamos descifrar todo el tráfico HTTPS porque los virus"
Después de que esta configuración había estado tarareando (torpemente) durante aproximadamente un año, los señores corporativos decidieron cambiar el poder. No solo eso, ¡sino que ya no usaría NTLM! Un mundo nuevo y valiente, sin duda. Pero debido a que esos creadores de software malicioso ahora distribuían malware a través de HTTPS, la única forma en que podían protegernos a nosotros, los pobres usuarios inocentes, era hacer un intermediario en cada conexión para buscar amenazas incluso antes de que nos alcanzaran. Como puede imaginar, me invadió la sensación de seguridad.
Para abreviar la historia, el certificado autofirmado debe instalarse en npm para evitar
SELF_SIGNED_CERT_IN_CHAIN
:Alternativamente, el
NODE_EXTRA_CA_CERTS
variable de entorno se puede establecer en el archivo de certificado.Creo que eso es todo lo que sé sobre cómo hacer que npm funcione detrás de un proxy / firewall. Que alguien lo encuentre útil.
Editar : Es una sugerencia muy común desactivar HTTPS para este problema mediante el uso de un registro o configuración HTTP
NODE_TLS_REJECT_UNAUTHORIZED
. Estas no son buenas ideas porque se está abriendo a más ataques man-in-the-middle o de redireccionamiento. Una rápida falsificación de sus registros DNS en la máquina que realiza la instalación del paquete y se encontrará confiando en los paquetes desde cualquier lugar. Puede parecer mucho trabajo hacer que HTTPS funcione, pero es muy recomendable. Cuando usted es el responsable de permitir la entrada de código que no es de confianza en la empresa, comprenderá por qué.Edición 2 : tenga en cuenta esa configuración
npm config set cafile <path>
tenga hace que npm solo use los certificados proporcionados en ese archivo, en lugar de extender los existentes con él.Si desea extender los certificados existentes (por ejemplo, con un certificado de la empresa), utilizar la variable de entorno
NODE_EXTRA_CA_CERTS
para vincular al archivo es el camino a seguir y puede ahorrarle muchos problemas. Vea cómo-agregar-autoridad-certificado-personalizada-ca-to-nodejsfuente
=
npm config set cafile "<path to your certificate file>"
Este problema se solucionó para mí usando la versión http del repositorio:
fuente
resolvió el problema para mí. En este caso, tanto mi agente como el depositario de artefactos están detrás de una subred privada en la nube de AWS.
fuente
Estoy teniendo el mismo problema, superé el uso
Además información en node-doc
fuente
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:
wget https://registry.npmjs.org/coffee-script --ca-certificate=./DigiCertHighAssuranceEVRootCA.crt
para solucionar el problema de wgetnpm config set cafile /path/to/DigiCertHighAssuranceEVRootCA.crt
para configurar el certificado raíz para su programa npm.puede descargar el certificado raíz desde:
https://www.digicert.com/CACerts/DigiCertHighAssuranceEVRootCA.crt
Darse cuenta: Un programa diferente puede usar una forma diferente de administrar el certificado raíz, así que no mezcle el navegador con otros.
Análisis:
solucionemos su
wget https://registry.npmjs.org/coffee-script
problema primero. tu fragmento dice:Esto significa que su programa wget no puede verificar
https://registry.npmjs.org
el certificado. Hay dos razones que pueden causar este problema:Entonces, la solución se establece explícitamente en el certificado raíz para
https://registry.npmjs.org
. Podemos usar openssl para asegurarnos de que el motivo a continuación es el problema.Prueba
openssl s_client -host registry.npmjs.org -port 443
en la línea de comando y obtendremos este mensaje (las primeras líneas):Esta línea
verify error:num=20:unable to get local issuer certificate
se asegura de quehttps://registry.npmjs.org
no empaque el certificado raíz. Así que GoogleDigiCert High Assurance EV Root CA
root Certificate.fuente
Estaba teniendo el mismo problema. Después de investigar un poco, me di cuenta de que muchos scripts posteriores / previos a la instalación intentarían instalar varias dependencias y, en ocasiones, se utilizan repositorios específicos. Una mejor manera es deshabilitar la verificación de certificados para el módulo https para nodejs que funcionó para mí.
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"
De esta pregunta
fuente
El problema radica en su 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 omite el proxy cuando usa el navegador Chrome. Entonces no hay verificación.
Hay algunas soluciones a este problema. Pero todo implica que confía en el proveedor del paquete.
Soluciones posibles:
http://
acceso que puede eludir su proxy. Eso es un poco peligroso, porque el intermediario puede inyectar malware en sus descargas.wget
sugiere que utilice una bandera--no-check-certificate
. Esto agregará una directiva de proxy a su solicitud. El proxy, si comprende la directiva, no comprueba si el certificado del servidor está verificado por una autoridad y pasa la solicitud. Quizás haya una configuración con npm que haga lo mismo que la bandera wget.fuente
establezca la siguiente propiedad:
"conjunto de configuración npm estricto-ssl falso"
fuente
Si tiene control sobre el servidor proxy o puede convencer a sus administradores de TI, puede intentar excluir explícitamente registry.npmjs.org de la inspección SSL. Esto debería evitar que los usuarios del servidor proxy tengan que deshabilitar la comprobación de SSL estricto o instalar una nueva CA raíz.
fuente
Esto es lo que puede hacer para evitar npm y usar hilo en la máquina de ventanas.
fuente