TLS unter IIS 10 absichern

Wer einen Web-Server betreibt, sollte darauf achten, dass keine veralteten kryptografischen Protokolle ihr Unwesen treiben. Ein Kandidat hierfür wäre Transport Layer Security (TLS) in den Versionen TLS 1.0 und TLS 1.1. Ich zeige euch, wie beide Versionen für IIS 10 (Windows 2019 und Windows 2016) deaktiviert werden können.

Diskussion

Transport Layer Security (TLS) ist ein kryptografisches Protokoll zum Verschlüsseln von Nachrichten. TLS ist wesentlicher Bestandteil des Kommunikationsprotokolls Hypertext Transfer Protocol Secure (HTTPS). Die Versionshistorie von TLS sieht wie folgt aus:

Version Veröffentlichung
TLS 1.0 Januar 1999
TLS 1.1 April 2006
TLS 1.2 August 2008
TLS 1.3 August 2018

Die Versionen 1.0 und 1.1 sind also schon ziemlich alt. Ein aktueller Entwurf der Internet Engineering Task Force (IETF) fordert sogar, die Unterstützung für beiden TLS-Varianten komplett zu verbieten. Die dort aufgeführten Gründe sind:

  • Beide Protokollversionen erfordern den Einsatz von veralteten Verschlüsselungsverfahren, die als nicht mehr sicher gelten. TLS 1.0 setzt beispielsweise den Einsatz von TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA als zwingend voraus.

  • Es werden keine aktuellen Verschlüsselungsverfahren unterstützt. Die AEAD-Verschlüsselung wird beispielsweise erst ab Version 1.2 unterstützt.

  • Die Integrität des Handshake-Algorithmus basiert auf einem SHA-1 Hash. Dieser gilt als unsicher.

  • Die Authentifizierung der Gegenseite basiert auf SHA-1 Signaturen. Diese gelten ebenfalls als unsicher.

  • Die Unterstützung von insgesamt vier Protokollversionen erhöht die Wahrscheinlichkeit von Fehlkonfiguration.

  • Einige Programmierbibliotheken haben angekündigt, die Unterstützung für TLS 1.0 und TLS 1.1 einzustellen. Dies hätte zur Folge, dass für die weiter Bereitstellung dieser Protokollversionen keine Updates dieser Bibliotheken mehr möglich wären.

Alle modernen Web-Browser (Chrome, Firefox, Safari, Edge, Opera, etc.) und sogar IE 11 unterstützen TLS 1.2.

Ein Web-Server sollte daher ausschließlich TLS 1.2 oder höher bereitstellen. Leider sind sowohl unter Windows Server 2016 als auch unter Windows 2019 beide Vorgängerversionen standarmäßig aktiviert.

TLS 1.0 und 1.1 deaktivieren

Vorgehensweise für Windows 2019 und 2016: Die Windows-Registry wie folgt ändern und danach den Server neu starten.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1]
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
"Enabled"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
"Enabled"=dword:00000000

Schwache kryptographische Verfahren deaktivieren

Auch wenn dein IIS jetzt exklusiv mit TLS 1.2 läuft, so müssen wir uns trotzdem noch anschauen, welche kryptographische Verfahren dabei unterstützt werden.

Ein einfacher Test unter auf der Webseite SSL Labs zeigt auf, wie dein TLS konfiguriert ist. Tippe dazu den Hostnamen deiner Webseite ein, die du testen möchtest.

Windows 2019

Ein typisches Ergebnis bei einem frisch installierten Windows 2019 Server sieht wie folgt aus:

Windows 2019 und IIS 10 frisch installiert

Windows 2019 und IIS 10 frisch installiert

Nach Deaktivierung von TLS 1.0 sowie TLS 1.1 sieht das Ergebnis etwas besser aus:

Windows 2019 und IIS 10 ohne TLS 1.0 und 1.1

Windows 2019 und IIS 10 ohne TLS 1.0 und 1.1

Die verbliebenden als WEAK (zu Deutsch: schwach) gekennzeichneten Einträge wollen wir ebenfalls deaktivieren.

Das Deaktivieren geht am elegantesten per PowerShell (PowerShell-Konsole bitte als Administrator starten) und dem Cmdlt Disable-TlsCipherSuite.

Das folgende Powershell-Skript deaktiviert alle als WEAK gekennzeichneten kryptografischen Verfahren:

Disable-TlsCipherSuite -Name "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"
Disable-TlsCipherSuite -Name "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"
Disable-TlsCipherSuite -Name "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"
Disable-TlsCipherSuite -Name "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_256_GCM_SHA384"
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_128_GCM_SHA256"
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_256_CBC_SHA256"
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_128_CBC_SHA256"
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_256_CBC_SHA"
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_AES_128_CBC_SHA"
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_3DES_EDE_CBC_SHA"

Kleiner Tipp: Mit

Get-TlsCipherSuite | Format-Table Name 

kann man sich alle unter Windows 2019 bzw. 2016 aktivierten kryptografischen Verfahren für TLS anzeigen lassen.

Ein abschließender Test unter SSL Labs ergibt nun folgendes Bild:

Windows 2019 und IIS 10 abgesichert

Windows 2019 und IIS 10 abgesichert

Das sieht gut aus. Bitte beachte, dass die soeben durchgeführten Änderungen systemweit, also für alle IIS-Webseiten, gelten.

Windows 2016

Windows 2016 unterscheidet sich von Windows 2019 in einem wichtigen Punkt: Der Verschlüsselungsalgorithmus Rivest Cipher 4 (RC4) ist standardmäßig aktiviert. Dieser gilt seit 2013 als unsicher und sollte seit 2015 in keiner TLS-Implementierung mehr eingesetzt werden (siehe RFC 7465). SSL Labs zeigt RC4 deshalb auch als INSECURE und nicht als WEAK an.

Du musst also auf alle Fälle RC4 unter Windows 2016 deaktivieren:

Disable-TlsCipherSuite -Name "TLS_RSA_WITH_RC4_128_SHA"
Disable-TlsCipherSuite -Name "TLS_RSA_WITH_RC4_128_MD5"

Nachtrag: WebDeploy

Wer WebDeploy zum Publizieren von Web-Applikationen unter IIS 10 nutzt, wird schnell feststellen, dass dies nach Abschalten von TLS 1.0 und TLS 1.1 nicht mehr funktioniert. Der Grund: WebDeploy nutzt standardmäßig TLS 1.0. Daher kommt es zum Verbindungsabbruch. Man kann jedoch WebDeploy (genauer gesagt das von WebDeploy genutzte .NET-Framework) auf TLS 1.2 umstellen.

Vorgehensweise: Die Windows-Registry auf dem Rechner, der WebDeploy ausführen möchte, wie folgt ändern.

Windows Registry Editor Version 5.00

[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   

Fazit

Cloud-basierte Dienste müssen einem ständigen Sicherheits-Monitoring unterliegen, da sich Standards stets weiterentwickeln. IIS unterstützt zum Beispiel noch nicht TLS 1.3. Dies wird aber hoffentlich irgendwann der Fall der sein ist für den neuen Windows Server 2022 angekündigt.

Einen schönen Überlick über die aktuell von Mozilla empfohlenden TLS-Konfigurationen findest du im MozillaWiki unter Security/Server Side TLS.

Das könnte dich auch interessieren:
  1. Windows 10 wiederherstellen
Teile diesen Artikel
comments powered by Disqus