Fehler „Es konnte kein geschützter SSL TLS Kanal erstellt werden“ lösen

Es konnte kein geschützter SSL TLS Kanal erstellt werden
Es konnte kein geschützter SSL TLS Kanal erstellt werden

Was tun, wenn kein geschützter SSL TLS Kanal erstellt werden kann?

Du erhältst die Fehlermeldung „Es konnte kein geschützter SSL TLS Kanal erstellt werden“?

Dann herzlich willkommen zum heutigen Beitrag, wo ich Dir eine mögliche Lösung zeigen werde.

Ich selbst habe diese Fehlermeldung gestern bei einem Projekt bekommen, aber wusste zum Glück, was zu tun ist.

Andernfalls kann Diese Fehlermeldung sehr häufig dazu führen, dass man verzweifelt und erstmal stundenlang sucht.

Im Endeffekt ist die dazugehörige Lösung – zumindest im VB NET Kontext – häufig vermeintlich einfach.

Denn gerade dort – im .NET- (dotnet) Umfeld – bekommt man diese Exception schon mal öfter.

Dieser verbindungs-fundierte Fehler kommt gängiger weise in Kombination mit Web-Requests vor.

Schauen wir uns das einmal im nächsten Schritt genauer an!

Fehler forcieren – „Konnte keinen SSL Kanal erstellen“

Kein geschützter SSL TLS Kanal Fehler forcieren
Kein geschützter SSL TLS Kanal Fehler forcieren

Gehen wir im nächsten Schritt einmal hin und forcieren diesen Fehler der problemhaften SSL-Kanal-Erstellung.

Aus dem Kopf heraus kann ich da glaube ich ein relativ einfaches Szenario zusammenstückeln.

Beachte, dass es vermutlich noch einige andere Situationen geben wird, ich aber Diese hier konkret weiß..

Den Anfang findet das Ganze wie oben erwähnt – denke ich – am besten bei der NET Framework Version.

Schalte also zunächst einfach die NET Framework auf z. B. Version 4„.

NET Framework Version des Projekts umstellen

Das kannst Du in deinem Visual Studio Projekt relativ einfach erledigen.

Gehe dazu in das Menü oben auf den Punkt „Projekt“ und anschließend auf „Eigenschaften„.

(Beachte, dass ich hier ein relativ altes Projekt verwende, also wundere Dich bitte nicht)

Visual Studio Projekt-Eigenschaften öffnen
Visual Studio Projekt-Eigenschaften öffnen

Gehe danach links auf den Reiter namens „Anwendung“ und wähle unter dem Punkt „Zielframework“ z. B. die Version 4.

NET Framework in den Visual Studio Projekt-Eigenschaften umstellen
NET Framework in den Visual Studio Projekt-Eigenschaften umstellen

Aufruf und Exception

Im nächsten Schritt rufen wir dann einfach mal eine triggernde Funktion auf.

Welche das ist/sind? Im ersten Schritt Funktionen, Welche mit dem Netzwerk zu tun haben.

Als Beispiel definieren wir einen „WebClient“ auf Form-Ebene und instanziieren Ihn im Konstruktor:

Public Class Form1

    Private WithEvents _webClient As WebClient

    Private Sub UpdateForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        _webClient = New WebClient()
    End Sub

End Class

Danach rufe ich z. B. die „DownloadString„-Methode des „WebClients“ mit einer passenden URL auf.

Dabei kann es sich beispielsweise um eine normale Textdatei handeln, Welche nur einen kleinen String beinhaltet.

In meinem konkreten Problemfall hatte ich so eine Versionsnummer abgerufen:

Dim version = ""
Try
  version = wc.DownloadString("<URLToTextFileForExample>")
Catch ex As Exception
  ' catch the error..
End Try

Ausgeführt hat der Code dann den benannten Fehler „Es konnte kein geschützter SSL TLS Kanal erstellt werden“ produziert:

Es konnte kein geschützter SSL TLS Kanal erstellt werden Exception
Es konnte kein geschützter SSL TLS Kanal erstellt werden Exception

Wichtig: In meinem Fall war meiner Meinung nach auch ein anderer Aspekt wichtig. Es handelte sich bei dem SSL Zertifikat ein durch LetsEncrypt generiertes Zertifikat!

Die Lösung!

Ich will mich mit diesem Beitrag durchaus nicht als „Profi“ in diesem Gebiet darstellen.

Jedoch möchte ich im Sinne deiner Zeit-Einsparung berichten, wie es letztlich bei mir funktionierte.

Selbstverständlich habe ich – so wie Du vermutlich vor einigen Sekunden – im Internet nach Problemlösungen gesucht.

Leider haben vorgeschlagene Methoden nicht funktioniert bis ich dann die gleich Folgende raus hatte.

Es wurde vorgeschlagen, Code wie diesen hier, vor dem ersten Netzwerk-Aufruf zu setzen:

ServicePointManager.Expect100Continue = True
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
ServicePointManager.ServerCertificateValidationCallback = Function(sndr, cert, chain, sllPolicyErrors) True

Dafür würde sich natürlich ein Einstiegspunkt des Programmes, wie z. B. der „Load„-Ereignishandler der ersten Form eignen.

Allerdings klappte das wie oben bereits erwähnt leider nicht wirklich..

Nach einiger Fummelei, habe ich dann herausgefunden, dass ich für meinen Fall nur eine Codezeile benötigte.

Ebenso musste ich das NET Framework hochsetzen, um die passende Codezeile verwenden zu können.

Setze also Dein Zielframework (wenn hoffentlich möglich) auf „4.5“ und verwende diesen Code.

Man beachte das hinten geänderte „Tls“ zu „Tls12“, Welches scheinbar erst ab NET Framework 4.5 (und laut Doku ab Win 7) verfügbar ist.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12

Fazit

SSL Kanal erstellen Exception Fazit
SSL Kanal erstellen Exception Fazit

Am Ende dieses Beitrages angekommen können wir nun also folgendes Fazit ziehen.

Wenn man mit Netzwerk-Anfragen in Kombination mit einem selbst signierten SSL Zertifikat arbeitet, kann es Probleme geben.

Besonders unsere verwendete NET Framework Version (4.0) hatte ein bekanntes „Problem„, bzw. einen bekannten Fehler.

Um diesen Fehler „Es konnte kein geschützter SSL TLS Kanal erstellt werden“ zu lösen, muss man das Transport-Protokoll umstellen.

Dies kann man erledigen, indem man die Eigenschaft SecurityProtocol“ der „ServicePointManager„-Klasse auf „Tls12“ setzt.

Die Umstellung muss allerdings (irgendwo logisch) vor dem ersten netzwerkbezogenen Aufruf stattfinden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.