Dela via


Möjlighet att upprätthålla TLS-versioner är nu tillgänglig för varje certifikatbindning på Windows Server 2019

Det här inlägget har skapats av

Andrew Marshall, chef för säkerhetsprogrammet, Kundsäkerhet och förtroende

Gabriel Montenegro, programchef, kärnnätverk

Niranjan Inamdar, Senior Software Engineer, Core Networking

Michael Brown, Senior Software Engineer, Internet Information Services

Ivan Pashov, huvudansvarig programvaruingenjörsledare, kärnnätverk

Augusti 2019

När ingenjörer över hela världen arbetar för att eliminera sina egna beroenden på TLS 1.0stöter de på den komplexa utmaningen att balansera sina egna säkerhetsbehov med kundernas migreringsberedskap. Hittills har vi hjälpt kunder att åtgärda dessa problem genom att lägga till TLS 1.2-stöd till äldre operativsystemgenom att skicka nya loggningsformat i IIS för att identifiera svag TLS-användning av klienter och tillhandahålla den senaste tekniska vägledningen för att eliminera TLS 1.0-beroenden.

Nu är Microsoft glada över att kunna presentera en kraftfull ny funktion i Windows för att underlätta övergången till en TLS 1.2+-värld. Från och med KB4490481kan du med Windows Server 2019 nu blockera svaga TLS-versioner från att användas med enskilda certifikat som du anger. Vi kallar den här funktionen "Inaktivera äldre TLS", och den framtvingar effektivt en TLS-version och en lägstanivå på chiffersviten på alla certifikat 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.sysoch med utfärdandet av ytterligare certifikat kan trafik dirigeras till den nya slutpunkten med rätt TLS-version. Innan den här ändringen skulle distribution av sådana funktioner kräva ytterligare en maskinvaruinvestering eftersom sådana inställningar endast kunde konfigureras systemomfattande via registret.

Detaljer om funktionsscenarier

Ett vanligt distributionsscenario har en uppsättning maskinvara i ett datacenter med kunder med blandade behov: vissa behöver TLS 1.2 som ett framtvingat minimum just nu och andra är inte klara med att ta bort TLS 1.0-beroenden. Bild 1 illustrerar val av TLS-version och certifikatbindning som distinkt separata åtgärder. Det här är standardfunktionen:

standardval av TLS-version

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. På så sätt kan kunder 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 bunden till certifikatet, så att en specifik lägsta TLS-version kan tilldelas enligt beskrivningen i bild 2 nedan.

Framtvinga lägsta TLS-version för ett valt certifikat

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 platsbindning för SSL-certifikatet "secure.contoso.com" enligt nedan, kontrollera sedan "Inaktivera äldre TLS" och klicka på OK.

IIS-användargränssnittet

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 platsbindning till en ny webbplats och inaktiverar äldre TLS:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

New-IISSite med egenskapsvärdet Sslflag DisableLegacyTLS:

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 platsbindning 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 man felsöka och testa den här funktionen med Netsh:

  • Lägga till en ny bindning:

    netsh http add sslcert <vanliga parametrar> disablelegacytls=enable

  • Uppdaterar en befintlig bindning:

    netsh http update sslcert <vanliga inställningar> disablelegacytls=aktivera

  • Kontrollera om den är inställd på bindning:

    netsh http show sslcert <vanliga parametrar>

    Granska alternativet för att inaktivera äldre TLS-versioner: Inställd/Inte inställd

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

Tillsammans med Inaktivera äldre TLS har följande tillägg gjorts i HTTP.sys:

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

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: Slå på/av sessionstoken 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 i 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.

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

  • Inaktivera protokollen SSL2, SSL3, TLS1.0 och TLS1.1.

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

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

  • Inaktivera RSA-nyckelutbyte.

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

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

Officiell dokumentation om dessa ändringar på docs.Microsoft.com kommer.

Nästa steg för TLS-versionsframtvingande

Avaktivera äldre TLS ger nya kraftfulla funktioner för att tillämpa golv för TLS-versioner och chifferpaket på specifika certifikat- och slutpunktsbindningar. Du måste också planera namngivningen av de certifikat som utfärdats med den här funktionen aktiverad. Några av övervägandena är:

  • Vill jag att standardsökvägen till min tjänstslutpunkt ska framtvinga TLS 1.2 idag och tillhandahålla ett annat certifikat som en "äldre" säkerhetskopia för användare som behöver TLS 1.0?

  • Ska min standardcertifiering från Contoso, som redan är i bruk, använda funktionen 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 bäst förmedla den rekommenderade användningen av dessa certifikat till mina kunder?

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 för sina onlinetjänster baserat på kundernas efterfrågan.