Las funcionalidades de cumplimiento de versiones tls ahora están disponibles por enlace de certificado en Windows Server 2019

Esta publicación se ha creado mediante

Andrew Marshall, director del programa de seguridad principal, seguridad y confianza del cliente

Gabriel Montenegro, Jefe de programa principal, Redes principales

Niranjan Inamdar, ingeniero sénior de software, Core Networking

Michael Brown, ingeniero sénior de software, Internet Information Services

Iván Pashov, jefe de ingeniería de software principal, Redes principales

Agosto de 2019

A medida que los ingenieros de todo el mundo trabajan para eliminar sus propias dependencias en TLS 1.0,se topen con el complejo reto de equilibrar sus propias necesidades de seguridad con la preparación de migración de sus clientes. Hasta la fecha, hemos ayudado a los clientes a solucionar estos problemas agregando compatibilidad con TLS 1.2a sistemas operativos antiguos, enviando nuevos formatos de registro en IIS para detectar un uso débil de TLS por parte de los clientes, así como proporcionando las últimas instrucciones técnicas para eliminar dependencias de TLS 1.0.

Ahora Microsoft se complace en anunciar una nueva y eficaz característica en Windows para facilitar la transición a un mundo TLS 1.2+. A partir de KB4490481,Windows Server 2019 ahora le permite impedir que las versiones de TLS débiles se usen con los certificados individuales que designe. Llamamos a esta característica "Deshabilitar TLS heredado" y aplica de forma eficaz una versión TLS y un piso de conjunto de aplicaciones de cifrado en cualquier certificado que seleccione.

Deshabilitar TLS heredado también permite que un servicio en línea ofrezca dos agrupaciones distintas de puntos de conexión en el mismo hardware: una que solo permite tráfico TLS 1.2+ y otra que admite tráfico TLS 1.0 heredado. Los cambios se implementan en HTTP.sys y, junto con la emisión de certificados adicionales, permiten que el tráfico se enruta al nuevo punto de conexión con la versión TLS adecuada. Antes de este cambio, la implementación de estas capacidades requeriría una inversión de hardware adicional, ya que dichas configuraciones solo eran configurables en todo el sistema a través del Registro.

Detalles del escenario de características

Un escenario de implementación común presenta un conjunto de hardware en un centro de datos con clientes de necesidades mixtas: algunos necesitan TLS 1.2 como mínimo obligatorio en este momento y otros no han terminado de quitar dependencias de TLS 1.0. En la figura 1 se muestra la selección de versiones TLS y el enlace de certificados como acciones distintas. Esta es la funcionalidad predeterminada:

Selección predeterminada de la versión TLS

Figura 1: Selección predeterminada de la versión TLS y funcionalidad de enlace de certificados

  • https://secure.contoso.com dirige a los clientes a un punto de conexión de servicio que solo admita TLS 1.2 y versiones posteriores.

  • https://legacy.contoso.com dirige a los clientes con necesidades de TLS 1.0 heredadas (como los que aún migran a TLS 1.2) a un punto de conexión compatible con TLS 1.0 durante un tiempo limitado. Esto permite a los clientes finalizar las pruebas de preparación de TLS 1.2 sin interrupciones en el servicio y sin bloquear a otros clientes que estén listos para TLS 1.2.

Tradicionalmente, necesita dos hosts físicamente independientes para controlar todo el tráfico y proporcionar la aplicación de la versión TLS, ya que el mantenimiento de las solicitudes TLS con una versión mínima de protocolo requiere deshabilitar protocolos más débiles a través de la configuración del Registro de todo el sistema. Hemos hecho que esta funcionalidad esté disponible más arriba en la pila, donde la sesión de TLS está enlazada al certificado, por lo que se puede asignar una versión mínima específica de TLS como se describe en la figura 2 siguiente.

Exigir la versión mínima de TLS para un certificado seleccionado

Figura 2: Deshabilitar la característica TLS heredada que obliga a la versión mínima de TLS para un certificado seleccionado, Secure.contoso.com.

Instrucciones de implementación de características

La característica Deshabilitar TLS heredado se puede implementar a través de la interfaz de usuario del servidor Internet Information Services (IIS), a través de comandos de PowerShell o HTTP.sys API de C++.

Opción #1: configuración de la interfaz de usuario de IIS (disponible en abril de 2020)

Cree un enlace de sitio para el certificado SSL "secure.contoso.com" como se muestra a continuación, active "Deshabilitar TLS heredado" y haga clic en Aceptar.

Interfaz de usuario de IIS

Opción #2: PowerShell (disponible en abril de 2020)

En PowerShell, puede hacer referencia a marcas SSL como esta:

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

Es conveniente crear variables con nombre más cortas para ellas:

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

Un ejemplo de creación de un enlace de sitio a un nuevo sitio y deshabilitar TLS heredado:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

New-IISSite con el valor de la propiedad DisableLegacyTLS de Sslflag:

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

Un ejemplo de agregar un enlace de sitio a un sitio existente y deshabilitar TLS heredado:

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

Además, se puede solucionar problemas y probar esta característica con Netsh:

  • Agregar un nuevo enlace:

    netsh http add sslcert < regular parameters > disablelegacytls=enable

  • Actualizar un enlace existente:

    netsh http update sslcert < regular parameters > disablelegacytls=enable

  • Compruebe si está establecido en un enlace:

    netsh http mostrar parámetros regulares sslcert <>

    Buscar deshabilitar versiones TLS heredadas: Establecer o no establecer

Opción #3: C++ HTTP.sys API (disponible ahora)

Junto con Deshabilitar TLS heredado, se han realizado las siguientes adiciones a HTTP.sys:

  • HTTP_SERVICE_CONFIG_SSL_PARAM. DefaultFlags ahora admite los nuevos valores siguientes:

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: Habilitar o deshabilitar vale de sesión para un punto de conexión SSL determinado.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: Habilitar o deshabilitar el registro de eventos extendidos para un punto de conexión SSL determinado. Los eventos adicionales se registran en Windows registro de eventos. A partir de ahora, solo se admite un evento que se registra cuando se produce un error en el apretón de manos SSL.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: Habilitar o deshabilitar versiones TLS heredadas para un punto de conexión SSL determinado. Establecer esta marca deshabilitará TLS1.0/1.1 para ese punto de conexión y también restringirá los conjuntos de cifrado que se pueden usar para conjuntos de cifrado HTTP2.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: Habilitar o deshabilitar TLS1.2 para un punto de conexión SSL determinado.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: Habilitar o deshabilitar HTTP/2 para un punto de conexión SSL determinado.

La forma más sencilla de habilitar o deshabilitar esta funcionalidad por certificado en C++ es con la marca de HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS proporcionada por la API HttpSetServiceConfiguration HTTP.sys.

Cuando se establece Deshabilitar TLS heredado, se aplican las siguientes restricciones:

  • Deshabilite los protocolos SSL2, SSL3, TLS1.0 y TLS1.1.

  • Deshabilite los cifrados DES, 3DES y RC4 (por lo que solo se usa AES).

  • Deshabilite el cifrado de cifrado AES con el modo de encadenamiento CBC (por lo que solo se usa AES GCM).

  • Deshabilite el intercambio de claves RSA.

  • Deshabilite el intercambio de claves DH con un tamaño de clave menor que 2048.

  • Deshabilite los intercambios de claves de ECDH con un tamaño de clave menor que 224.

La documentación oficial de estos cambios en docs.Microsoft.com próximamente.

Pasos siguientes para la aplicación de la versión TLS

Deshabilitar TLS heredado proporciona nuevas y eficaces capacidades para exigir la versión tls/pisos de conjuntos de aplicaciones de cifrado en determinados enlaces de certificado o punto de conexión. También requiere que planee la nomenclatura de los certificados emitidos con esta funcionalidad habilitada. Algunas de las consideraciones son:

  • ¿Quiero que la ruta de acceso predeterminada a mi punto de conexión de servicio aplique TLS 1.2 hoy y proporcione un certificado diferente como punto de acceso "heredado" de copia de seguridad para los usuarios que necesitan TLS 1.0?

  • ¿Debería mi certificación predeterminada ya en uso www.contoso.com deshabilitar TLS heredado? Si es así, es posible que deba proporcionar un certificado legacy.contoso.com y enlazarlo a un punto de conexión que permita TLS 1.0.

  • ¿Cómo puedo comunicar mejor el uso recomendado de estos certificados a mis clientes?

Puede aprovechar esta característica para satisfacer las necesidades de grandes grupos de clientes: los que tienen la obligación de usar TLS 1.2 y los que siguen trabajando en la migración lejos de TLS 1.0, todo ello sin gastos de hardware adicionales. Además de la disponibilidad actual de enlace de versión TLS por certificado en Windows Server 2019, Microsoft buscará que Disable Legacy TLS esté disponible en todos sus servicios en línea en función de la demanda del cliente.