TLS-versie afdwingingsmogelijkheden nu beschikbaar per certificaatbinding op Windows Server 2019
Dit bericht is geschreven door
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, Internet Information Services
Ivan Pashov, Principal Software Engineering Lead, Core Networking
Augustus 2019
Terwijl technici over de hele wereld hun eigen afhankelijkheden van TLS 1.0verwijderen, lopen ze tegen de complexe uitdaging aan om hun eigen beveiligingsbehoeften in evenwicht te brengen met de migratiebereidheid van hun klanten. Tot op heden hebben we klanten geholpen deze problemen op te lossen door TLS 1.2-ondersteuningtoe te voegen aan oudere besturingssystemen, door nieuwe logboekregistratienota s te verzenden in IIS voor het detecteren van zwak TLS-gebruik door clients en door de meest recente technische richtlijnen te bieden voor het elimineren van TLS 1.0-afhankelijkheden.
Microsoft kondigt nu een krachtige nieuwe functie aan in Windows om de overgang naar een TLS 1.2+ wereld eenvoudiger te maken. Vanaf KB4490481kunt u met Windows Server 2019 nu blokkeren dat zwakke TLS-versies worden gebruikt met afzonderlijke certificaten die u aanwijzen. We noemen deze functie 'Oudere TLS uitschakelen' en het dwingt effectief een TLS-versie en codeersuitevloer af op een certificaat dat u selecteert.
Met Oudere TLS uitschakelen kan een onlineservice ook twee verschillende groeperingen van eindpunten op dezelfde hardware aanbieden: een waarmee alleen TLS 1.2+ verkeer kan worden gebruikt en een andere service die geschikt is voor oud TLS 1.0-verkeer. De wijzigingen worden geïmplementeerd in HTTP.sys en in combinatie met de uitgifte van aanvullende certificaten kan verkeer worden doorgeleid naar het nieuwe eindpunt met de juiste TLS-versie. Vóór deze wijziging zou het implementeren van dergelijke mogelijkheden een extra investering in hardware vereisen, omdat dergelijke instellingen alleen via het register kunnen worden geconfigureerd.
Details van functiescenario's
Een veelvoorkomende implementatiescenario bevat één set hardware in een datacenter met klanten met gemengde behoeften: sommige hebben TLS 1.2 op dit moment als een afgedwongen minimum nodig en andere zijn nog niet klaar met het verwijderen van TLS 1.0-afhankelijkheden. Afbeelding 1 illustreert TLS-versieselectie en certificaatbinding als afzonderlijke acties. Dit is de standaardfunctionaliteit:

Afbeelding 1: Standaard TLS-versieselectie en certificeringsbindingsfunctionaliteit
https://secure.contoso.com stuurt uw klanten naar een service-eindpunt dat alleen TLS 1.2 en hoger ondersteunt.
https://legacy.contoso.com stuurt klanten met oudere TLS 1.0-behoeften (zoals klanten die nog steeds migreren naar TLS 1.2) naar een eindpunt dat TLS 1.0 tijdelijk ondersteunt. Hierdoor kunnen klanten de gereedheidstests voor TLS 1.2 voltooien zonder serviceonderbreking en zonder dat andere klanten die klaar zijn voor TLS 1.2, worden geblokkeerd.
Traditioneel hebt u twee fysiek afzonderlijke hosts nodig om al het verkeer af te handelen en TLS-versiehandhaving te bieden, omdat voor het onderhouden van TLS-aanvragen met een minimale protocolversie zwakkere protocollen moeten worden uitschakelen via registerinstellingen voor het hele systeem. We hebben deze functionaliteit hoger in de stapel beschikbaar gemaakt, waarbij de TLS-sessie is gebonden aan het certificaat, zodat een specifieke minimale TLS-versie kan worden toegewezen, zoals wordt beschreven in afbeelding 2 hieronder.

Afbeelding 2: Oudere TLS-functie uitschakelen en minimale TLS-versie afdwingen voor een geselecteerd certificaat, Secure.contoso.com.
Richtlijnen voor functie-implementatie
De functie Oudere TLS uitschakelen kan worden geïmplementeerd via de Internet Information Services (IIS) Server UI, via PowerShell-opdrachten of C++ HTTP.sys API's.
Optie #1: IIS UI-configuratie (beschikbaar april 2020)
Maak een sitebinding voor het SSL-certificaat 'secure.contoso.com' zoals hieronder wordt weergegeven, controleer vervolgens 'Oudere TLS uitschakelen' en klik op OK.

Optie #2: PowerShell (beschikbaar vanaf april 2020)
In PowerShell kunt u als volgende verwijzen naar SSL-vlaggen:
[Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS
Het is handig om kortere benoemde variabelen voor deze variabelen te maken:
$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"
Een voorbeeld van het maken van een sitebinding voor een nieuwe site en het uitschakelen van oudere TLS:
$BindingInformation = "\*:443:"
$siteName = "contoso"
$Thumbprint = $certificate.ThumbPrint
New-IISSite met de eigenschapSlflag DisableLegacyTLS:
New-IISSite $siteName "$env:systemdrive\\inetpub\\wwwroot" "\*:443:secure.contoso.com" https $certificate.Thumbprint $DisableLegacyTLS $storeLocation -passthru
Een voorbeeld van het toevoegen van een sitebinding aan een bestaande site en het uitschakelen van oudere TLS:
New-IISSiteBinding -Name "Default Web Site" -BindingInformation $BindingInformation -CertificateThumbPrint $certificate.Thumbprint -Protocol https -SslFlag $DisableLegacyTLS, $CCS -Force -verbose
Bovendien kunt u deze functie oplossen en testen met Netsh:
Een nieuwe binding toevoegen:
netsh http add sslcert < regular parameters > disablelegacytls=enable
Een bestaande binding bijwerken:
netsh http update sslcert < regular parameters > disablelegacytls=enable
Controleer of deze is ingesteld op een binding:
netsh http show sslcert < regular parameters>
Let op Oudere TLS-versies uitschakelen: Set/Not Set
Optie #3: C++ HTTP.sys API's (nu beschikbaar)
Naast Oudere TLS uitschakelen zijn de volgende toevoegingen aangebracht aan HTTP.sys:
HTTP_SERVICE_CONFIG_SSL_PARAM. DefaultFlags ondersteunt nu de volgende nieuwe waarden:
HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: Sessieticket in- of uitschakelen voor een bepaald SSL-eindpunt.
HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: Uitgebreide logboekregistratie voor gebeurtenissen in- of uitschakelen voor een bepaald SSL-eindpunt. Aanvullende gebeurtenissen worden aangemeld bij Windows gebeurtenislogboek. Er wordt vanaf nu slechts één gebeurtenis ondersteund die wordt geregistreerd wanneer de SSL-handshake mislukt.
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: Oudere TLS-versies in- of uitschakelen voor een bepaald SSL-eindpunt. Als u deze vlag instelt, wordt TLS1.0/1.1 voor dat eindpunt uitgeschakeld en worden ook codeersuites beperkt die kunnen worden gebruikt voor HTTP2-coderingssuites.
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12 : TLS1.2 in- of uitschakelen voor een bepaald SSL-eindpunt.
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: HTTP/2 inschakelen/uitschakelen voor een bepaald SSL-eindpunt.
De eenvoudigste manier om deze functionaliteit in- of uit te schakelen per certificaat in C++ is met de HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS vlag die wordt geleverd door de HttpSetServiceConfiguration HTTP.sys API.
Wanneer Oudere TLS uitschakelen is ingesteld, worden de volgende beperkingen afgedwongen:
Schakel SSL2-, SSL3-, TLS1.0- en TLS1.1-protocollen uit.
Versleutelingscodes DES, 3DES en RC4 uitschakelen (dus alleen AES wordt gebruikt).
Versleutelingscodering AES uitschakelen met de CBC-kettingmodus (dus alleen AES GCM wordt gebruikt).
RSA-sleuteluitwisseling uitschakelen.
Schakel DH-sleuteluitwisseling uit met een sleutelgrootte kleiner dan 2048.
EcDH-sleuteluitwisselingen uitschakelen met een sleutelgrootte kleiner dan 224.
Officiële documentatie van deze wijzigingen op docs.Microsoft.com is aanstaande.
Volgende stappen voor TLS-versiehandhaving
Oudere TLS uitschakelen biedt krachtige nieuwe mogelijkheden voor het afdwingen van TLS-versie-/cipher-suite-verdiepingen op specifieke certificaat-/eindpuntbindingen. U moet ook de naam van de certificaten plannen die met deze functionaliteit zijn ingeschakeld. Enkele aandachtspunten zijn:
Wil ik dat het standaardpad naar mijn service-eindpunt vandaag TLS 1.2 afdwingt en een ander certificaat op te geven als back-uptoegangspunt voor gebruikers die TLS 1.0 nodig hebben?
Moet mijn standaardinstelling, die al in gebruik is, www.contoso.com oudere TLS uitschakelen? Zo ja, dan moet ik mogelijk een certificaat legacy.contoso.com aan een eindpunt dat TLS 1.0 toestaat.
Hoe kan ik het aanbevolen gebruik van deze certificaten het beste communiceren met mijn klanten?
U kunt deze functie gebruiken om te voldoen aan de behoeften van grote groepen klanten: personen die verplicht zijn TLS 1.2+ te gebruiken, en personen die nog steeds werken aan de migratie buiten TLS 1.0, allemaal zonder extra hardwarekosten. Naast de huidige beschikbaarheid van TLS-versiebinding per certificaat in Windows Server 2019, zal Microsoft oudere TLS uitschakelen beschikbaar maken voor alle onlineservices op basis van klantvraag.