Tags: PowerShell, Verschlüsselung, Troubleshooting
Wer mit Invoke-WebRequest Web-Inhalte abrufen will, kann an einem SSL/TLS-Fehler scheitern. Der Grund liegt darin, dass immer mehr Websites die Version 1.0 des Protokolls ablehnen. In Windows PowerShell muss man dann, je nach Version des installierten .NET-Frameworks, TLS 1.1 / 1.2 manuell aktivieren.
Betroffen davon sind in erster Linie die Cmdlets Invoke-WebRequest und Invoke-RestMethod, das wie curl oder wget Web-Inhalte von der Kommandozeile herunterladen kann. Im Unterschied zu diesen beiden anderen Tools parsen die Cmdlets die übertragenen HTML- bzw. JSON-Daten und machen sie als PowerShell-Objekt zugänglich.
Kein Parameter für TLS-Version
Unter Windows PowerShell fehlt ihm allerdings eine Möglichkeit, um die Version von TLS festzulegen, wogegen es dafür unter PowerShell 7 den Parameter SslProtocol gibt.
Wenn PowerShell auf einer älteren Version des .NET-Framework als 4.62 läuft, dann nutzt es standardmäßig TLS 1.0. Dies trifft auf Windows 8.1, Server 2016 und ältere Versionen von Windows 10 zu.
Dort tritt abhängig von den Anforderungen der Gegenstelle häufig folgender Fehler auf:
Invoke-WebRequest: Die Anfrage wurde abgebrochen: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden.
Behelfen kann man sich in dieser Situation mit dem Aufruf von
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]'Tls11,Tls12'
Damit beschränkt man die TLS-Versionen auf 1.1 und 1.2. Diese Änderung wirkt sich jedoch nur auf die jeweilige Session aus, so dass man diesen Befehl jedes Mal neu eingeben müsste. Um das zu vermeiden, kann man ihn in das PowerShell-Profil aufnehmen.
PowerShell 7 nicht betroffen
Das Problem stellt sich hingegen nicht in PowerShell 6.x oder 7, und zwar nicht nur, weil man dort die TLS-Version für Invoke-WebRequest mit dem Parameter SslProtocol steuern kann. Vielmehr verwendet das darunterliegende .NET Core per Voreinstellung eine neuere Version des Protokolls.
Entsprechend könnte man auf den älteren Betriebssystemen für Aufgaben, die eine TLS-Verbindung benötigen, auch auf PowerShell 7 ausweichen.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
Weitere Links