Funktioner för krav på TLS-version är nu tillgängliga per certifikatbindning med Windows Server 2019

Det här inlägget har skapats av

Andrew Marshall, ansvarig säkerhetsprogramchef, Customer Security and Trust

Gabriel Montenegro, ansvarig programchef, Core Networking

Niranjan Inamdar, senior programvarutekniker, Core Networking

Michael Brown, senior programvarutekniker, Internet Information Services

Ivan Pashov, ansvarig programvaruteknikchef, Core Networking

Augusti 2019

Dataexperter i hela världen försöker göra sig fria från sina beroenden av TLS 1.0, men ställs inför tuffa utmaningen då de försöker balansera de egna säkerhetsbehoven och migreringsberedskap för deras kunder. Hittills har vi hjälpt kunder att åtgärda dessa problem genom att lägga till TLS 1.2-stöd till äldre operativsystem genom att skicka nya loggningsformat i IIS för att identifiera svag TLS-användning av klienter och ge den senaste tekniska vägledningen för att eliminera TLS 1.0-beroenden.

Vi är nu glada att kunna presentera en kraftfull ny funktion i Windows som underlättar övergången till TLS 1.2 och senare. Från och med KB4490481 har du möjlighet att blockera svaga TLS-versioner i Windows Server 2019 så att de inte används med specifika certifikat som du väljer. Vi kallar den här funktionen "Inaktivera äldre TLS" och den framtvingar effektivt en TLS-version och chiffersvitgolvet på alla certifikat som du väljer.

Inaktivera äldre TLS gör det också möjligt för en onlinetjänst att erbjuda två distinkta grupper av slutpunkter på samma maskinvara: en som endast tillåter TLS 1.2+-trafik och en annan som rymmer äldre TLS 1.0-trafik. Ändringarna implementeras i HTTP.sys och med utfärdandet av ytterligare certifikat kan trafik dirigeras till den nya slutpunkten med rätt TLS-version. Innan den här ändringen krävde distributionen av dessa funktioner ytterligare maskinvaruinvesteringar eftersom sådana inställningar endast kunde konfigureras på systemnivå via registret.

Beskrivning av scenario med funktionen

I ett vanligt distributionsscenario finns en uppsättning maskinvara i ett datacenter där olika kunder har olika behov: vissa kräver TLS 1.2 eller senare redan nu, medan andra har kvar sina TLS 1.0-beroenden. Bild 1 visar valet av TLS-version och certifikatbindning som separata åtgärder. Så här ser standardprocessen ut:

Default TLS Version selection

Bild 1: Standardval av TLS-version och certifikatbindningsfunktioner

  • secure.contoso.com dirigerar dina kunder till en tjänstslutpunkt som endast stöder TLS 1.2 och senare.

  • legacy.contoso.com dirigerar kunder med äldre TLS 1.0-behov (som de som fortfarande migrerar till TLS 1.2) till en slutpunkt som stöder TLS 1.0 under en begränsad tid. Detta gör det möjligt för kunder att slutföra beredskapstestningen för TLS 1.2 utan avbrott i tjänsten och utan att blockera andra kunder som är redo för TLS 1.2.

Traditionellt behöver du två fysiskt separata värdar för att hantera all trafik och tillhandahålla TLS-versionsframtvingande, eftersom service av TLS-begäranden med en lägsta protokollversion kräver att svagare protokoll inaktiveras via systemomfattande registerinställningar. Vi har gjort den här funktionen tillgänglig högre upp i stacken, där TLS-sessionen är kopplad till certifikatet, så att en särskild lägsta TLS-version kan tilldelas på det sätt som beskrivs i bild 2 nedan.

Enforcing minimum TLS version for a selected certificate

Bild 2: Inaktivera äldre TLS-funktion som framtvingar lägsta TLS-version för ett valt certifikat, Secure.contoso.com.

Vägledning för funktionsdistribution

Funktionen Inaktivera äldre TLS kan distribueras via IIS-servergränssnittet (Internet Information Services) via PowerShell-kommandon eller C++ HTTP.sys-API:er.

Alternativ 1: Konfiguration av IIS-användargränssnittet (finns i Windows 10 version 2004 och Windows Server version 2004 och senare)

Skapa en webbplatsbindning för SSL-certifikatet ”secure.contoso.com” på det sätt som beskrivs nedan. Markera sedan ”Inaktivera äldre TLS” och klicka på OK.

IIS UI

Alternativ 2: PowerShell (finns i Windows 10 version 2004 och Windows Server version 2004 och senare)

I PowerShell kan du referera till SSL-flaggor så här:

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

Det är praktiskt att skapa kortare namngivna variabler för dem:

$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"

Ett exempel på hur du skapar en webbplatsbindning till en ny plats och inaktiverar äldre TLS:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

New-IISSite med Sslflag DisableLegacyTLS-egenskapsvärdet:

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

Ett exempel på hur du lägger till en webbplatsbindning till en befintlig plats och inaktiverar äldre TLS:

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

Dessutom kan funktionen felsökas och testas med Netsh:

  • Lägga till en ny bindning:

    netsh http add sslcert <regular parameters> disablelegacytls=enable

  • Uppdaterar en befintlig bindning:

    netsh http update sslcert <regular parameters> disablelegacytls=enable

  • Kontrollera om den har angetts för en bindning:

    netsh http show sslcert <vanliga parametrar>

    Håll utkik efter Inaktivera äldre TLS-versioner: Set/Not Set

Alternativ 3: C++ HTTP.sys API:er (tillgänglig nu)

Förutom Inaktivera äldre TLS har följande tillägg gjorts till HTTP.sys:

  • HTTP_SERVICE_CONFIG_SSL_PARAM. DefaultFlags stöder nu följande nya värden:

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: Aktivera/inaktivera sessionsbiljett för en viss SSL-slutpunkt.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: Aktivera/inaktivera utökad händelseloggning för en viss SSL-slutpunkt. Ytterligare händelser loggas till Windows-händelseloggen. Det finns bara en händelse som stöds från och med nu och som loggas när SSL-handskakningen misslyckas.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: Aktivera/inaktivera äldre TLS-versioner för en viss SSL-slutpunkt. Om du anger den här flaggan inaktiveras TLS1.0/1.1 för slutpunkten och chiffersviter som kan användas till HTTP2-chiffersviter begränsas.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: Aktivera/inaktivera TLS1.2 för en viss SSL-slutpunkt.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: Aktivera/inaktivera HTTP/2 för en viss SSL-slutpunkt.

Det enklaste sättet att aktivera/inaktivera den här funktionen per certifikat i C++ är med flaggan HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS som tillhandahålls av HTTPSetServiceConfiguration HTTP.sys-API:et.

När Inaktivera äldre TLS har konfigurerats tillämpas följande begränsningar:

  • Inaktivera SSL2-, SSL3-, TLS1.0- och TLS1.1-protokoll.

  • Inaktivera krypteringschiffren DES, 3DES och RC4 (så att endast AES används).

  • Inaktivera krypteringschiffret AES med CBC-kedjekopplingsläge (så att endast AES-GCM används).

  • Inaktivera RSA-nyckelutbyte.

  • Inaktivera DH-nyckelutbyte med en nyckelstorlek som är mindre än 2 048.

  • Inaktivera ECDH-nyckelutbyte med en nyckelstorlek som är mindre än 224.

Officiell dokumentation om dessa ändringar av docs.Microsoft.com kommer.

Nästa steg för krav på TLS-version

Inaktivera äldre TLS ger kraftfulla nya funktioner för att kräva TLS-version/chiffersviter på specifika certifikat-/slutpunktsbindningar. Du måste också planera för namngivningen av certifikat som utfärdas när den här funktionen är aktiverad. Här är några saker att tänka på:

  • Vill jag att standardsökvägen till min tjänstslutpunkt ska använda TLS 1.2 redan nu, och använda ett annat certifikat som en ”äldre” reservåtkomstpunkt för användare som behöver TLS 1.0?

  • Ska min standard, redan använda Contoso-certifiering använda Inaktivera äldre TLS? I så fall kan jag behöva ange ett legacy.contoso.com-certifikat och binda det till en slutpunkt som tillåter TLS 1.0.

  • Hur kan jag informera mina kunder om den rekommenderade användningen av dessa certifikat?

Du kan använda den här funktionen för att uppfylla behoven hos stora grupper av kunder – de som är skyldiga att använda TLS 1.2+ och de som fortfarande arbetar med migreringen från TLS 1.0, allt utan ytterligare maskinvaruutgifter. Förutom dagens tillgänglighet för TLS-versionsbindning per certifikat i Windows Server 2019 ser Microsoft ut att göra Inaktivera äldre TLS tillgängligt i sina onlinetjänster baserat på kundernas efterfrågan.