Compartir a través de


Solución de problemas relacionados con Zscaler (versión preliminar)

En este artículo se proporcionan pasos de solución de problemas para cuando la PAC CLI (interfaz de línea de comandos de Power Apps) pac code add-data-source falla repetidamente detrás de un Zscaler o servidores proxy similares que inspeccionan SSL.

Zscaler es una plataforma de seguridad basada en la nube que realiza la inspección de Secure Socket Layer/Transport Layer Security (SSL/TLS) mediante el descifrado y el reencriptado del tráfico HTTPS. Actúa como un "man-in-the-middle" (por diseño) para inspeccionar el contenido en busca de amenazas. Consulte Visión general de la inspección SSL de Zscaler

Síntomas

En la tabla siguiente se enumeran los síntomas que pueden indicar problemas relacionados con Zscaler.

Síntoma Ejemplo de mensaje o patrón
Error de captura TypeError: fetch failed / [AddDataSource.ServiceCall.GetConnector.Failure] ... fetch failed
Solicitud vacía fallida Error: Request failed: {} (sin cuerpo)
Protocolo de enlace TLS / Errores de certificado UNABLE_TO_VERIFY_LEAF_SIGNATURE / SELF_SIGNED CERT IN CHAIN (si la depuración está habilitada)
Funciona fuera de la red corporativa El comando se realiza correctamente cuando se desconecta de Zscaler

Lista de comprobación de requisitos previos

Antes de empezar, verifique lo siguiente:

  1. La CLI de Power Platform más reciente está instalada. Actualícelo si no está seguro.
  2. Usted está autenticado en el entorno correcto. Utilice el comando pac auth create y pac auth list.
  3. La versión de Node.js instalada es mayor o igual a la v22. Las versiones anteriores tienen un comportamiento de confianza diferente más estricto.
  4. Puede leer el almacén de certificados de usuario. No hay restricciones que bloqueen los perfiles.
  5. La directiva corporativa permite agregar la ENTIDAD de certificación raíz de Zscaler a la confianza del usuario para las herramientas de desarrollo.

Pasos para solucionar problemas

Use la información de las secciones siguientes para solucionar problemas.

Paso 1: Validar la línea base

Para eliminar causas no relacionadas con un proxy, ejecute el pac env who comando .

Si este comando se ejecuta correctamente, la conectividad general es correcta; Los errores se aíslan en las llamadas al origen de datos.

Paso 2: Confirmar que Zscaler está instalado

Ejecute este comando para asegurarse de que el certificado Zscaler existe en el almacén.

Get-ChildItem Cert:\CurrentUser\Root |
    Where-Object { $_.Subject -like "*Zscaler*" } |
    Select-Object Subject, Thumbprint

Si Zscaler inserta su certificado, verá un emisor de Zscaler en lugar de Microsoft.

Nota:

Cuando un proxy como Zscaler intercepta el tráfico HTTPS, reemplaza el certificado de servidor original por su propio certificado firmado por una ENTIDAD de certificación raíz corporativa. Esto permite que el proxy descifre, inspeccione y vuelva a cifrar el tráfico. Los navegadores confían en esto porque la entidad de certificación raíz corporativa está instalada en el almacén de certificados de confianza del sistema. Consulte Funcionamiento de la interceptación HTTPS.

Paso 3: Exportación de la CA raíz de Zscaler a PEM

Para exportar la Autoridad de Certificación Raíz (CA) de Zscaler a Privacy Enhanced Mail (PEM), ejecute este comando.

$cert = Get-ChildItem Cert:\CurrentUser\Root |
    Where-Object { $_.Subject -like "*Zscaler*" } |
    Select-Object -First 1

$pem = @(
    '-----BEGIN CERTIFICATE-----'
    [System.Convert]::ToBase64String(
        $cert.RawData,
        [System.Base64FormattingOptions]::InsertLineBreaks
    )
    '-----END CERTIFICATE-----'
) -join "`n"

Set-Content -Path "$env:USERPROFILE\.zscaler-root-ca.pem" -Value $pem

Resultado: ~\.zscaler-root-ca.pem creado.

Precaución

Proteja el archivo PEM: Asegúrese de que se establezcan correctamente los permisos de archivo del archivo PEM en el certificado exportado. Si un actor malintencionado puede reemplazar este archivo, podría interceptar el tráfico HTTPS de los procesos de Node.js. Endurecimiento recomendado (quita la herencia y luego concede acceso de solo lectura):

icacls "$env:USERPROFILE\.zscaler-root-ca.pem" /inheritance:r /grant:r "$env:USERNAME:(R)"

Si la eliminación de la herencia entra en conflicto con la política corporativa o desencadena controles de Endpoint Protection, omita /inheritance:r y solo conceda permiso de lectura explícito.

icacls "$env:USERPROFILE\.zscaler-root-ca.pem" /grant:r "$env:USERNAME:(R)"

Almacén de certificados de Windows y formato PEM

El Get-ChildItem Cert:\CurrentUser\Root comando accede al Almacén de certificados de Windows a través del proveedor de certificados de PowerShell. PEM es un formato codificado en Base64 para los certificados. La conversión es necesaria porque Node.js requiere formato PEM mientras Windows almacena certificados en formato DER (reglas de codificación distintivo). Consulte Proveedor de Certificados de PowerShell y Formato PEM RFC.

Comando de Windows icacls

icacls (Lista de Control de Acceso de Integridad (Integrity Control Access Control List)) es una utilidad de línea de comandos de Windows que se utiliza para administrar permisos de archivos. Los parámetros usados: /inheritance:r quita los permisos heredados, /grant:r reemplaza los permisos existentes por acceso de solo lectura para el usuario especificado. Consulte la documentación de icacls.

Paso 4: Indicar a Node.js que confíen en el certificado

Ejecute el siguiente script para indicar a Node.js confiar en el certificado.

[System.Environment]::SetEnvironmentVariable('NODE_EXTRA_CA_CERTS', "$env:USERPROFILE\.zscaler-root-ca.pem", 'User')

Cierre & vuelva a abrir el terminal o VS Code para propagarse.

Precaución

Impacto en el ámbito: Esta NODE_EXTRA_CA_CERTS Variable de entorno afecta a todos los procesos de Node.js ejecutados por la cuenta de usuario. Si se manipula el archivo PEM, cada aplicación Node.js confía en la entidad de certificación modificada, no solo en la CLI de PAC. Compruebe el hash de archivo periódicamente y asegúrelo.

NODE_EXTRA_CA_CERTS variable de entorno

Esta variable de entorno Node.js especifica un archivo que contiene entidades de certificación más de confianza más allá de la lista integrada de Node.js(lote de CA de Mozilla). Cuando se establece, Node.js confía en los certificados firmados por entidades de certificación tanto en la lista integrada como en el archivo especificado. Consulte Variables de entorno de la CLI de Node.js

Validación de la corrección

Siga estos pasos para validar que la corrección se aplicó correctamente en los pasos 3-4 antes de pasar al paso 5.

  1. Confirme que se creó el archivo PEM y existe en la ubicación esperada.

     Test-Path "$env:USERPROFILE\.zscaler-root-ca.pem" # Expect True
    
  2. Compruebe que la variable de entorno se estableció correctamente y devuelve la ruta de acceso al archivo PEM.

    [System.Environment]::GetEnvironmentVariable(
        'NODE_EXTRA_CA_CERTS',
        'User'
    )
    
  3. Compruebe que el archivo PEM tiene contenido válido en lugar de estar vacío o dañado

    Get-Content "$env:USERPROFILE\.zscaler-root-ca.pem" -TotalCount 2
    # First line should be: -----BEGIN CERTIFICATE-----
    

Paso 5: Volver a ejecutar el comando

Intente volver a ejecutar el comando.

pac code add-data-source -a <apiId> -c <connectionId> [-t <tableName>] [-d <dataset|siteUrl>]

Espere que la recuperación del conector se complete correctamente en lugar de que se produzca un error de captura.

(Evite) Solución alternativa no segura

Una prueba final que se debe evitar es deshabilitar temporalmente la validación de TLS.

Esta solución alternativa obliga a Node.js a aceptar cualquier certificado presentado, incluidos los certificados autofirmados o suplantados. Esto elimina todas las garantías de autenticidad e integridad de HTTPS. Expone sesiones a ataques man-in-the-middle (MITM), captura de credenciales y manipulación de contenido. Nunca use fuera de una sesión de diagnóstico de corta duración.

Advertencia

Riesgo de seguridad: Esto deshabilita completamente la validación de certificados SSL para todas las conexiones HTTPS de Node.js en la sesión actual. Cualquier atacante con acceso a la red puede realizar ataques MITM. Utiliza esta solución alternativa SOLO para un diagnóstico puntual que demuestre que la confianza en el certificado es la causa principal. Nunca te comprometas con los scripts; nunca los uses en entornos de producción; elimínalo inmediatamente después de las pruebas.

$env:NODE_TLS_REJECT_UNAUTHORIZED = "0"

Para anular la configuración después de las pruebas:

Remove-Item Env:\NODE_TLS_REJECT_UNAUTHORIZED

Validation

Después de aplicar la solución, vuelva a intentar el comando. Verifique la recuperación exitosa del conector.

[AddDataSource.ServiceCall.GetConnector.Start] { apiId: 'shared_office365users' }
[AddDataSource.ServiceCall.GetConnector.Success] { apiId: 'shared_office365users' }

En lugar de:

[AddDataSource.ServiceCall.GetConnector.Failure] { apiId: 'shared_office365users', error: 'fetch failed' }

Matriz de solución de problemas

Si sigue experimentando problemas después de completar los pasos de solución de problemas, investigue los siguientes problemas.

fetch failed Persiste

Confirme nuevamente NODE_EXTRA_CA_CERTS después de reiniciar el shell; asegúrese de que PEM no tenga cero bytes. Ejecute los comandos en Validar corrección para validar que el archivo existe y la variable de entorno está establecida correctamente.

Varios certificados de Zscaler

Si Get-ChildItem Cert:\CurrentUser\Root | Where-Object { $_.Subject -like "*Zscaler*" } devuelve varios certificados, identifique la ENTIDAD de certificación raíz (normalmente denominada Zscaler Root CA). Modifique el paso 3 para seleccionar el correcto por nombre del emisor o huella digital.

Producto de proxy diferente

La solución funciona para cualquier proxy corporativo que realice la inspección SSL (Blue Coat, Forcepoint, Netskope, etc.), pero el Paso 3 busca *Zscaler* en el asunto del certificado. Adapte el filtro para que coincida con el proxy:

# For Blue Coat:
$cert = Get-ChildItem Cert:\CurrentUser\Root |
    Where-Object { $_.Subject -like "*Blue Coat*" } |
    Select-Object -First 1

# For Forcepoint:
$cert = Get-ChildItem Cert:\CurrentUser\Root |
    Where-Object { $_.Subject -like "*Forcepoint*" } |
    Select-Object -First 1

A continuación, complete los pasos 3 a 4 con el certificado coincidente.

Funciona solo fuera de VPN

Cuando el comando solo funciona con una VPN externa, indica los problemas de bloqueo de nivel de red, no de confianza de certificados. Las configuraciones de VPN de túnel dividido corporativo pueden enrutar el tráfico de Power Platform API a través de firewalls locales que bloquean herramientas de Node.js/CLI o aplican directivas restrictivas al tráfico que no es del navegador.

La NODE_EXTRA_CA_CERTS corrección no ayuda aquí. Póngase en contacto con el equipo de red o seguridad para:

  • Permitir el tráfico de la CLI de PAC a *.powerplatform.com, *.dynamics.com, *.azure.net
  • Permitir HTTPS directo (puerto 443) desde estaciones de trabajo de desarrollador a servicios en la nube de Microsoft
  • Configuración de reglas de túnel dividido para omitir la inspección y el filtrado de puntos de conexión de Microsoft de confianza

Guía para la inclusión en listas de permitidos y túnel dividido

Algunas VPN empresariales enrutan directamente solo un subconjunto del tráfico mientras que fuerzan otros destinos a pasar por puertas de enlace de inspección. Los puntos de conexión de Power Platform deben ser accesibles sin bloqueo ni conflictos de interceptación SSL. Consulte Requisitos de conectividad de Microsoft para obtener instrucciones sobre la inclusión en la lista de puntos de conexión permitidos.

SELF_SIGNED CERT IN CHAIN

La cadena de certificados está incompleta. Exporte la cadena de certificados completa (raíz + intermedios) o solicite al equipo de red que proporcione el conjunto completo de CA raíz. Algunos servidores proxy requieren que las CA raíz e intermedia sean de confianza.

Notas

Tenga en cuenta estas notas para mantener una configuración segura y confiable al trabajar detrás de servidores proxy de inspección SSL como Zscaler:

  • Repita la exportación si Zscaler rota los certificados.
  • Los cambios solo afectan al ámbito de usuario actual. No hay ningún riesgo en todo el sistema.
  • Seguro: agrega confianza; no deshabilita la validación.
  • Use una máquina de desarrollo dedicada si la directiva restringe la exportación de certificados.

Datos de escalación

Si ninguno de los pasos de este artículo ayuda, antes de ponerse en contacto con el soporte técnico, recopile la siguiente información y proporciónela:

  • Versión de la CLI de PAC: pac --version
  • Node.js versión: node --version
  • SO + shell (por ejemplo, Windows PowerShell 7 / Windows CMD)
  • Comando completo ejecutado (sanitizado)
  • Bloque de error saneado (primera aparición)
  • Valor de NODE_EXTRA_CA_CERTS (PowerShell: [System.Environment]::GetEnvironmentVariable('NODE_EXTRA_CA_CERTS','User'))
  • Presencia y hash del archivo PEM (por ejemplo, Get-FileHash $env:USERPROFILE\.zscaler-root-ca.pem)

Requisitos de conectividad de Power Platform
Documentación de Node.js NODE_EXTRA_CA_CERTS