Mogelijkheden voor het afdwingen van TLS-versies per certificaatbinding nu beschikbaar in 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

Wanneer technici wereldwijd proberen minder afhankelijk te worden van TLS 1.0 krijgen ze te maken met de ingewikkelde uitdaging om hun eigen beveiligingsbehoeften af te wegen tegen de bereidheid van hun klanten om te migreren. Tot op heden hebben we klanten geholpen deze problemen op te lossen door TLS 1.2-ondersteuning toe te voegen aan oudere besturingssystemen, door nieuwe logboekindelingen in IIS te verzenden voor het detecteren van zwak TLS-gebruik door clients en de nieuwste technische richtlijnen te bieden voor het elimineren van TLS 1.0-afhankelijkheden.

Microsoft kondigt nu met trots een krachtige nieuwe Windows-functie aan waarmee uw overstap naar TLS 1.2 en hoger een stuk eenvoudiger wordt. Te beginnen met KB4490481 stelt Windows Server 2019 u nu in staat om het gebruik van zwakke TLS-versies bij afzonderlijke certificaten die u aanwijst, te blokkeren. We noemen deze functie 'Verouderde TLS uitschakelen' en dwingt effectief een TLS-versie en coderingssuitevloer af op elk certificaat dat u selecteert.

Als u verouderde TLS uitschakelt, kan een onlineservice ook twee verschillende groeperingen van eindpunten op dezelfde hardware aanbieden: één die alleen TLS 1.2+ verkeer toestaat en een andere service die geschikt is voor verouderd TLS 1.0-verkeer. De wijzigingen worden geïmplementeerd in HTTP.sys en met de uitgifte van aanvullende certificaten kunnen verkeer worden doorgestuurd naar het nieuwe eindpunt met de juiste TLS-versie. Vóór deze wijziging vormde het implementeren van dergelijke mogelijkheden een extra hardware-investering, omdat dergelijke instellingen alleen via een register op alle systemen konden worden geconfigureerd.

Informatie over het functiescenario

Een gangbaar implementatiescenario omvat één set hardware in een datacentrum met klanten met verschillende behoeften: sommige klanten hebben TLS 1.2 momenteel als een afgedwongen minimumrecht nodig terwijl andere klanten nog niet klaar zijn met het verwijderen van TLS 1.0-afhankelijkheden. In afbeelding 1 worden het selecteren van de TLS-versie en certificaatbinding als twee duidelijk andere acties voorgesteld. Dit is de standaardfunctionaliteit:

Default TLS Version selection

Afbeelding 1: Standaardselectie van TLS-versie en functionaliteit voor certificaatbinding

  • secure.contoso.com uw klanten doorsturen naar een service-eindpunt dat alleen TLS 1.2 en hoger ondersteunt.

  • legacy.contoso.com klanten met verouderde TLS 1.0-behoeften (zoals die nog steeds migreren naar TLS 1.2) naar een eindpunt dat TLS 1.0 gedurende een beperkte tijd ondersteunt. Hierdoor kunnen klanten de gereedheidstesten voor TLS 1.2 afronden zonder serviceonderbreking en zonder andere klanten die wel klaar zijn voor TLS 1.2, te blokkeren.

Normaal gesproken hebt u twee fysiek afzonderlijke hosts nodig om al het verkeer af te handelen en tls-versie af tedwingen, omdat het afdwingen van TLS-aanvragen met een minimale protocolversie vereist dat zwakkere protocollen worden uitgeschakeld via registerinstellingen voor het hele systeem. We hebben deze functionaliteit hoger in de stack beschikbaar gemaakt, waarbij de TLS-sessie gebonden is aan het certificaat, zodat een specifieke minimale TLS-versie kan worden toegewezen, zoals beschreven in afbeelding 2 hieronder.

Enforcing minimum TLS version for a selected certificate

Afbeelding 2: Verouderde TLS-functie uitschakelen die minimale TLS-versie afdwingt voor een geselecteerd certificaat, Secure.contoso.com.

Hulp bij het implementeren van functies

De functie Verouderde TLS uitschakelen kan worden geïmplementeerd via de IIS-servergebruikersinterface (Internet Information Services), via PowerShell-opdrachten of via C++ HTTP.sys-API's.

Optie 1: IIS UI-configuratie (beschikbaar in Windows 10 versie 2004 en Windows Server versie 2004 en hoger)

Maak een sitebinding voor het SSL-certificaat 'secure.contoso.com' (zie hieronder), vink vervolgens Verouderde TLS uitschakelen aan en klik op OK.

IIS UI

Optie 2: PowerShell (beschikbaar in Windows 10 versie 2004 en Windows Server versie 2004 en hoger)

In PowerShell kunt u als volgt naar SSL-vlaggen verwijzen:

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

Het is handig om variabelen met kortere namen 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 op een nieuwe site en het uitschakelen van een verouderde TLS:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

Nieuwe IISSite met eigenschapswaarde Sslflag 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 een verouderde TLS:

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

Daarnaast kunt u deze functie met Netsh troubleshooten en testen:

  • Een nieuwe binding toevoegen:

    netsh http add sslcert <normale parameters> disablelegacytls=enable

  • Een bestaande binding bijwerken:

    netsh http update sslcert <normale parameters> disablelegacytls=enable

  • Controleer of deze is ingesteld voor een binding:

    netsh http show sslcert <normale parameters>

    Controleren op verouderde TLS-versies uitschakelen: Instellen/niet instellen

Optie 3: C++ HTTP.sys-API's (nu beschikbaar)

Naast Verouderde TLS uitschakelen zijn de volgende zaken aan HTTP.sys toegevoegd:

  • 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 van gebeurtenissen in- of uitschakelen voor een bepaald SSL-eindpunt. Aanvullende gebeurtenissen worden geregistreerd in het 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: verouderde 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 coderingssuites beperkt die kunnen worden gebruikt voor HTTP2-coderingssuites.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: TLS1.2 inschakelen/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 per certificaat in C++ in of uit te schakelen, is met de HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS vlag die wordt geleverd door de HTTP.sys-API van HttpSetServiceConfiguration.

Wanneer Verouderde TLS uitschakelen is ingesteld, worden de volgende beperkingen afgedwongen:

  • Protocollen voor SSL2, SSL3, TLS1.0 en TLS1.1 uitschakelen.

  • Versleutelingscoderingen DES, 3DES en RC4 uitschakelen (zodat alleen AES wordt gebruikt).

  • Versleutelingscodering AES uitschakelen met de CBC-ketenvormingsmodus (zodat alleen AES GCM wordt gebruikt).

  • RSA-sleuteluitwisseling uitschakelen.

  • HD-sleuteluitwisseling uitschakelen bij sleutelgrootte kleiner dan 2048.

  • ECDH-sleuteluitwisseling uitschakelen bij sleutelgrootte kleiner dan 224.

De officiële documentatie van deze wijzigingen zal binnenkort beschikbaar zijn op docs.Microsoft.com.

Volgende stappen voor het afdwingen van de TLS-versie

Verouderde TLS uitschakelen biedt krachtige nieuwe mogelijkheden voor het afdwingen van TLS-versie-/coderingssuiteverdiepingen op specifieke certificaat-/eindpuntbindingen. Daarnaast vereist Verouderde TLS uitschakelen dat u de benaming van de certificaten die worden uitgegeven wanneer deze functionaliteit is ingeschakeld, plant. De volgende zaken zijn het overwegen waard:

  • Wil ik dat het standaardpad naar mijn service-eindpunt TLS 1.2 vandaag afdwingt en wil ik een ander certificaat als een 'verouderd' back-uptoegangspunt aanbieden aan gebruikers die TLS 1.0 nodig hebben?

  • Moet mijn standaard,al in gebruik contoso-certificering verouderde TLS uitschakelen gebruiken? Zo ja, moet ik mogelijk een legacy.contoso.com-certificaat verstrekken en aan een eindpunt dat TLS 1.0 toestaat, verbinden.

  • Hoe kan ik het aanbevolen gebruik van deze certificaten het beste aan mijn klanten overbrengen?

U kunt deze functie gebruiken om te voldoen aan de behoeften van grote groepen klanten, degenen met een verplichting om TLS 1.2+ te gebruiken en degenen die nog steeds aan de migratie werken, weg van TLS 1.0, allemaal zonder extra hardwareuitgaven. Naast de huidige beschikbaarheid van TLS-versiebinding per certificaat in Windows Server 2019, zal Microsoft ervoor zorgen dat Verouderde TLS uitschakelen beschikbaar is in de onlineservices op basis van de vraag van de klant.