Funktioner för tvingande TLS-versioner är nu tillgängliga per certifikatbindning Windows Server 2019
Det här inlägget har redigerats av
Andrew Marshall, Principal Security Program Manager, Kundsäkerhet och förtroende
Gabriel Montenegro, Principal Program Manager, Core Networking
Niranjan Inamdar, Senior Software Engineer, Core Networking
Michael Brown, programvarutekniker, Internet Information Services
Pas nätverksanslutning, principal Software Engineering Lead, Core Networking
Augusti 2019
Som tekniker över hela världen arbetar för att eliminera sina egna beroenden på TLS 1.0,kan de mötas av den komplexa utmaningen att balansera sina egna säkerhetsbehov med sina kunders migreringsberedskap. Hittills har vi hjälpte kunderna att lösa de här problemen genom att lägga till stöd för TLS 1.2till äldre operativsystem, genom att skicka in nya loggningsformat i IIS för att upptäcka svag TLS-användning för klienter samt tillhandahålla de senaste tekniska råden för att eliminera TLS 1.0-beroenden.
Nu är Microsoft stolta över att presentera en ny kraftfull funktion i Windows som gör övergången till en TLS 1.2+ värld enklare. Från och med KB4490481kan du nu använda Windows Server 2019 för att blockera svaga TLS-versioner från att användas med enskilda certifikat som du utser. Vi kallar den här funktionen "Inaktivera äldre TLS" och den framtvingar effektivt en TLS-version och chiffersvit på valbara certifikat.
Inaktivera äldre TLS tillåter också att en onlinetjänst erbjuder två distinkta gruppingar av slutpunkter på samma maskinvara: en som endast tillåter TLS 1.2+ trafik och en annan som kan hantera äldre TLS 1.0-trafik. Ändringarna implementeras i HTTP.sys och tillsammans med utfärdningen av ytterligare certifikat kan trafik dirigeras till den nya slutpunkten med rätt TLS-version. Innan den här ändringen gjordes skulle distributionen av sådana funktioner kräva ytterligare maskinvaruinvestering eftersom inställningarna bara kunde konfigureras systemomfattande via registret.
Information om funktionsscenario
Ett vanligt distributionsscenario har en uppsättning maskinvara i ett datacenter med kunder med blandade behov: vissa behöver TLS 1.2 som ett enforced minimum just nu och andra är inte klara med att ta bort TLS 1.0-beroenden. I bild 1 visas val av TLS-version och certifikatbindning som distinkta separata åtgärder. Det här är standardfunktionerna:

Bild 1: Standardval för TLS-version och bindningsfunktioner för certifikat
https://secure.contoso.com dirigerar dina kunder till en tjänstslutpunkt som bara har stöd för TLS 1.2 och högre.
https://legacy.contoso.com Dirigerar kunder med äldre behov av TLS 1.0 (på samma sätt som kunder som fortfarande migrerar till TLS 1.2) till en slutpunkt som har stöd för TLS 1.0 under en begränsad tid. Det gör att kunderna kan slutföra beredskapstestning för TLS 1.2 utan avbrott och utan att blockera andra kunder som är redo för TLS 1.2.
Vanligtvis skulle du behöva två fysiskt separata värdar för att hantera all trafik och tillhandahålla TLS-version tvingande, eftersom service TLS-förfrågningar med en version av minimiprotokoll kräver inaktivera protokoll via systemomfattande registerinställningar. Vi har gjort den här funktionen tillgänglig högre upp i högen, där TLS-sessionen är bunden till certifikatet, så att en viss minsta TLS-version kan tilldelas enligt beskrivningen i bild 2 nedan.

Bild 2: Inaktivera den äldre TLS-funktionen som tvingar lägsta TLS-version för ett markerat certifikat och Secure.contoso.com.
Vägledning om funktionsdistribution
Inaktivera äldre TLS-funktionen kan distribueras via IIS-gränssnittet (Internet Information Services) Server, via PowerShell-kommandon eller C++ HTTP.sys API:er.
Alternativ nr 1: IIS-gränssnittskonfiguration (tillgänglig april 2020)
Skapa en webbplatsbindning för SSL-certifikatet "secure.contoso.com" enligt nedan, markera "Inaktivera äldre TLS" och klicka på OK.

Alternativ nr 2: PowerShell (tillgänglig april 2020)
I PowerShell kan du referera till SSL-flaggor så här:
[Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS
Det är bekvämt 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 webbplats och inaktiverar äldre TLS:
$BindingInformation = "\*:443:"
$siteName = "contoso"
$Thumbprint = $certificate.ThumbPrint
New-IISSite med värdet för egenskapen 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 webbplatsbindning på en befintlig webbplats och inaktiverar äldre TLS:
New-IISSiteBinding -Name "Default Web Site" -BindingInformation $BindingInformation -CertificateThumbPrint $certificate.Thumbprint -Protocol https -SslFlag $DisableLegacyTLS, $CCS -Force -verbose
Dessutom kan du felsöka och testa den här funktionen med Netsh:
Lägga till en ny bindning:
netsh http add sslcert < regular parameters > disablelegacytls=enable
Uppdatera en befintlig bindning:
netsh http update sslcert < regular parameters > disablelegacytls=enable
Kontrollera om den är inställd på en bindning:
netsh http show sslcert < regular parameters>
Håll utkik efter inaktivera äldre TLS-versioner: Ange/inte ange
Alternativ #3: C++ HTTP.sys API:er (finns nu)
Tillsammans med Inaktivera äldre TLS har följande tillägg gjorts i HTTP.sys:
HTTP_SERVICE_CONFIG_SSL_PARAM. DefaultFlags har nu stöd för följande nya värden:
HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: Aktivera/inaktivera sessions ticket 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 i händelseloggen. Från och med nu finns det bara en händelse som stöds och den 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 den slutpunkten, och också chiffersviter som kan användas för HTTP2-chiffersviter.
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 HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS-flaggan som anges av HTTPSetServiceConfiguration-HTTP.sys API:t.
När Inaktivera äldre TLS anges gäller följande begränsningar:
Inaktivera SSL2-, SSL3-, TLS1.0- och TLS1.1-protokoll.
Inaktivera kryptering av chiffer DES, 3DES och RC4 (så endast AES används).
Inaktivera kryptering av AES med CBC-kedjeläge (så endast AES GCM används).
Inaktivera RSA-nyckelutbyte.
Inaktivera DH-nyckelutbyte med en nyckelstorlek som är mindre än 2 048.
Inaktivera ECDH-tangentens börser med en nyckelstorlek som är mindre än 224.
Officiell dokumentation om dessa ändringar den docs.Microsoft.com har att göra.
Nästa steg för tillämpning av TLS-version
Inaktivera äldre TLS ger kraftfulla nya funktioner för att framtvinga TLS-version/chiffersvitens våningsplan på specifika certifikat-/slutpunktsbindningar. Du måste också planera namn på certifikat som utfärdats med den här funktionen aktiverade. Några av övervägandena är:
Vill jag att standardsökvägen till min tjänstslutpunkt ska framtvinga TLS 1.2 i dag och tillhandahålla ett annat certifikat som en säkerhetskopia av en äldre åtkomstpunkt för användare som behöver TLS 1.0?
Ska min standardinställning, som redan används, www.contoso.com att använda Inaktivera äldre TLS? I så fall kan jag behöva ange ett legacy.contoso.com och binda det till en slutpunkt som tillåter TLS 1.0.
Hur kan jag bäst kommunicera den rekommenderade användningen av certifikaten till mina kunder?
Du kan utnyttja den här funktionen för att uppfylla behoven hos stora kundgrupper – de som har en skyldighet 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-versionbindning per certifikat i Windows Server 2019 kommer Microsoft även att försöka göra Inaktivera äldre TLS tillgängligt i onlinetjänsterna baserat på kundens efterfrågan.