Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
- Die neueste Power Apps CLI ist installiert.
- Sie sind mit dem richtigen Konto angemeldet. Führen Sie
pa auth statusaus, um das aktive Konto zu überprüfen. - Die installierte Node.js Version ist größer oder gleich v22. Ältere Versionen weisen ein anderes Vertrauensverhalten auf, das strenger ist.
- Sie können den Benutzerzertifikatspeicher lesen. Es gibt keine gesperrten Profileinschränkungen.
- 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.
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Ü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' )Ü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.comund*.azure.netzulassen - 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. )
Verwandte Artikel
Anforderungen an die Power Platform-Konnektivität
Node.js NODE_EXTRA_CA_CERTS Dokumentation