Funcionalidades de cumplimiento de la versión de TLS disponibles por enlace de certificados en Windows Server 2019

Autores de esta publicación

Andrew Marshall, Administrador de programas de seguridad principal, Seguridad y confianza del cliente

Gabriel Montenegro, Administrador de programas principal, Redes principales

Niranjan Inamdar, Ingeniero de software sénior, Redes principales

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

Ivan Pashov, Responsable principal de ingeniería de software, Redes principales

Agosto de 2019

A medida que los ingenieros de todo el mundo trabajan para eliminar sus propias dependencias de TLS 1.0, se enfrentan al desafío complejo de equilibrar sus propias necesidades de seguridad con la preparación para la migración de sus clientes. Hasta la fecha, para ayudar a los clientes a resolver estos problemas hemos agregado compatibilidad con TLS 1,2 a los sistemas operativos anteriores, enviado nuevos formatos de registro en IIS para detectar el uso débil de TLS por parte de los clientes, y proporcionado la guía técnica más reciente para eliminar las dependencias de TLS 1.0.

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

Deshabilitar TLS heredado también permite que un servicio en línea ofrezca dos agrupaciones diferentes de puntos de conexión en el mismo hardware: una que solo permita el tráfico de TLS 1.2+ y otra que admita el tráfico de 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 enrute al nuevo punto de conexión con la versión de TLS adecuada. Antes de este cambio, la implementación de estas funcionalidades requeriría una inversión de hardware adicional, ya que esta configuración solo era posible en todo el sistema mediante el Registro.

Detalles del escenario de la característica

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

Selección de la versión de TLS predeterminada

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

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

  • https://legacy.contoso.com dirige a los clientes con necesidades de TLS 1.0 heredada (como aquellos que aún están migrando a TLS 1.2) a un punto de conexión que admite TLS 1.0 durante un tiempo limitado. Esto permite a los clientes finalizar las pruebas de disponibilidad de TLS 1,2 sin interrumpir el servicio y sin bloquear a otros clientes que estén listos para TLS 1.2.

Tradicionalmente, se necesitaban dos hosts físicamente independientes para controlar todo el tráfico y proporcionar el cumplimiento de la versión de TLS, dado que el mantenimiento de las solicitudes de TLS con una versión de protocolo mínima requiere deshabilitar los protocolos más débiles a través de la configuración del Registro en todo el sistema. Hemos hecho que esta funcionalidad esté 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 de TLS mínima específica como se describe en la figura 2 a continuación.

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

Ilustración 2: Característica Deshabilitar TLS heredado que aplica la versión de TLS mínima para un certificado seleccionado, Secure.contoso.com.

Guía para la implementación de la característica

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

Opción 1: Configuración de la interfaz de usuario de IIS (disponible en Windows 10 versión 2004 y Windows Server versión 2004 y posteriores)

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

UI de IIS

Opción 2: PowerShell (disponible en Windows 10 versión 2004 y Windows Server versión 2004 y posteriores)

En PowerShell, puede hacer referencia a las marcas de SSL de la siguiente manera:

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

Es conveniente crear variables con nombres más cortos 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 cómo crear un enlace de sitio a un nuevo sitio y deshabilitar TLS heredada:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

New-IISSite con el valor de propiedad Sslflag DisableLegacyTLS:

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

Un ejemplo de cómo agregar un enlace de sitio a un sitio existente y deshabilitar TLS heredada:

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

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

  • Adición de un nuevo enlace:

    netsh http add sslcert <regular parameters> disablelegacyls=enable

  • Actualización de un enlace existente:

    netsh http update sslcert <regular parameters> disablelegacyls=enable

  • Compruebe si se ha establecido en un enlace:

    netsh http show sslcert <parámetros normales>

    Vea Deshabilitar versiones de TLS heredadas: Establecer o no establecer

Opción 3: API de HTTP.sys de C++ (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 siguientes valores nuevos:

  • 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: habilite o deshabilite el registro de eventos extendidos para un punto de conexión SSL determinado. Los eventos adicionales se registran en el Registro de eventos de Windows. A partir de ahora solo se admite un evento que se registra cuando se produce un error en el protocolo de enlace SSL.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: habilite o deshabilite las versiones de TLS heredadas para un punto de conexión SSL determinado. Al establecer esta marca, se deshabilitará TLS 1.0/1.1 para ese punto de conexión y también se restringirán los conjuntos de cifrado que se pueden usar para los conjuntos de cifrado HTTP2.

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

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: Habilite/Deshabilite HTTP/2 para un punto de conexión SSL determinado.

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

Cuando se ha establecido Deshabilitar TLS heredado, se aplican las restricciones siguientes:

  • Deshabilitar los protocolos SSL2, SSL3, TLS 1.0 y TLS 1.1.

  • Deshabilitar los cifrados DES, 3DES y RC4 (de modo que solo se use AES).

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

  • Deshabilitar el intercambio de claves RSA.

  • Deshabilitar el intercambio de claves DH con un tamaño de clave inferior a 2048.

  • Deshabilitar los intercambios de claves ECDH con un tamaño de clave inferior a 224.

Próximamente habrá disponible documentación oficial de estos cambios en docs.Microsoft.com.

Pasos siguientes para el cumplimiento de la versión de TLS

Deshabilitar TLS heredado proporciona nuevas capacidades eficaces para aplicar conjuntos de versión de TLS y cifrado en enlaces de punto de conexión o de certificado específicos. También requiere la planeación de la nomenclatura de los certificados emitidos con esta funcionalidad habilitada. Entre algunas de las consideraciones se incluyen:

  • ¿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?

  • ¿Debe mi certificación predeterminada www.contoso.com ya en uso utilizar Deshabilitar TLS heredado? Si es así, es posible que deba proporcionar un certificado de 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: aquellos que tengan la obligación de usar TLS 1.2+ y los que sigan trabajando en la migración de TLS 1.0, todo ello sin un gasto de hardware adicional. Además de la disponibilidad actual del enlace de la versión de TLS por certificado en Windows Server 2019, Microsoft buscará que Deshabilitar TLS heredado esté disponible en sus servicios en línea en función de la demanda de los clientes.