Freigeben über


TLS-Versionserzwingungsfunktionen jetzt pro Zertifikatbindung unter Windows Server 2019 verfügbar

Dieser Beitrag wurde von verfasst

Andrew Marshall, Principal Security Program Manager, Kundensicherheit und Vertrauen

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

Da Ingenieure weltweit daran arbeiten, ihre eigenen Abhängigkeiten von TLS 1.0 zu beseitigen, treten sie in der komplexen Herausforderung auf, ihre eigenen Sicherheitsanforderungen mit der Migrationsbereitschaft ihrer Kunden abzuwägen. Bisher haben wir Kunden geholfen, diese Probleme zu beheben, indem wir tls 1.2-Unterstützung zu älteren Betriebssystemen hinzufügen, neue Protokollierungsformate in IIS versenden, um die schwache TLS-Verwendung von Clients zu erkennen und die neuesten technischen Anleitungen zum Entfernen von TLS 1.0-Abhängigkeiten bereitzustellen.

Jetzt freut sich Microsoft, ein leistungsfähiges neues Feature in Windows bekanntzugeben, um Ihren Übergang zu einer TLS 1.2+-Welt zu vereinfachen. Ab KB4490481 können Sie mit Windows Server 2019 jetzt verhindern, dass schwache TLS-Versionen mit einzelnen zertifikaten verwendet werden, die Sie festlegen. Dieses Feature wird als "Legacy-TLS deaktivieren" bezeichnet, und es erzwingt effektiv eine TLS-Version und eine Verschlüsselungssuite auf jedem von Ihnen ausgewählten Zertifikat.

Das Deaktivieren von Legacy-TLS ermöglicht einem Onlinedienst außerdem, zwei unterschiedliche Gruppierungen von Endpunkten auf derselben Hardware anzubieten: einer, der nur TLS 1.2+-Datenverkehr zulässt und ein anderer, der den älteren TLS 1.0-Datenverkehr berücksichtigt. Die Änderungen werden in HTTP.sysimplementiert, und mit der Ausstellung zusätzlicher Zertifikate können Datenverkehr mit der entsprechenden TLS-Version an den neuen Endpunkt weitergeleitet werden. Vor dieser Änderung würde die Bereitstellung solcher Funktionen eine zusätzliche Hardwareinvestition erfordern, da solche Einstellungen nur systemweit über die Registrierung konfiguriert wurden.

Details zu Featureszenarien

Ein gängiges Bereitstellungsszenario bietet eine Gruppe von Hardware in einem Rechenzentrum mit Kunden gemischter Anforderungen: Einige benötigen TLS 1.2 als erzwungenes Minimum, und andere werden nicht mit dem Entfernen von TLS 1.0-Abhängigkeiten fertig gestellt. Abbildung 1 veranschaulicht die TLS-Versionsauswahl und zertifikatsbindung als separate Aktionen. Dies ist die Standardfunktionalität:

Standardauswahl für TLS-Version

Abbildung 1: Standardauswahl der TLS-Version und Zertifikatbindungsfunktion

  • 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. die noch zu TLS 1.2 migrieren) zu einem Endpunkt weiter, der TLS 1.0 für einen begrenzten Zeitraum unterstützt. Auf diese Weise können Kunden Bereitschaftstests für TLS 1.2 ohne Dienstunterbrechung abschließen, ohne andere Kunden daran zu hindern, die bereits für TLS 1.2 bereit sind.

Benötigte man traditionell zwei physisch getrennte Hosts, um den gesamten Datenverkehr zu verarbeiten und die Durchsetzung der TLS-Version sicherzustellen, da das Bedienen von TLS-Anfragen mit einer Mindestprotokollversion das Deaktivieren schwächerer Protokolle über systemweite Registrierungseinstellungen voraussetzt. Wir haben diese Funktionalität weiter oben im Stapel verfügbar gemacht, wo die TLS-Sitzung an das Zertifikat gebunden ist, sodass eine bestimmte Mindest-TLS-Version wie in Abbildung 2 unten beschrieben zugewiesen werden kann.

Erzwingen der mindesten TLS-Version für ein ausgewähltes Zertifikat

Abbildung 2: Deaktivieren des Legacy-TLS-Features zum Erzwingen der mindesten TLS-Version für ein ausgewähltes Zertifikat Secure.contoso.com.

Leitfaden zur Funktionsbereitstellung

Das Feature "Legacy TLS deaktivieren" kann über die IIS-Server-Benutzeroberfläche (Internet Information Services) bereitgestellt werden, über PowerShell-Befehle oder C++-HTTP.sys-APIs.

Option Nr. 1: IIS-UI-Konfiguration (Verfügbar in Windows 10, Version 2004 und Windows Server, Version 2004 und höher)

Erstellen Sie eine Websitebindung für das SSL-Zertifikat "secure.contoso.com", wie unten dargestellt, und aktivieren Sie dann "Legacy-TLS deaktivieren", und klicken Sie auf "OK".

IIS-Benutzeroberfläche

Option Nr. 2: PowerShell (verfügbar in Windows 10, Version 2004 und Windows Server, Version 2004 und höher)

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

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

Es ist praktisch, kürzere benannte Variablen für sie 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"

Ein 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 Wert der Sslflag DisableLegacyTLS-Eigenschaft:

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 zu einer vorhandenen Website und Deaktivieren von legacy TLS:

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

Darüber hinaus können Sie diese Funktion mit Netsh beheben und testen:

  • Hinzufügen einer neuen Bindung:

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

  • Aktualisieren einer vorhandenen Bindung:

    netsh http update sslcert <Standardparameter> disablelegacytls=enable

  • Überprüfen Sie, ob es auf eine Verknüpfung eingestellt ist:

    netsh http show sslcert <reguläre Parameter>

    Achten Sie darauf, dass ältere TLS-Versionen deaktiviert werden: Festgelegt/Nicht festgelegt

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

Zusammen mit Disable Legacy TLS wurden die folgenden Ergänzungen an HTTP.sysvorgenommen:

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

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: Aktivieren/Deaktivieren des Sitzungstickets für einen bestimmten SSL-Endpunkt.

  • 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. Ab jetzt wird nur ein Ereignis unterstützt, das protokolliert wird, wenn der SSL-Handshake fehlschlägt.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: Aktivieren/Deaktivieren von Legacy-TLS-Versionen für einen bestimmten SSL-Endpunkt. Durch das Festlegen dieses Flags wird TLS 1.0/1.1 für diesen Endpunkt deaktiviert und die verwendbaren Chiffresammlungen auf jene von HTTP/2 eingeschränkt.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: Aktivieren/Deaktivieren von TLS1.2 für einen bestimmten SSL-Endpunkt.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: Aktivieren/Deaktivieren von HTTP/2 für einen bestimmten SSL-Endpunkt.

Die einfachste Möglichkeit zum Aktivieren/Deaktivieren dieser Funktionalität pro Zertifikat in C++ ist das HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS Flag, das von der HttpSetServiceConfiguration HTTP.sys-API bereitgestellt wird.

Wenn "Legacy-TLS deaktivieren" festgelegt ist, werden die folgenden Einschränkungen erzwungen:

  • Deaktivieren Sie die Protokolle SSL2, SSL3, TLS1.0 und TLS1.1.

  • Deaktivieren Sie Verschlüsselungschiffre DES, 3DES und RC4 (sodass nur AES verwendet wird).

  • Deaktivieren Sie verschlüsselungschiffre AES mit CBC-Verkettungsmodus (sodass nur AES GCM verwendet wird).

  • Rsa-Schlüsselaustausch deaktivieren.

  • Deaktivieren Sie den DH-Schlüsselaustausch mit einer Schlüsselgröße unter 2048.

  • Deaktivieren Sie den Austausch von ECDH-Schlüsseln mit einer Schlüsselgröße unter 224.

Die offizielle Dokumentation dieser Änderungen zu docs.Microsoft.com ist in Kürze zu erwarten.

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

"Die Funktion 'Legacy TLS deaktivieren' bietet leistungsstarke neue Möglichkeiten zum Erzwingen von TLS-Versions- und Chiffre-Suite-Mindestanforderungen auf bestimmte Zertifikat- und Endpunktbindungen." Außerdem müssen Sie die Benennung der zertifikate planen, die mit dieser Funktion ausgestellt wurden. Einige der Überlegungen umfassen:

  • Soll der Standardpfad zu meinem Dienstendpunkt heute TLS 1.2 erzwingen und ein anderes Zertifikat als Sicherungszugriffspunkt für Benutzer bereitstellen, die TLS 1.0 benötigen?

  • Sollte meine standardmäßig verwendete Contoso-Zertifizierung die Legacy-TLS-Funktion deaktivieren? Wenn ja, muss ich möglicherweise ein legacy.contoso.com Zertifikat bereitstellen und an einen Endpunkt binden, der TLS 1.0 zulässt.

  • Wie kann ich die empfohlene Verwendung dieser Zertifikate für meine Kunden am besten kommunizieren?

Sie können dieses Feature nutzen, um die Anforderungen großer Kundengruppen zu erfüllen – diejenigen, die zur Verwendung von TLS 1.2+ verpflichtet sind und weiterhin an der Migration außerhalb von TLS 1.0 arbeiten, alle ohne zusätzliche Hardwareausgaben. Zusätzlich zur heutigen Verfügbarkeit der TLS-Versionsbindung pro Zertifikat in Windows Server 2019 beabsichtigt Microsoft, die Deaktivierung von Legacy-TLS in seinen Onlinediensten basierend auf Kundenanforderungen verfügbar zu machen.