Nodejs 4 parece introducir un error UNABLE_TO_GET_ISSUER_CERT_LOCALLY para los usuarios detrás de un firewall de la empresa.
Npm install y otros comandos ya no funcionan después de la actualización de Nodejs 0.12 a Nodejs 4 o 5. Después de la discusión en los foros de npm, la idea actual es que esto puede ser un problema en Node en lugar de Npm.
Consulte https://github.com/npm/npm/issues/9580.
también
https://github.com/npm/npm/issues/10125
https://github.com/npm/npm/issues/9906
Este problema impide que nuestro equipo actualice a Nodejs 4 o 5. Cualquier sugerencia es bienvenida.
Gracias
npm config establece estricto-ssl falso
Si recibe ese error, lo más probable es que sea un problema con su proxy. El error en sí solo significa que un certificado TLS en la cadena está firmado por una CA desconocida, presumiblemente el certificado que usa su proxy.
v4.xy v5.x son más estrictas que la v0.12, pero la mayoría de la gente lo consideraría algo bueno.
@bricss , sí, lo intenté y también always-auth = false. No ayuda, pero gracias por la sugerencia.
@bnoordhius , sí, comenzando en v4.x, tengo entendido que necesitaremos configurar el cafile para incluir la cadena de certificados de nuestra empresa. Lo hice usando npm así:
npm config set cafile="C:\\mycacert.pem"
mycacert.pem es un archivo que contiene varios certificados X509 con formato PEM en este formato:
-----BEGIN CERTIFICATE-----
MIIEczCCA1ugAwIBAgIBADANBgkqhkiG9w0BAQQFAD..AkGA1UEBhMCR0Ix
EzARBgNVBAgTClNvbWUtU3RhdGUxFDASBgNVBAoTC0..0EgTHRkMTcwNQYD
etc...
It8una2gY4l2O//on88r5IWJlm1L0oA8e4fR2yrBHX..adsGeFKkyNrwGi/
7vQMfXdGsRrXNGRGnX+vWDZ3/zWI0joDtCkNnqEpVn..HoX
-----END CERTIFICATE-----
También intenté configurar una matriz de CA siguiendo la documentación aquí: https://docs.npmjs.com/misc/config.
Con el nivel de registro subido a un nivel tonto.
npm install -ddd
este es el primer error que me sale
gyp verb created nodedir C:\Users\myname\.node-gyp\4.2.2
gyp http GET https://nodejs.org/download/release/v4.2.2/node-v4.2.2-headers.tar.gz
gyp WARN install got an error, rolling back install
gyp verb command remove [ '4.2.2' ]
gyp verb remove using node-gyp dir: C:\Users\myname\.node-gyp
gyp verb remove removing target version: 4.2.2
gyp verb remove removing development files for version: 4.2.2
gyp ERR! configure error
gyp ERR! stack Error: unable to get local issuer certificate
gyp ERR! stack at Error (native)
gyp ERR! stack at TLSSocket.<anonymous> (_tls_wrap.js:1003:38)
gyp ERR! stack at emitNone (events.js:67:13)
gyp ERR! stack at TLSSocket.emit (events.js:166:7)
gyp ERR! stack at TLSSocket._finishInit (_tls_wrap.js:570:8)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
Supongo que nuestro certificado raíz o intermedio no se pasa a openSSL. No veo ningún error sobre una carga defectuosa o un formato no válido. Modifiqué npmlibconfigload-cafile.js para confirmar que se estaba llamando y cargando mi cafile. más allá de eso, no he profundizado en el código.
Sería útil más salida de error. ¿Hay alguna forma de ver las declaraciones de depuración del módulo openssl que utiliza el nodo?
Gracias
gyp http GET https://nodejs.org/download/release/v4.2.2/node-v4.2.2-headers.tar.gz
Eso es porque node-gyp no usa la configuración de proxy de npm, o al menos no la configuración de cafile. Una solicitud de extracción a node-gyp que honre process.env.npm_config_cafile
probablemente será aceptada.
Alternativamente, si acepta los riesgos, env NODE_TLS_REJECT_UNAUTHORIZED npm whatever
evitará la verificación de CA por completo.
@bnoordhuis ¡ gracias por la información! Estamos hablando de nuestras opciones.
process.env.npm_config_cafile
@bnoordhuis ¿sabes si esto alguna vez se planteó?
@voltagex No lo creo.
todavía estamos interesados en una solución para esto. Seguimos usando Nodejs v0.12
PR para node-gyp: https://github.com/nodejs/node-gyp/pull/844
Para su información, dependiendo de lo que esté intentando instalar, es posible que un módulo en sí no sea malo con ssl / cafiles. electron-prebuilt es un gran ejemplo. Tiene un script install.js que configura la descarga de un archivo y luego no busca ninguna configuración. Peor aún, la descarga de electrones busca una opción "estrictaSSL", pero la precompilación de electriones no pasa una.
TLDR: sus problemas con los certificados autofirmados pueden no estar relacionados con npm o node-gyp: pero el uso de npm puede ser la forma en que experimente ese error.
¡Gracias @bricss! Trabajado como un encanto
¿Hay alguna razón para mantener este abierto?
@bricss , sí, eso también funciona para mí .. saludos
Estoy detrás de un proxy HTTPS corporativo.
Tengo el problema incluso cuando agrego los certificados de CA raíz corporativos al sistema (en /etc/pki/tls/certs/ca-bundle.crt
en Fedora 23).
npm update -g
npm ERR! Linux 3.16.7-35-default
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "update" "-g"
npm ERR! node v4.4.2
npm ERR! npm v2.15.0
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>
npm ERR! Please include the following file with any support request:
npm ERR! /npm-debug.log
Para pasar más allá de este problema, tengo que configurar la configuración para usar el cafile
npm config set cafile=/etc/pki/tls/certs/ca-bundle.crt -g
Después de eso, el _UNABLE_TO_GET_ISSUER_CERT_LOCALLY_ desaparece, pero tengo otro problema:
npm update -g
npm ERR! Linux 3.16.7-35-default
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "update" "-g"
npm ERR! node v4.4.2
npm ERR! npm v2.15.0
npm ERR! Hostname/IP doesn't match certificate's altnames: "Host: registry.npmjs.org. is not in the cert's altnames: DNS:a.sni.fastly.net, DNS:a.sni.global-ssl.fastly.net"
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! <https://github.com/npm/npm/issues>
npm ERR! Please include the following file with any support request:
npm ERR! /npm-debug.log
La única solución alternativa es strict-ssl=false
. Pero esa no es una solución bonita ...
Solo agrego mis experiencias con este problema.
Estaba teniendo este problema al intentar instalar las dependencias para el inicio rápido de angular2 . También estoy detrás de un proxy y comencé tratando de establecer la configuración del proxy y strict-ssl=false
en mi archivo .npmrc pero sin éxito después de hacerlo.
El error que vi se estaba generando durante un comando postinstall 'typings install':
> typings install
typings ERR! message Unable to read typings for "es6-shim". You should check the
entry paths in "es6-shim.d.ts" are up to date
typings ERR! caused by Unable to connect to "https://raw.githubusercontent.com/D
efinitelyTyped/DefinitelyTyped/7de6c3dd94feaeb21f20054b9f30d5dabc5efabd/es6-shim
/es6-shim.d.ts"
typings ERR! caused by unable to get local issuer certificate
Terminé teniendo que agregar el archivo .typingsrc en la misma ubicación que mi archivo .npmrc con las siguientes líneas agregadas:
proxy = http: //proxy.address : proxy.port
rechazarUnauthorized = falso
Esto me ayudó a superar el error unable to get local issuer certificate
y continuó con la multa de instalación.
Esto puede no ser relevante, pero pensé que lo agregaría aquí, ya que puede ser útil para alguien, ¡me tomó unos días descubrirlo!
Para cerrar, esto debería solucionarse con el nuevo indicador --cafile
para node-gyp que se lanzó en node.js v4.4.3 y v5.10.0. Si configura cafile
en su .npmrc
, node-gyp debería recogerlo automáticamente cuando se invoca a través de npm.
Solo agregue un comentario aquí, para configurar el uso de cafile
:
npm config set cafile=/Path/to/your/file.pem
Donde el contenido del archivo .pem
es similar a este (texto sin formato con marcas de certificado BEGIN / END y contenido base64)
Para generar el archivo .pem
partir de un archivo .crt
válido, se puede utilizar lo siguiente:
openssl x509 -inform der -in /Path/to/the.crt -out /Path/to/the/file.pem
Paso bastante tiempo averiguando eso.
npm config set cafile = "C: mycacert.pem"
funcionó para mí, gracias @greenmountains
Usamos artificial, por lo que mi proxy se ve así:
proxy = nulo
https-proxy = URL del proxy
http-prox = misma URL de proxy
estricto-ssl = falso
registro = URL del artefacto
esto me haría esperar, así que los cambié a:
proxy = URL del proxy
https-proxy = URL del proxy
http-prox = misma URL de proxy
estricto-ssl = falso
cafile = C: cafile.pem
por lo tanto, pasará por una repetición normal, agregando un proxy normal y un archivo de certificado.
No es el mejor desde entonces, debería pasar por el registro privado, pero al menos pude instalar el paquete que quería.
Esto también funciona: npm config set registry http://registry.npmjs.org/
Tenemos una puerta de enlace de Internet segura que realiza una inspección SSL, utilizando la opción a continuación para especificar el certificado raíz utilizado por la puerta de enlace segura que resolvió el problema.
npm config set ca =
Node.js 7.3.0 agregó la variable de entorno NODE_EXTRA_CA_CERTS para que pueda pasar el archivo de certificado de CA. Es más seguro que deshabilitar la verificación del certificado mediante NODE_TLS_REJECT_UNAUTHORIZED.
$ export NODE_EXTRA_CA_CERTS=[your CA certificate file path]
Esta solución funciona conmigo para node-gyp. npm config set cafile
no funciona.
Sigo viendo esto debido a una dependencia de nodo-gyp y mi empresa usa certificados autofirmados.
Mi archivo .npmrc:
strict-ssl=false
cafile=C:/Tools/mycerts.pem
registry=https://registry.npmjs.org/
proxy=companyproxy
http-proxy=companyproxy
https-proxy=companyproxy
NODE_TLS_REJECT_UNAUTHORIZED=0
También probé varias permutaciones con estos, con npm y con hilo:
ca=
contra NODE_EXTRA_CA_CERTS=C:/Tools/mycerts.pem
contra cafile=C:/Tools/mycerts.pem
con y sin NODE_TLS_REJECT_UNAUTHORIZED
A continuación, mágicamente funcionó _una vez_ con yarn
y luego eliminé el paquete 1 npm más tarde y comenzó a fallar nuevamente y no he logrado que funcione desde entonces (¿tal vez una actualización del equipo de red?)
strict-ssl=false
NODE_EXTRA_CA_CERTS=C:/Tools/mycerts.pem
registry=https://registry.npmjs.org/
proxy=companyproxy
http-proxy=companyproxy
https-proxy=companyproxy
Info:
node_modules
se almacena en C:\Tools
A continuación se muestra mi seguimiento de la pila si alguien puede ayudar ...
error C:\Development\projects\myproject\node_modules\sharp: Command failed.
Exit code: 1
Command: node-gyp rebuild
Arguments:
Directory: C:\Development\projects\myproject\node_modules\sharp
Output:
C:\Development\projects\myproject\node_modules\sharp>if not defined npm_config_node_gyp (node "C:\Tools\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild ) else (node "" rebuild
)
gyp info it worked if it ends with ok
gyp info using [email protected]
gyp info using [email protected] | win32 | x64
gyp info spawn C:\Users\username\.windows-build-tools\python27\python.exe
gyp info spawn args [ 'C:\\Tools\\nvm\\v8.9.1\\node_modules\\npm\\node_modules\\node-gyp\\gyp\\gyp_main.py',
gyp info spawn args 'binding.gyp',
gyp info spawn args '-f',
gyp info spawn args 'msvs',
gyp info spawn args '-G',
gyp info spawn args 'msvs_version=2015',
gyp info spawn args '-I',
gyp info spawn args 'C:\\Development\\projects\\myproject\\node_modules\\sharp\\build\\config.gypi',
gyp info spawn args '-I',
gyp info spawn args 'C:\\Tools\\nvm\\v8.9.1\\node_modules\\npm\\node_modules\\node-gyp\\addon.gypi',
gyp info spawn args '-I',
gyp info spawn args 'C:\\Users\\username\\.node-gyp\\8.9.1\\include\\node\\common.gypi',
gyp info spawn args '-Dlibrary=shared_library',
gyp info spawn args '-Dvisibility=default',
gyp info spawn args '-Dnode_root_dir=C:\\Users\\username\\.node-gyp\\8.9.1',
gyp info spawn args '-Dnode_gyp_dir=C:\\Tools\\nvm\\v8.9.1\\node_modules\\npm\\node_modules\\node-gyp',
gyp info spawn args '-Dnode_lib_file=C:\\Users\\username\\.node-gyp\\8.9.1\\<(target_arch)\\node.lib',
gyp info spawn args '-Dmodule_root_dir=C:\\Development\\projects\\myproject\\node_modules\\sharp',
gyp info spawn args '-Dnode_engine=v8',
gyp info spawn args '--depth=.',
gyp info spawn args '--no-parallel',
gyp info spawn args '--generator-output',
gyp info spawn args 'C:\\Development\\projects\\myproject\\node_modules\\sharp\\build',
gyp info spawn args '-Goutput_dir=.' ]
sharp: https://github.com/lovell/sharp-libvips/releases/download/v8.6.1/libvips-8.6.1-win32-x64.tar.gz download failed: unable to get local issuer certificate
gyp: Call to 'node -e "require('./binding').download_vips()"' returned exit status 1 while in binding.gyp. while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (C:\Tools\nvm\v8.9.1\node_modules\npm\node_modules\node-gyp\lib\configure.js:336:16)
gyp ERR! stack at emitTwo (events.js:126:13)
gyp ERR! stack at ChildProcess.emit (events.js:214:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
gyp ERR! System Windows_NT 10.0.15063
gyp ERR! command "C:\\Tools\\nodejs\\node.exe" "C:\\Tools\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Development\projects\myproject\node_modules\sharp
También intenté descargar el código fuente de ese paquete en el GitLab interno de mi empresa y configurar mi env para que busque allí, pero aún falla con el mismo error unable to get local issuer certificate
:(
Tuve el mismo problema en Windows 10.
abra Windows PowerShell e ingrese el siguiente comando:
npm config set registro http://registry.npmjs.org/
Entonces puede usar: npm install [su paquete] normalmente.
Yo uso seguir en Windows
SET NODE_TLS_REJECT_UNAUTHORIZED = 0
No pude entender por qué cafile no funciona
Encontré una solución como "npm config set registry http://registry.npmjs.org/ "
Comentario más útil