Les capacités d'application de la version TLS sont désormais disponibles par liaison de certificat sur Windows Server 2019

Auteurs :

Andrew Marshall, responsable principal du programme de sécurité, Sécurité et confiance des clients

Gabriel Montenegro, responsable principal de programmes, Mise en réseau de base

Niranjan Inamdar, ingénieur informaticien confirmé, Mise en réseau de base

Michael Brown, ingénieur informaticien confirmé, Internet Information Services

Ivan Pashov, responsable principal du génie logiciel, Mise en réseau de base

Août 2019

Alors que les ingénieurs du monde entier s'efforcent d'éliminer leurs propres dépendances vis-à-vis de TLS 1.0, ils sont confrontés à un défi complexe, celui de trouver un équilibre entre leurs propres besoins de sécurité et la préparation à la migration de leurs clients. Actuellement, nous avons aidé nos clients à résoudre leurs problèmes en ajoutant la prise en charge de TLS 1.2 aux anciens systèmes d'exploitation, en fournissant de nouveaux formats de journalisation dans IIS pour détecter une utilisation faible de TLS chez les clients, et en fournissant les dernières orientations techniques pour éliminer les dépendances de TLS 1.0.

Microsoft a maintenant le plaisir d'annoncer une nouvelle fonctionnalité puissante dans Windows permettant de faciliter votre transition vers un environnement TLS 1.2+. À partir de KB4490481, Windows Server 2019 vous permet désormais de bloquer l'utilisation de versions TLS faibles avec les certificats individuels que vous désignez. Nous désignons cette fonction par le terme « Désactiver le protocole TLS hérité » qui impose effectivement une version TLS et une suite de chiffrement à tous les certificats que vous sélectionnez.

Désactiver le protocole TLS hérité permet également à un service en ligne d'offrir deux groupes distincts de terminaux sur le même matériel : l'un qui n'autorise que le trafic TLS 1.2+, et l'autre qui accueille le trafic TLS 1.0 hérité. Les modifications sont mises en œuvre dans HTTP.sys, et conjointement à l'émission de certificats supplémentaires, permettent d'acheminer le trafic vers le nouveau point de terminaison avec la version TLS appropriée. Avant ce changement, le déploiement de telles capacités nécessitait un investissement matériel supplémentaire, car ces paramètres étaient uniquement configurables à l'échelle du système par le biais du registre.

Détails du scénario de la fonctionnalité

Un scénario de déploiement commun prévoit un ensemble de matériel dans un centre de données avec des clients aux besoins variés : certains ont besoin de TLS 1.2 comme minimum imposé dès à présent et d'autres n'ont pas fini de supprimer les dépendances à l'égard de TLS 1.0. La figure 1 illustre la sélection de la version TLS et la liaison de certificat comme des actions distinctes. Il s'agit de la fonctionnalité par défaut :

Default TLS Version selection

Figure 1 : Sélection de la version TLS par défaut et fonctionnalité de liaison des certificats

  • secure.contoso.com dirige vos clients vers un point de terminaison de service qui prend uniquement en charge TLS 1.2 et des versions ultérieures.

  • legacy.contoso.com dirige les clients ayant des besoins TLS 1.0 hérités (comme ceux qui migrent encore vers TLS 1.2) vers un point de terminaison qui prend en charge TLS 1.0 pendant une période limitée. Cela permet aux clients de terminer les tests de préparation pour TLS 1.2 sans interruption de service et sans bloquer les autres clients qui sont prêts pour TLS 1.2.

Généralement, il faut deux hôtes physiquement distincts pour gérer l'ensemble du trafic et assurer la mise en œuvre des principes de protection des informations personnelles de la version TLS, car le traitement des demandes TLS avec une version de protocole minimale nécessite la désactivation des protocoles plus faibles par le biais de paramètres de registre à l'échelle du système. Nous avons rendu cette fonctionnalité disponible plus haut dans la pile, où la session TLS est liée au certificat, de sorte qu'une version minimale spécifique de TLS peut être attribuée comme décrit dans la figure 2 ci-dessous.

Enforcing minimum TLS version for a selected certificate

Figure 2 : Désactivation de la fonction TLS héritée en appliquant la version TLS minimale pour un certificat sélectionné, Secure.contoso.com.

Conseils sur le déploiement de la fonctionnalité

La fonctionnalité Désactiver le protocole TLS hérité peut être déployée via l'interface utilisateur d'IIS, au moyen de commandes PowerShell ou d'API HTTP.sys C++.

Option numéro1 : Configuration de l'interface utilisateur IIS (disponible dans Windows 10 version 2004 et Windows Server version 2004 et des versions ultérieures)

Créez une liaison de site pour le certificat SSL « secure.contoso.com » comme indiqué ci-dessous, activez la case à cocher « Désactiver le protocole TLS hérité », puis cliquez sur OK.

IIS UI

Option numéro 2 : PowerShell (disponible dans Windows 10 version 2004 et dans Windows Server version 2004 et les versions ultérieures)

Dans PowerShell, vous pouvez référencer des indicateurs SSL comme suit :

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

Il est pratique de créer des variables nommées plus courtes :

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

Voici un exemple de création d'une liaison vers un nouveau site et de désactivation du protocole TLS hérité :

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

New-IISSite avec la valeur de propriété Sslflag DisableLegacyTLS :

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

Voici un exemple d'ajout d'une liaison vers un site existant et de désactivation du protocole TLS hérité :

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

En outre, il est possible de détecter un problème et de tester cette fonctionnalité à l'aide de Netsh :

  • Ajouter une nouvelle liaison :

    netsh http add sslcert <regular parameters> disablelegacytls=enable

  • Mettre à jour une liaison existante :

    netsh http update sslcert <regular parameters> disablelegacytls=enable

  • Vérifier si le site est défini sur une liaison :

    netsh http show sslcert <regular parameters>

    Surveillez la désactivation des versions TLS héritées : Définie/Non définie

Option numéro 3 : API C++ HTTP.sys (disponible dès maintenant)

Outre la fonctionnalité Désactiver le protocole TLS hérité, les ajouts suivants ont été apportés à HTTP.sys :

  • HTTP_SERVICE_CONFIG_SSL_PARAM.DefaultFlags prend désormais en charge les nouvelles valeurs suivantes :

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET : activez ou désactivez le ticket de session pour un point de terminaison SSL particulier.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS : activez ou désactivez la journalisation des événements étendus pour un point de terminaison SSL particulier. Des événements supplémentaires sont enregistrés dans le journal des événements Windows. Actuellement, il n'y a qu'un seul événement pris en charge qui est enregistré lorsque la liaison SSL échoue.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS : activez ou désactivez les versions TLS héritées pour un point de terminaison SSL particulier. La configuration de cet indicateur désactive TLS1 0/1.1 pour le point de terminaison concerné et restreint les suites de chiffrement pouvant être utilisées à celles de HTTP2.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12 : activez ou désactivez les versions TLS héritées pour un point de terminaison SSL particulier.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2 : activez ou désactivez HTTP/2 pour un point de terminaison SSL particulier.

La manière la plus simple d'activer ou de désactiver cette fonctionnalité au moyen d'un certificat en C++ est d'utiliser l'indicateur HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS fourni par l'API HTTP.sys HttpSetServiceConfiguration.

Lorsque la fonctionnalité Désactiver le protocole TLS hérité est définie, les restrictions suivantes sont appliquées :

  • Désactivez les protocoles SSL2, SSL3, TLS1.0 et TLS1.1.

  • Désactiver les chiffrements DES, 3DES et RC4 (de sorte que seul AES est utilisé).

  • Désactiver le chiffrement AES avec le mode de chaînage CBC (de sorte que seul GCM AES est utilisé).

  • Désactiver l'échange de clés RSA.

  • Désactiver l'échange de clés DH avec une taille de clé inférieure à 2 048.

  • Désactiver les échanges de clés ECDH avec une taille de clé inférieure à 224.

La documentation officielle de ces changements sur docs.Microsoft.com est à venir.

Étapes suivantes pour l'application de la version TLS

La fonctionnalité Désactiver le protocole TLS hérité offre de nouvelles capacités puissantes pour l'application des étages de la suite de chiffrement/version TLS sur des liaisons de certificat/point de terminaison spécifiques. Il vous faut également prévoir la dénomination des certificats délivrés lorsque cette fonctionnalité est activée. Voici quelques-uns des éléments à prendre en compte :

  • Dois-je utiliser le chemin d'accès par défaut de mon point de terminaison de service pour appliquer TLS 1.2 aujourd'hui et fournir un certificat différent comme point d'accès « hérité » de secours pour les utilisateurs qui ont besoin de TLS 1.0 ?

  • Devrais-je utiliser la certification Contoso par défaut, en cours d'utilisation, pour désactiver le protocole TLS hérité ? Si oui, il peut être nécessaire de fournir un certificat legacy.contoso.com et de le lier à un point de terminaison autorisant TLS 1.0.

  • Comment puis-je communiquer au mieux à mes clients l'utilisation recommandée de ces certificats ?

Vous pouvez tirer profit de cette fonctionnalité pour répondre aux besoins des grands groupes de clients, ceux qui ont l'obligation d'utiliser TLS 1.2+, et ceux qui travaillent toujours sur la migration à partir de TLS 1.0, le tout sans aucune dépense de matériel supplémentaire. En plus de la disponibilité actuelle de la liaison de version TLS par certificat dans Windows Server 2019, Microsoft cherchera à rendre disponible la fonctionnalité Désactiver le protocole TLS hérité sur l'ensemble de ses services en ligne, en fonction de la demande des clients.