Invoke-WebRequest: Es konnte kein geschützter SSL/TLS-Kanal erstellt werden


    Tags: , ,

    TLS-Problematik bei Windows PowerShellWer 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 Proto­kolls ablehnen. In Windows Power­Shell 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 Kommando­zeile 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 standard­mäß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.

    Wenn die Gegenseite TLS 1.0 nicht akzeptiert, dann kann es je nach OS bei Invoke-WebRequest zu einem Fehler kommen.

    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.

    PowerShell 7 nutzt automatisch eine neuere Version von TLS

    Entsprechend könnte man auf den älteren Betriebs­systemen 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

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut
    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links