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, hemos enviado nuevos formatos de registro en IIS para detectar el uso débil de TLS por parte de los clientes y hemos 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 límite inferior de 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 versiones posteriores y otra que admita el tráfico de TLS 1.0 heredado. Los cambios se implementan en HTTP.sys y, 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.
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:
Figura 1: selección de versión de TLS predeterminada y funcionalidad de enlace de certificados
secure.contoso.com dirige a los clientes a un punto de conexión de servicio que solo admite TLS 1.2 y versiones posteriores.
legacy.contoso.com dirige a los clientes con necesidades de TLS 1.0 heredado (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.
Figura 2: característica Deshabilitar TLS heredado que aplica la versión de TLS mínima para un certificado seleccionado, Secure.contoso.com.
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 UI 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.
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 <parámetros normales> disablelegacytls=enable
Actualización de un enlace existente:
netsh http update sslcert <parámetros normales> disablelegacytls=enable
Compruebe si se ha establecido en un enlace:
netsh http show sslcert <parámetros normales>
Observe las versiones de Deshabilitar TLS heredado: establecer o no establecer
Junto con Deshabilitar TLS heredado, se han realizado las siguientes adiciones a HTTP.sys:
HTTP_SERVICE_CONFIG_SSL_PARAM.DefaultFlags ahora admite los siguientes nuevos valores:
HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: habilitar o deshabilitar el vale de sesión para un punto de conexión de SSL determinado.
HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: habilitar o deshabilitar el registro de eventos extendido para un punto de conexión de 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: habilitar o deshabilitar las versiones de TLS heredadas para un punto de conexión de SSL determinado. Al establecer esta marca, se deshabilita TLS 1.0 o 1.1 para ese punto de conexión y se restringen los conjuntos de cifrado que se pueden usar para los conjuntos de cifrado HTTP2.
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: habilitar o deshabilitar TLS 1.2 para un punto de conexión de SSL determinado.
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: habilitar o deshabilitar HTTP/2 para un punto de conexión de SSL determinado.
La manera más sencilla de habilitar o deshabilitar esta funcionalidad por cada certificado en C++ es con la marca HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS que proporciona la API de HTTP.sys HttpSetServiceConfiguration.
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).
Deshabilitar el cifrado AES con el modo de encadenamiento CBC (de modo que solo se use 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.
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:
¿Deseo que la ruta de acceso predeterminada a mi punto de conexión de servicio aplique TLS 1.2 hoy, y que 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 de Contoso 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 sacar provecho de esta característica para satisfacer las necesidades de grandes grupos de clientes: aquellos que tengan la obligación de usar TLS 1.2 o versiones posteriores 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.