Freigeben über


Funktionen zur Erzwingung bestimmter TLS-Versionen jetzt mithilfe von Zertifikatbindung unter Windows Server 2019 verfügbar

Autoren dieses Beitrags:

Andrew Marshall, Principal Security Program Manager, Customer Security and Trust

Gabriel Montenegro, Principal Program Manager, Core Networking

Niranjan Inamdar, Senior Software Engineer, Core Networking

Michael Brown, Senior Software Engineer, Internetinformationsdienste

Ivan Pashov, Principal Software Engineering Lead, Core Networking

August 2019

Weltweit arbeiten Entwickler daran, ihre Abhängigkeiten von TLS 1.0 zu beseitigen. Dabei sehen sie sich mit der komplexen Herausforderung konfrontiert, eine Lösung zu finden, die sowohl die eigenen Sicherheitsanforderungen erfüllt als auch die Migrationsbereitschaft ihrer Kunden unterstützt. Bisher haben wir Kunden dabei geholfen, diese Probleme zu lösen, indem wir älteren Betriebssystemen TLS 1.2-Unterstützung hinzugefügt haben, durch die Bereitstellung neuer Protokollierungsformate in IIS zur Erkennung einer schwachen TLS-Nutzung durch Kunden und der Bereitstellung technischer Leitfäden zur Beseitigung von TLS 1.0-Abhängigkeiten.

Nun freuen wir uns bei Microsoft, ein leistungsstarkes neues Feature für Windows ankündigen zu können, das den Übergang zu TLS 1.2 und höher vereinfacht. Ab KB4490481 können Sie verhindern, dass schwache TLS-Versionen unter Windows Server 2019 mit bestimmten, von Ihnen festgelegten Zertifikaten verwendet werden. Wir nennen diese Funktion „Legacy-TLS deaktivieren“ und sie erzwingt effektiv eine TLS-Version und eine Cipher-Suite-Untergrenze für jedes von Ihnen ausgewählte Zertifikat.

Durch die Deaktivierung von Legacy-TLS kann ein Onlinedienst außerdem zwei unterschiedliche Gruppierungen von Endpunkten auf derselben Hardware anbieten: eine, die nur TLS 1.2+Datenverkehr zulässt, und eine andere, die älteren TLS 1.0 Datenverkehr unterstützt. Die Änderungen werden in HTTP.sys implementiert und ermöglichen mit der Ausstellung zusätzlicher Zertifikate die Weiterleitung des Datenverkehrs an den neuen Endpunkt mit der entsprechenden TLS-Version. Vor dieser Änderung erforderte das Bereitstellen solcher Funktionen Investitionen in zusätzliche Hardware, da sich solche Einstellungen nur systemweit über die Registrierung konfigurieren ließen.

Details zum Featureszenario

Ein gängiges Bereitstellungsszenario beinhaltet ein Rechenzentrum mit einer Reihe von Hardwaregeräten, die unterschiedliche Anforderungen haben: einige erfordern bereits TLS 1.2 als Mindestversion, während für andere noch nicht alle Abhängigkeiten von TLS 1.0 entfernt wurden. In Abbildung 1 werden die Auswahl der TLS-Version und die Zertifikatbindung als separate Vorgänge dargestellt. Dies ist die Standardfunktionalität:

Default TLS Version selection

Abbildung 1: Auswahl der Standard-TLS-Version und Zertifikatbindungsfunktionalität

  • secure.contoso.com leitet Ihre Kunden an einen Dienstendpunkt weiter, der nur TLS 1.2 und höher unterstützt.

  • Legacy.contoso.com leitet Kunden mit älteren TLS 1.0-Anforderungen (z. B. solche, die noch auf TLS 1.2 migrieren) an einen Endpunkt weiter, der TLS 1.0 für eine begrenzte Zeit unterstützt So können Kunden Bereitschaftstests für TLS 1.2 abschließen, ohne dass es zu Dienstunterbrechungen kommt und ohne dass Kunden ausgeschlossen werden, die bereit für TLS 1.2 sind.

Traditionell waren zwei physisch getrennte Hosts erforderlich, um den gesamten Datenverkehr abzuwickeln und für die Durchsetzung der TLS-Version zu sorgen, da die Bearbeitung von TLS-Anfragen mit einer Mindestprotokollversion die Deaktivierung schwächerer Protokolle über systemweite Registrierungseinstellungen erfordert. Diese Funktionalität wurde weiter oben im Stapel an der Stelle verfügbar gemacht, an der die TLS-Sitzung an das Zertifikat gebunden wird. So kann eine bestimmte minimale TLS-Version zugewiesen werden (s. Abbildung 2 unten).

Enforcing minimum TLS version for a selected certificate

Abbildung 2: Deaktivieren Sie die Legacy-TLS-Funktion, um die TLS-Mindestversion für ein ausgewähltes Zertifikat, Secure.contoso.com, durchzusetzen.

Leitfaden zur Featurebereitstellung

Das Feature „Disable Legacy TLS“ (Legacy-TLS deaktivieren) kann über die Serverbenutzeroberfläche der Internetinformationsdienste, über PowerShell-Befehle oder C++-HTTP.sys-APIs bereitgestellt werden.

Option Nr. 1: IIS-UI-Konfiguration (verfügbar in Windows 10 Version 2004 und Windows Server Version 2004 und neuer)

Erstellen Sie so wie unten gezeigt eine Websitebindung für das SSL-Zertifikat „secure.contoso.com”, aktivieren Sie dann das Kontrollkästchen „Disable Legacy TLS” (Legacy-TLS deaktivieren), und klicken Sie auf OK.

IIS UI

Option Nr. 2: PowerShell (verfügbar in Windows 10 Version 2004 und Windows Server Version 2004 und neuer)

In PowerShell können Sie wie folgt auf SSL-Flags verweisen:

[Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS

Es ist jedoch praktischer, Variablen mit kürzeren Namen dafür zu erstellen:

$Sni = [Microsoft.Web.Administration.SslFlags]::Sni
    
$Sni\_CCS = [Microsoft.Web.Administration.SslFlags]::Sni + [Microsoft.Web.Administration.SslFlags]::CentralCertStore
    
$CCS = [Microsoft.Web.Administration.SslFlags]::CentralCertStore
    
$DisableLegacyTLS = [Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS
    
 $storeLocation = "Cert:\\LocalMachine\\My"

Beispiel für das Erstellen einer Websitebindung an eine neue Website und das Deaktivieren von Legacy-TLS:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

„New-IISSite“ mit dem Eigenschaftswert „Sslflag DisableLegacyTLS“:

New-IISSite $siteName "$env:systemdrive\\inetpub\\wwwroot" "\*:443:secure.contoso.com" https $certificate.Thumbprint $DisableLegacyTLS $storeLocation -passthru

Beispiel für das Hinzufügen einer Websitebindung an eine bestehende Website und das Deaktivieren von Legacy-TLS:

New-IISSiteBinding -Name "Default Web Site" -BindingInformation $BindingInformation -CertificateThumbPrint $certificate.Thumbprint -Protocol https -SslFlag $DisableLegacyTLS, $CCS -Force -verbose

Mit Netsh können Sie außerdem die Problembehandlung für dieses Feature durchführen und es testen:

  • Hinzufügen einer neuen Bindung:

    netsh http add sslcert <reguläre Parameter> disablelegacytls=enable

  • Aktualisieren einer vorhandenen Bindung:

    netsh http update sslcert <reguläre Parameter> disablelegacytls=enable

  • Überprüfen Sie, ob eine Bindung festgelegt ist:

    netsh http show sslcert <reguläre Parameter>

    Achten Sie auf die Deaktivierung älterer TLS-Versionen: Eingestellt/Nicht eingestellt

Option #3: C++ HTTP.sys APIs (jetzt verfügbar)

Zusammen mit „Disable Legacy TLS“ (Legacy-TLS deaktivieren) wurden die folgenden Änderungen an HTTP.sys vorgenommen:

  • HTTP_SERVICE_CONFIG_SSL_PARAM.DefaultFlags unterstützt jetzt die folgenden neuen Werte:

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: Sitzungsticket für einen bestimmten SSL-Endpunkt aktivieren/deaktivieren.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: Erweiterte Ereignisprotokollierung für einen bestimmten SSL-Endpunkt aktivieren/deaktivieren. Zusätzliche Ereignisse werden im Windows-Ereignisprotokoll protokolliert. Derzeit wird nur ein Ereignis unterstützt, das protokolliert wird, wenn der SSL-Handshake fehlschlägt.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: Ältere TLS-Versionen für einen bestimmten SSL-Endpunkt aktivieren/deaktivieren. Durch das Setzen dieses Flags wird TLS1.0/1.1 für diesen Endpunkt deaktiviert und die verwendbaren Verschlüsselungssammlungen werden auf HTTP2-Verschlüsselungssammlungen beschränkt.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: TLS1.2 für einen bestimmten SSL-Endpunkt aktivieren/deaktivieren.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: HTTP/2 für einen bestimmten SSL-Endpunkt aktivieren/deaktivieren.

Die einfachste Möglichkeit, diese Funktionalität pro Zertifikat in C++ zu aktivieren/deaktivieren, ist die Verwendung des Flags HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS, das von der HTTP.sys-API HttpSetServiceConfiguration bereitgestellt wird.

Wenn das Feature „Disable Legacy TLS“ (Legacy-TLS deaktivieren) festgelegt ist, werden die folgenden Einschränkungen erzwungen:

  • Protokolle SSL2, SSL3, TLS 1.0 und TLS 1.1 deaktivieren

  • Verschlüsselungsverfahren DES, 3DES und RC4 deaktivieren (damit nur AES verwendet wird)

  • Verschlüsselungsverfahren AES mit CBC-Modus deaktivieren (damit nur AES-GCM verwendet wird)

  • RSA-Schlüsselaustausch deaktivieren

  • DH-Schlüsselaustausch für Schlüssel deaktivieren, die kleiner als 2048 sind

  • ECDH-Schlüsselaustausch für Schlüssel deaktivieren, die kleiner als 224 sind

Die offizielle Dokumentation zu diesen Änderungen wird in Kürze auf „docs.microsoft.com“ veröffentlicht.

Nächste Schritte für die Erzwingung von TLS-Versionen

Das Feature „Disable Legacy TLS“ (Legacy-TLS deaktivieren) stellt leistungsstarke neue Funktionen für das Erzwingen von TLS-Versionen/der zugrunde liegenden Cipher Suite für bestimmte Zertifikate/Endpunktbindungen bereit. Es erfordert darüber hinaus, dass Sie die Benennung der Zertifikate im Voraus planen, wenn diese Funktionalität aktiviert ist. Einige der notwendigen Überlegungen sind beispielsweise:

  • Möchten Sie den Standardpfad zu Ihrem Dienstendpunkt verwenden, um TLS 1.2 heute zu erzwingen und ein anderes Zertifikat als Legacy-/Sicherungszugriffspunkt für Benutzer bereitzustellen, die TLS 1.0 erfordern?

  • Sollte meine standardmäßige, bereits verwendete Contoso-Zertifizierung „Legacy-TLS deaktivieren“ verwenden? Falls dem so ist, muss unter Umständen ein „legacy.contoso.com“-Zertifikat bereitgestellt und an einen TLS 1.0 zulassenden Endpunkt gebunden werden.

  • Wie kommunizieren Sie die empfohlene Verwendung dieser Zertifikate am besten an Ihre Kunden?

Sie können diese Funktion nutzen, um die Anforderungen großer Kundengruppen zu erfüllen – diejenigen, die zur Verwendung von TLS 1.2+ verpflichtet sind, und diejenigen, die noch an der Migration weg von TLS 1.0 arbeiten, und das alles ohne zusätzlichen Hardwareaufwand. Zusätzlich zur heutigen Verfügbarkeit der TLS-Versionsbindung pro Zertifikat in Windows Server 2019 wird Microsoft versuchen, die Deaktivierung von Legacy-TLS je nach Kundennachfrage in seinen Onlinediensten verfügbar zu machen.