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 Kundenprojekt bekommen, aber wusste zum Glück, was zu tun ist. Wenn man die Fehlermeldung das erste Mal sieht, kann man schon daran verzweifeln..

Als Video ansehen

Keine Lust auf viel Text? Kein Problem, schau Dir einfach das kurze Video an und löse Dein Problem in wenigen Sekunden.

Im Endeffekt ist die dazugehörige Lösung – egal ob bei VB.NET oder C# Applikation – häufig vermeintlich einfach. Grundsätzlich stolpert man gängiger weise in Kombination mit Web-Requests über diese Fehlermeldung. Das liegt natürlich daran, dass dort für das HTTP (S) Protokoll, eine gesicherte Verbindung aufgebaut wird. Schauen wir uns das im nächsten Schritt einmal genauer an!

Fehler nachstellen – „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 stellen diesen Fehler der problemhaften SSL-Kanal-Erstellung nach. 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 Deines Projektes (wenn möglich) auf z. B. Version 4„. Im Video verwende ich hier ein älteres Projekt, wo ich den Fehler auch schon einmal hatte, wundere Dich also bitte nicht über den alten Code.

NET Framework Version des Projekts umstellen

💡 Hinweis: Verwende zum Testen ggf. ein separates Projekt, um nichts in Deinem aktuellen Projekt zu zerstören!

Um die .NET-Framework Version Deines Projektes umzustellen, kannst Du im Visual Studio einfach oben auf „Projekt->Eigenschaften“ gehen.

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. Anschließend wirst Du ggf. darum gebeten, die kommende Meldung zu bestätigen, Diese bestätigst Du dann einfach. Im nächsten Schritt wird dann mehr oder weniger alles durch Visual Studio umgestellt.

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 die Fehlermeldung (voraussichtlich) triggernde Funktion / Methode auf. Welche das ist / sind? Im ersten Schritt die Funktionen, Welche mit dem Netzwerk zu tun haben. Als Beispiel deklarieren wir daher einfach einen simplen „WebClient“ auf Form-Ebene und instanziieren Ihn im Konstruktor:

Public Class Form1

    Private WithEvents _webClient As WebClient

    Sub New()
        _webClient = New WebClient()
    End Sub

End Class
public class Form1

    private WebClient _webClient;

    public Form1()
    {
        _webClient = new WebClient();
    }

End Class

Danach rufe ich z. B. die „DownloadString„-Methode des „WebClients“ mit einer passenden URL auf. Dabei kann es sich wie in meinem Beispiel, um eine normale Textdatei handeln, Welche nur einen schmalen String beinhaltet. Mein Aufruf sah dort z. B. wie folgt aus:

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

Anschließend hat der Code dann den benannten Fehler getriggert: „Es konnte kein geschützter SSL / TLS Kanal erstellt werden“:

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 noch ein weiterer / anderer Aspekt wichtig. Es handelte sich bei dem auf der Domain verwendeten SSL Zertifikat, um 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 heraus 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, oder so etwas wie eine „Main-Methode“ 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. Erforderliche Felder sind mit * markiert