VPN, proxy y filtros

Los certificados de un proxy corporativo rompen las herramientas de Terminal en un Mac

Algunas redes de empresa inspeccionan el tráfico HTTPS. El proxy firma entonces el tráfico con un certificado raíz de la empresa, y las herramientas que no confían en él se detienen.

Se aplica a: todas las versiones actuales de macOS. NODE_USE_SYSTEM_CA de Node.js requiere Node.js 22.19, 24.6 o posterior.Revisado: 29 de octubre de 2026

Síntomas

  • npm o Node muestran «self-signed certificate in certificate chain» o «unable to get local issuer certificate».
  • Git muestra «SSL certificate problem» en los remotos HTTPS.
  • Safari abre el sitio, pero curl o Python no.
  • Los errores solo ocurren en la red o la VPN de la empresa.

Causas probables

  • Inspección TLS. El proxy sustituye el certificado del sitio por uno firmado por un certificado raíz de la empresa.
  • Almacenes de confianza separados. Safari usa el llavero de macOS. Muchas herramientas de línea de comandos usan su propia lista de certificados de confianza.
  • Falta un ajuste de proxy. Las herramientas de Terminal no siempre usan el proxy del sistema. Necesitan variables de proxy o su propio ajuste.

Cómo comprobarlo

  1. Muestra la cadena de certificados que envía el servidor. Mira el emisor del certificado superior.

    openssl s_client -connect registry.npmjs.org:443 -servername registry.npmjs.org -showcerts </dev/null
  2. Muestra la negociación TLS (handshake) con curl.

    curl -v https://registry.npmjs.org/ -o /dev/null
  3. Busca el certificado raíz de la empresa en Acceso a Llaveros. Busca el nombre de tu empresa en el llavero Sistema.

  4. Muestra las variables de proxy de tu shell.

    env | grep -i proxy

Cómo solucionarlo

  1. Pide a tu equipo de TI el certificado raíz de la empresa como archivo PEM. No confíes en un certificado de origen desconocido.

  2. Para las herramientas de Node.js, indica el archivo en NODE_EXTRA_CA_CERTS. Vuelve a iniciar la herramienta después de configurarlo.

    export NODE_EXTRA_CA_CERTS=~/certs/company-root.pem
  3. Con Node.js 22.19, 24.6 o posterior, puedes usar los certificados en los que confía el llavero.

    export NODE_USE_SYSTEM_CA=1
  4. Para npm, configura el archivo de certificado.

    npm config set cafile ~/certs/company-root.pem
  5. Para Git, configura el archivo de certificado.

    git config --global http.sslCAInfo ~/certs/company-root.pem
  6. Para curl, indica el archivo con --cacert.

    curl --cacert ~/certs/company-root.pem https://example.com
  7. Configura el proxy de la empresa para las herramientas de Terminal si tu equipo de TI usa uno.

    export https_proxy=http://proxy.example.com:8080
  8. No desactives la verificación de certificados, por ejemplo con strict-ssl o http.sslVerify. Eso hace que la conexión no sea segura.

Con Kilobat

  1. La comprobación de conexión de Kilobat muestra un fallo de TLS como una capa propia. También indica si el proxy del sistema funciona donde la ruta directa no.

    kilobat why https://registry.npmjs.org/
  2. Añade --app para usar las variables de proxy del entorno de esa app.

    kilobat why https://registry.npmjs.org/ --app process:node

Preguntas

¿Por qué Safari funciona cuando npm falla?

Safari confía en los certificados del llavero de macOS. npm usa los certificados que incluye Node.js, salvo que añadas el certificado de la empresa.

¿Es seguro poner strict-ssl en false?

No. Desactiva toda verificación de certificados para el registro. Añade en su lugar el certificado raíz de la empresa.

Fuentes

Fuentes revisadas el 29 de octubre de 2026. Las páginas man son las que se instalan con macOS; abre una con man <name> en Terminal.