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 enthält Schritte zur Problembehandlung, wenn die PAC CLI (Power Apps Command Line Interface) pac code add-data-source wiederholt hinter einem Zscaler oder ähnlichen SSL-inspektierenden Proxys 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 Platform CLI ist installiert. Aktualisieren Sie es, wenn Sie nicht sicher sind.
- Sie sind für die richtige Umgebung authentisiert. Verwenden Sie
pac auth createundpac auth listBefehle. - 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
Um Ursachen zu beseitigen, die nicht mit einem Proxy zusammenhängen, führen Sie den pac env who Befehl aus.
Wenn dieser Befehl erfolgreich ist, ist die allgemeine Konnektivität einwandfrei. Fehler sind für Datenquellenaufrufe isoliert.
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.
Hinweis
Wenn ein Proxy wie Zscaler HTTPS-Datenverkehr abfangen, ersetzt er das ursprüngliche Serverzertifikat durch sein eigenes Zertifikat, das von einer Unternehmensstammzertifizierungsstelle signiert ist. Auf diese Weise kann der Proxy Datenverkehr entschlüsseln, prüfen und erneut verschlüsseln. Browser vertrauen darauf, weil die Unternehmens-Root-CA im Systemvertrauensspeicher installiert ist. So funktioniert HTTPS-Abfangen
Schritt 3: Exportieren der Zscaler-Root-CA in PEM
Führen Sie diesen Befehl aus, um die Zscaler-Stammzertifizierungsstelle (Zscaler Root Certificate Authority, CA) nach Privacy Enhanced Mail (PEM) 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.
Vorsicht
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. Siehe PowerShell-Zertifikatanbieter und PEM-Format RFC
Windows-Befehl icacls
icacls (Integritätssteuerungs-Zugriffskontrollliste) 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. Siehe 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.
Vorsicht
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 PAC 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
Behebung validieren
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.
pac code add-data-source -a <apiId> -c <connectionId> [-t <tableName>] [-d <dataset|siteUrl>]
Erwarten Sie ein erfolgreiches Abrufen des Connectors anstelle eines Abruffehlers.
(Vermeiden) Unsichere Problemumgehung
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: Dadurch 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
Validation
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' }
Anstelle von:
[AddDataSource.ServiceCall.GetConnector.Failure] { apiId: 'shared_office365users', error: 'fetch failed' }
Problembehandlungsmatrix
Wenn nach Abschluss der Schritte zur Problembehandlung weiterhin Probleme auftreten, untersuchen Sie die folgenden Probleme.
fetch failed Bleibt bestehen
Bestätigen Sie NODE_EXTRA_CA_CERTS die Konfiguration erneut, nachdem die Shell neu gestartet wurde. Stellen Sie sicher, dass die PEM-Datei keine Null-Bytes enthält. Führen Sie die Befehle in Validate Fix aus, um zu überprüfen, ob die Datei vorhanden ist und die Umgebungsvariable ordnungsgemäß festgelegt 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, deutet dies auf eine Blockierung auf Netzwerkebene hin, nicht auf Probleme mit dem Zertifikatsvertrauen. 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:
- Positivliste für PAC CLI-Datenverkehr zu
*.powerplatform.com,*.dynamics.com,*.azure.net - 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 (Root + Zwischenzertifikate), oder bitten Sie Ihr Netzwerkteam, den vollständigen Stammzertifikatsatz 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.
Eskalationsdaten
Wenn keines der Schritte in diesem Artikel hilfreich ist, bevor Sie sich an den technischen Support wenden, sammeln Sie die folgenden Informationen und geben Sie sie an:
- PAC CLI-Version:
pac --version - Node.js Version:
node --version - BETRIEBSSYSTEM + Shell (z. B. Windows PowerShell 7 / 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')) - Anwesenheits- 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