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:
Nach Deaktivierung von TLS 1.0 sowie TLS 1.1 sieht das Ergebnis etwas besser aus:
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:
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.