Windows Server Update Oktober 2019 und TLS Error

Peter Kirschner
Montag, 28. Oktober 2019

Derzeit sind wir häufig mit dem Problem eines TLS Errors konfrontiert. Folgende Fehlermeldungen sind bei uns aufgetaucht:
„The request was aborted: Could not create SSL/TLS secure channel”,
“Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.”, oder
“An existing connection was forcibly closed by the remote host”

Aus aktueller Sicht können wir diese Fehler auf das Windows Server Update vom 8.10.2019 mit der Nr: KB4520005 zurückführen.

Was bedeutet der Fehler und welche Lösungsmöglichkeiten gibt es?

Die sicherlich einfachste, aber eher nur kurzfristige Lösung ist natürlich, dieses Update am Server zu deinstallieren. Da es bei Updates aber auch immer um die Security geht, ist dies keinesfalls eine Dauerlösung. Und gerade dieses Update beinhaltet auch ein Security Update (CVE-2019-1318), das eingestellt werden sollte.

Wir haben die Fehlermeldung vor allem bei Applikationen bekommen, die .NET 4.5 als Target Runtime haben. Die Fehlermeldung weist nämlich darauf hin, dass es ein Kommunikationsproblem in der TLS Verschlüsselung gibt. Die Versionen von TLS 1.0 und 1.1 wurden als unsicher eingestuft. Im .NET Framework 4.5 ist TLS 1.1 jedoch der Standardwert und 1.2. ist nicht erlaubt.

Update der Applikation
Die schönste Variante zur Problemlösung wäre, die Applikation mindestens auf das .NET Framework 4.6 upzudaten, denn dort ist TLS 1.2 schon Standard. Uns ist natürlich bewusst, dass ein .NET Update auch Risiken birgt und im Falle der Fehlermeldung eine schnellere Lösung benötigt wird. Das bringt uns zu dieser Lösung: Der Fehler kann im Source Code der betroffenen Applikationen relativ einfach behoben werden, indem TLS 1.2 erlaubt wird. Hier der entsprechende Code dafür:

if
(!ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Tls12)
{
ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls12;
}

Registry-Keys
Zusätzlich gibt es auch Registry-Keys, die das Default Verhalten umstellen und somit würde von TLS 1.1 auf TLS 1.2 umgestellt. Diese Keys haben zumindest auch bei den uns verfügbaren Systemen geholfen.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]"SchUseStrongCrypto"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319]"SchUseStrongCrypto"=dword:00000001

Quelle von Microsoft: https://referencesource.microsoft.com/#System/net/System/Net/ServicePointManager.cs,3528c78e8b71ece2

Einstellung web.config
Eine weitere Möglichkeit ist auch noch, diese Einstellung in der web.config einzustellen, wenn eine Application Daten von einem Fremdsystem abholt, und diese nur mehr TLS 1.2 unterstützt.

httpRuntime von  targetFramework="4.5" auf „4.6“ umstellen:

<configuration>.
    <system.web>
        <httpRuntime targetFramework="4.6"/>
    </system.web>
</configuration>


Fehler im PowerShell
Natürlich kann dieser Fehler auch im PowerShell auftreten. Als Beispiel bei einem Script, dass die SharePoint CSOM verwendet.

Code Snippet zum Aktivieren von TLS 1.2:

if( [System.Net.ServicePointManager]::SecurityProtocol.HasFlag(
[System.Net.SecurityProtocolType]::Tls12 )) {
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor [System.Net.SecurityProtocolType]::Tls12
}

Viel Erfolg beim Lösen des Problems. Falls noch Fragen offen sind, freue ich mich auf deine Nachricht!

Weitere Blogbeiträge

zum Thema Development

Updates for innovators: Abonnieren Sie unseren Blog