Behandeln von Power Apps CLI-Problemen mit Zscaler

Dieser Artikel bietet Schritte zur Fehlerbehebung für den Fall, dass der Befehl Power Apps CLI pa app add data-source hinter Zscaler oder einem ähnlichen Proxy mit SSL-Inspektion wiederholt fehlschlägt.

Zscaler ist eine cloudbasierte Sicherheitsplattform, die secure Socket Layer/Transport Layer Security (SSL/TLS)-Überprüfung durch Entschlüsseln und erneutes Verschlüsseln von HTTPS-Datenverkehr durchführt. Es fungiert als Man-in-the-Middle, wie vorgesehen, um Inhalte auf Bedrohungen zu prüfen. Siehe Zscaler SSL-Inspektionsübersicht

Symptome

In der folgenden Tabelle sind Symptome aufgeführt, die auf Zscaler-bezogene Probleme hinweisen können.

Symptom Beispielnachricht/Muster
Abruf fehlgeschlagen TypeError: fetch failed / [AddDataSource.ServiceCall.GetConnector.Failure] ... fetch failed
Leere Anfrage fehlgeschlagen Error: Request failed: {} (kein Text)
TLS Handshake / Zertifikatsfehler UNABLE_TO_VERIFY_LEAF_SIGNATURE / SELF_SIGNED CERT IN CHAIN (wenn das Debuggen aktiviert ist)
Arbeitet außerhalb des Unternehmensnetzwerks Der Befehl ist erfolgreich, wenn die Verbindung mit Zscaler getrennt wird.

Prüfliste für Voraussetzungen

Überprüfen Sie zunächst Folgendes:

  1. Die neueste Power Apps CLI ist installiert.
  2. Sie sind mit dem richtigen Konto angemeldet. Führen Sie pa auth status aus, um das aktive Konto zu überprüfen.
  3. Die installierte Node.js Version ist größer oder gleich v22. Ältere Versionen weisen ein anderes Vertrauensverhalten auf, das strenger ist.
  4. Sie können den Benutzerzertifikatspeicher lesen. Es gibt keine gesperrten Profileinschränkungen.
  5. Ihre Unternehmensrichtlinie erlaubt das Hinzufügen des Zscaler-Stammzertifikats zum Benutzervetrauen für Entwickler-Tools.

Schritte zur Fehlersuche

Verwenden Sie die Informationen in den folgenden Abschnitten, um Probleme zu beheben.

Schritt 1: Überprüfen des Basisplans

Führen Sie Folgendes aus, um Authentifizierungsprobleme zu beseitigen:

pa auth status

Vergewissern Sie sich, dass das aktive Konto Zugriff auf die in power.config.json konfigurierte Umgebung hat.

Schritt 2: Bestätigen, dass Zscaler installiert ist

Führen Sie diesen Befehl aus, um sicherzustellen, dass das Zscaler-Zertifikat im Speicher vorhanden ist.

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

Wenn Zscaler sein Zertifikat injiziert, wird anstelle von Microsoft ein Zscaler-Aussteller angezeigt.

Schein

Wenn ein Proxy wie Zscaler HTTPS-Datenverkehr abfangen, ersetzt er das ursprüngliche Serverzertifikat durch sein eigenes Zertifikat, das von einer Unternehmensstammzertifizierungsstelle signiert ist. Dieser Ersatz ermöglicht es dem Proxy, Datenverkehr zu entschlüsseln, zu prüfen und erneut zu verschlüsseln. Browser vertrauen diesem Zertifikat, da die Unternehmens-Stammzertifizierungsstelle im Vertrauensspeicher des Systems installiert ist. Weitere Informationen finden Sie unter How HTTPS Interception Works.

Schritt 3: Exportieren der Zscaler-Root-CA in PEM

Führen Sie diesen Befehl aus, um die Zscaler-Stammzertifizierungsstelle (Zscaler Root Certificate Authority, CA) in das PEM-Format (Privacy Enhanced Mail) zu exportieren.

$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

Ergebnis: ~\.zscaler-root-ca.pem erstellt.

Achtung

Schützen Sie die PEM-Datei: Stellen Sie die richtigen Dateiberechtigungen für das exportierte Zertifikat sicher. Wenn ein böswilliger Akteur diese Datei ersetzen kann, könnten sie HTTPS-Datenverkehr von Node.js Prozessen abfangen. Empfohlene Härtung (entfernt die Vererbung und gewährt dann nur Lesezugriff):

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

Wenn das Entfernen von Vererbung im Widerspruch zur Unternehmensrichtlinie steht oder Endpunktschutz-Kontrollen auslöst, überspringen Sie /inheritance:r und erteilen Sie nur explizite Leseberechtigungen:

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

Windows-Zertifikatspeicher und PEM-Format

Der Get-ChildItem Cert:\CurrentUser\Root Befehl greift über den Zertifikatanbieter von PowerShell auf den Windows-Zertifikatspeicher zu. PEM ist ein Base64-codiertes Format für Zertifikate. Die Konvertierung ist erforderlich, da Node.js PEM-Format erfordert, während Windows Zertifikate im DER-Format (Distinguished Encoding Rules) speichert. Weitere Informationen finden Sie unter PowerShell-Zertifikatanbieter und PEM-Format RFC.

Befehl Windows icacls

icacls (Integrity Control Access Control List) ist ein Windows Befehlszeilenprogramm zum Verwalten von Dateiberechtigungen. Die verwendeten Parameter: /inheritance:r entfernt geerbte Berechtigungen, /grant:r ersetzt vorhandene Berechtigungen durch schreibgeschützten Zugriff für den angegebenen Benutzer. Weitere Informationen finden Sie in der Dokumentation zu icacls.

Schritt 4: Weisen Sie Node.js an, dem Zertifikat zu vertrauen

Führen Sie das folgende Skript aus, um Node.js anzuweisen, dem Zertifikat zu vertrauen.

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

Schließen Sie das Terminal/VS Code, und öffnen Sie es erneut zur Verteilung.

Achtung

Umfangswirkung: Diese NODE_EXTRA_CA_CERTS Umgebungsvariable wirkt sich auf alle Node.js Prozesse aus, die von Ihrem Benutzerkonto ausgeführt werden. Wenn die PEM-Datei manipuliert wird, vertraut jede Node.js Anwendung der geänderten Zertifizierungsstelle, nicht nur der Power Apps CLI. Überprüfen Sie den Dateihash regelmäßig, und bewahren Sie ihn auf.

NODE_EXTRA_CA_CERTS Umgebungsvariable

Diese Node.js Umgebungsvariable gibt eine Datei an, die vertrauenswürdigere Zertifizierungsstellen enthält, die über Node.jsintegrierte Liste (Mozillas CA-Bundle) hinausgehen. Bei Festlegung vertraut Node.js Zertifikaten, die von CAs signiert sind, sowohl in der integrierten Liste als auch in der angegebenen Datei. Siehe Node.js CLI-Umgebungsvariablen

Überprüfen Sie die Korrektur der Zscaler-Zertifikatsvertrauensstellung

Führen Sie die folgenden Schritte aus, um zu überprüfen, ob der Fix in schritt 3-4 ordnungsgemäß angewendet wurde, bevor Sie zu Schritt 5 wechseln.

  1. Vergewissern Sie sich, dass die PEM-Datei erstellt wurde und am erwarteten Speicherort vorhanden ist.

     Test-Path "$env:USERPROFILE\.zscaler-root-ca.pem" # Expect True
    
  2. Überprüfen Sie, ob die Umgebungsvariable korrekt festgelegt wurde, und gibt den Pfad zur PEM-Datei zurück.

    [System.Environment]::GetEnvironmentVariable(
        'NODE_EXTRA_CA_CERTS',
        'User'
    )
    
  3. Überprüfen Sie, ob die PEM-Datei über gültige Inhalte verfügt, anstatt leer oder beschädigt zu sein.

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

Schritt 5: Erneutes Ausführen des Befehls

Führen Sie den Befehl erneut aus.

pa app add data-source --connector <connector-id> --connection-id <connection-id> [--table <table-name>] [--dataset <dataset-or-site-url>]

Erwarten Sie ein erfolgreiches Abrufen des Connectors anstelle eines Abruffehlers.

Vermeiden Sie die unsichere Umgehung der TLS-Validierung

Ein endgültiger, endgültiger Test, der vermieden werden sollte, besteht darin, die TLS-Überprüfung vorübergehend zu deaktivieren.

Diese Problemumgehung erzwingt Node.js, alle präsentierten Zertifikate zu akzeptieren, einschließlich selbstsignierter oder gefälschter Zertifikate. Dadurch werden alle Echtheits- und Integritätsgarantien von HTTPS entfernt. Es setzt Sitzungen Man-in-the-Middle-Angriffen (MITM), dem Abfangen von Zugangsdaten und der Manipulation von Inhalten aus. Verwenden Sie niemals außerhalb einer kurzlebigen Diagnosesitzung.

Warnung

Sicherheitsrisiko: In diesem Schritt wird die SSL-Zertifikatüberprüfung für alle Node.js HTTPS-Verbindungen in der aktuellen Sitzung vollständig deaktiviert. Jeder Angreifer mit Netzwerkzugriff kann MITM-Angriffe ausführen. Verwenden Sie diese Problemumgehung NUR für eine einmalige Diagnosestellung, um zu beweisen, dass die Zertifikatvertrauensstellung die Hauptursache ist. Sie sollten Skripts niemals committen; niemals in Produktionsumgebungen verwenden; nach dem Testen sofort entfernen.

$env:NODE_TLS_REJECT_UNAUTHORIZED = "0"

Zum Entfernen nach dem Testen:

Remove-Item Env:\NODE_TLS_REJECT_UNAUTHORIZED

Abruf des Power Apps CLI-Connectors überprüfen

Nachdem Sie die Lösung angewendet haben, versuchen Sie den Befehl erneut. Suchen Sie nach einem erfolgreichen Abrufen des Connectors:

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

Statt:

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

Verbleibende Probleme mit dem Zscaler-Proxy beheben

Wenn nach Abschluss der Schritte zur Problembehandlung weiterhin Probleme auftreten, untersuchen Sie die folgenden Probleme.

fetch failed Bleibt bestehen

Bestätigen Sie nach dem Neustart der Shell erneut, dass NODE_EXTRA_CA_CERTS gesetzt ist; stellen Sie sicher, dass die PEM-Datei nicht 0 Byte groß ist. Führen Sie die Befehle in Validate the Zscaler certificate trust fix aus, um zu überprüfen, dass die Datei vorhanden ist und die Umgebungsvariable korrekt gesetzt ist.

Mehrere Zscaler-Zertifikate

Wenn Get-ChildItem Cert:\CurrentUser\Root | Where-Object { $_.Subject -like "*Zscaler*" } mehrere Zertifikate zurückgegeben werden, identifizieren Sie die Stammzertifizierungsstelle, die normalerweise als Zscaler Root CA benannt ist. Ändern Sie Schritt 3 , um den richtigen nach Ausstellernamen oder Fingerabdruck auszuwählen.

Anderes Proxyprodukt

Die Lösung funktioniert für jeden Unternehmensproxy, der SSL-Inspektionen durchführt (Blue Coat, Forcepoint, Netskope usw.), aber Schritt 3 sucht *Zscaler* im Zertifikatsbetreff nach. Passen Sie den Filter an Ihren Proxy an:

# 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

Führen Sie dann die Schritte 3-4 mit dem übereinstimmenden Zertifikat aus.

Funktioniert nur außerhalb von VPN

Wenn der Befehl nur mit einem externen VPN funktioniert, weist er auf Blockierung auf Netzwerkebene hin, nicht auf Zertifikatvertrauensproblemen. VPN-Konfigurationen für einen geteilten Tunnel für Unternehmen können den Power Platform-API-Datenverkehr über lokale Firewalls weiterleiten, die Node.js/CLI-Tools blockieren oder restriktive Richtlinien auf Nicht-Browser-Datenverkehr anwenden.

Die NODE_EXTRA_CA_CERTS Lösung hilft hier nicht. Beziehen Sie Ihr Netzwerk- oder Sicherheitsteam ein:

  • Power Apps CLI-Datenverkehr für *.powerplatform.com, *.dynamics.com und *.azure.net zulassen
  • Direktes HTTPS (Port 443) von Entwicklerarbeitsstationen zu Microsoft-Clouddiensten zulassen
  • Konfigurieren von Regeln für geteilte Tunnel zur Umgehung der Inspektion/Filterung für vertrauenswürdige Microsoft-Endpunkte

Richtlinien für geteilte Tunnel/Setzen auf Positivliste

Einige VPNs des Unternehmens leiten nur eine Teilmenge des Datenverkehrs direkt weiter, während andere Ziele durch Inspektionsgateways erzwungen werden. Power Platform-Endpunkte müssen ohne Blockierungs- oder SSL-Abfangkonflikte erreichbar sein. In den Microsoft-Konnektivitätsanforderungen finden Sie Anleitungen zum Setzen von Endpunkten auf die Positivliste.

SELF_SIGNED CERT IN CHAIN

Die Zertifikatkette ist unvollständig. Exportieren Sie entweder die vollständige Zertifikatkette (Stamm- und Zwischenzertifikate) oder bitten Sie Ihr Netzwerkteam, Ihnen das vollständige Root-CA-Bundle bereitzustellen. Für einige Proxys müssen sowohl Stamm- als auch Zwischen-CAs als vertrauenswürdig eingestuft werden.

Hinweise

Beachten Sie diese Hinweise, um bei der Arbeit hinter SSL-Inspecting Proxys wie Zscaler ein sicheres und zuverlässiges Setup zu gewährleisten:

  • Wiederholen Sie den Export, wenn Zscaler Zertifikate dreht.
  • Änderungen wirken sich nur auf den aktuellen Benutzerbereich aus. Es besteht kein systemweites Risiko.
  • Sicher: fügt Vertrauen hinzu; deaktiviert die Überprüfung nicht.
  • Verwenden Sie einen dedizierten Entwicklungscomputer, wenn die Richtlinie den Zertifikatexport einschränkt.

Eskalieren von Daten

Wenn keines der Schritte in diesem Artikel hilfe ist, sammeln Sie die folgenden Informationen, bevor Sie sich an den technischen Support wenden:

  • Power Apps CLI-Version:pa --version
  • Node.js Version: node --version
  • Betriebssystem und Shell (z. B. Windows PowerShell 7 oder Windows CMD)
  • Vollständiger Befehl ausgeführt (gesäubert)
  • Bereinigter Fehlerblock (erstes Vorkommen)
  • Wert von NODE_EXTRA_CA_CERTS (PowerShell: [System.Environment]::GetEnvironmentVariable('NODE_EXTRA_CA_CERTS','User'))
  • Anwesenheit und Hash der PEM-Datei (z. B Get-FileHash $env:USERPROFILE\.zscaler-root-ca.pem. )

Anforderungen an die Power Platform-Konnektivität
Node.js NODE_EXTRA_CA_CERTS Dokumentation