As capacidades de imposição da versão TLS agora disponíveis por associação de certificado no Windows Server 2019
Esta postagem foi criada por
Andrew Marshall, gerente do Programa de Segurança Principal, Segurança e Confiança do Cliente
Gabriel Montenegro, gerente do Programa Principal, Sistema de Rede Básico
Niranjan Inamdar, engenheiro de Software Sênior, Sistema de Rede Básico
Michael Brown, engenheiro de Software Sênior, Serviços de Informações da Internet
Ivan Pashov, diretor de Engenharia de Software, Sistema de Rede Básico
Agosto de 2019
Enquanto os engenheiros em todo o mundo trabalham para eliminar as próprias dependências no TLS 1.0, eles enfrentam o complexo desafio de equilibrar suas necessidades de segurança com a preparação de migração de seus clientes. Até o momento, ajudamos os clientes a resolver esses problemas adicionando suporte de TLS 1.2 a sistemas operacionais mais antigos, enviando novos formatos de log no IIS para detectar o uso de TLS fraco pelos clientes, bem como fornecendo as mais recentes diretrizes técnicas para eliminar as dependências TLS 1.0.
Agora, a Microsoft tem o prazer de anunciar um novo recurso poderoso no Windows para facilitar a transição para um mundo TLS 1.2+. A partir do KB4490481, o Windows Server 2019 agora permite bloquear o uso de versões TLS fracas com certificados individuais designados por você. Chamamos esse recurso de "Desabilitar o TLS herdado" e ele impõe efetivamente uma versão TLS e um piso do conjunto de criptografia em qualquer certificado selecionado.
Desabilitar o TLS herdado também permite que um serviço online ofereça dois agrupamentos distintos de pontos de extremidade no mesmo hardware: um que permite apenas tráfego TLS 1.2+ e outro que acomoda o tráfego TLS 1.0 herdado. As alterações são implementadas em HTTP.sys e, com a emissão de certificados adicionais, permitem que o tráfego seja roteado para o novo ponto de extremidade com a versão TLS apropriada. Antes dessa alteração, a implantação dessas capacidades exigiria um investimento adicional de hardware, pois essas configurações eram apenas de todo o sistema por meio do registro.
Detalhes do cenário do recurso
Um cenário de implantação comum apresenta um conjunto de hardware em um datacenter com clientes de necessidades mistas: algumas precisam de TLS 1.2 como um mínimo imposto no momento, e outras não são concluídas pela remoção de dependências TLS 1.0. A figura 1 ilustra a seleção da versão TLS e a associação de certificado como ações separadas de forma distinta. Esta é a funcionalidade padrão:
Figura 1: seleção de versão TLS padrão e funcionalidade de associação de certificado
secure.contoso.com direciona clientes para um ponto de extremidade de serviço com suporte somente para o TLS 1.2 e superior.
legacy.contoso.com direciona clientes com necessidades de TLS 1.0 herdado (como aquelas que ainda estão migrando para TLS 1.2) para um ponto de extremidade que dá suporte a TLS 1.0 por um período limitado. Isso permite que os clientes concluam o teste de preparação para o TLS 1.2 sem interrupção do serviço e sem bloquear outros clientes que estão prontos para o TLS 1.2.
Tradicionalmente, você precisaria de dois hosts separados fisicamente para lidar com todo o tráfego e fornecer a imposição de versões TLS, pois a manutenção de solicitações TLS com uma versão mínima de protocolo requer a desabilitação de protocolos mais fracos por meio de configurações de registro de todo o sistema. Disponibilizamos essa funcionalidade acima da pilha, onde a sessão TLS está associada ao certificado, de modo que uma versão mínima TLS específica pode ser atribuída conforme descrito na figura 2 abaixo.
Figura 2: desabilitar o recurso TLS herdado impondo a versão mínima TLS para um certificado selecionado, Secure.contoso.com.
Diretrizes de implantação do recurso
O recurso Desabilitar o TLS herdado pode ser implantado por meio da interface do usuário do servidor do IIS (Serviços de Informações da Internet), por meio de comandos do PowerShell ou das APIs C++ HTTP.sys.
Opção nº 1: configuração da interface do usuário do IIS (disponível no Windows 10 versão 2004 e Windows Server versão 2004 e mais recente)
Crie uma associação de site para o certificado SSL "secure.contoso.com", como mostrado abaixo, marque "Desabilitar o TLS herdado" e clique em OK.
Opção nº 2: PowerShell (disponível no Windows 10 versão 2004 e Windows Server versão 2004 e mais recente)
No PowerShell, você pode fazer referência a sinalizadores de SSL como este:
[Microsoft.Web.Administration.SslFlags]::DisableLegacyTLS
É conveniente criar variáveis nomeadas mais curtas para elas:
$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"
Um exemplo de como criar uma associação de site a um novo site e desabilitar o TLS herdado:
$BindingInformation = "\*:443:"
$siteName = "contoso"
$Thumbprint = $certificate.ThumbPrint
New-IISSite com o valor da propriedade Sslflag DisableLegacyTLS:
New-IISSite $siteName "$env:systemdrive\\inetpub\\wwwroot" "\*:443:secure.contoso.com" https $certificate.Thumbprint $DisableLegacyTLS $storeLocation -passthru
Um exemplo de como adicionar uma associação de site a um site existente e desabilitar o TLS herdado:
New-IISSiteBinding -Name "Default Web Site" -BindingInformation $BindingInformation -CertificateThumbPrint $certificate.Thumbprint -Protocol https -SslFlag $DisableLegacyTLS, $CCS -Force -verbose
Além disso, é possível solucionar problemas e testar esse recurso com Netsh:
Adicionar uma nova associação:
netsh http add sslcert <parâmetros regulares> disablelegacytls=enable
Atualizar uma associação existente:
netsh http update sslcert <parâmetros regulares> disablelegacytls=enable
Verifique se está definido em uma associação:
netsh http show sslcert <parâmetros regulares>
Atente-se a Desabilitar versões do TLS herdado: definido/não definido
Opção nº 3: APIs do C++ HTTP.sys (disponíveis agora)
Além de Desabilitar o TLS herdado, as seguintes adições foram feitas ao HTTP. sys:
HTTP_SERVICE_CONFIG_SSL_PARAM.DefaultFlags agora tem suporte aos seguintes novos valores:
HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: habilitar/desabilitar tíquete de sessão para um ponto de extremidade SSL específico.
HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: habilitar/desabilitar o log de eventos estendido para um ponto de extremidade SSL específico. Eventos adicionais são registrados em log de eventos do Windows. Há apenas um evento com suporte a partir de agora, que é registrado quando o handshake SSL falha.
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: habilitar/desabilitar versões TLS herdadas para um ponto de extremidade SSL específico. Definir esse sinalizador desabilitará o TLS 1.0/1.1 para esse ponto de extremidade e restringirá os conjuntos de criptografia que podem ser usados para conjuntos de criptografia HTTP2.
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: habilitar/desabilitar TLS1.2 para um ponto de extremidade SSL específico.
HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: habilitar/desabilitar HTTP/2 para um ponto de extremidade SSL específico.
A maneira mais simples de habilitar/desabilitar essa funcionalidade por certificado no C++ é com o sinalizador HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS fornecido pela API HttpSetServiceConfiguration HTTP.sys.
Quando a opção Desabilitar o TLS herdado é definida, as seguintes restrições são impostas:
Desabilite os protocolos SSL2, SSL3, TLS 1.0 e TLS 1.1.
Desabilite as codificações de criptografia DES, 3DES e RC4 (portanto, somente AES é usada).
Desabilite a AES de codificação de criptografia com o modo de encadeamento CBC (portanto, somente o GCM do AES é usado).
Desabilite a troca de chaves RSA.
Desabilite a troca de chaves DH com tamanho de chave inferior a 2048.
Desabilite a troca de chaves ECDH com tamanho de chave inferior a 224.
A documentação oficial dessas alterações estará disponível em breve no docs.Microsoft.com.
Próximas etapas para a imposição da versão TLS
A opção Desabilitar o TLS herdado fornece novas capacidades avançadas para impor pisos de conjunto de codificação/versão TLS a associações de certificado/ponto de extremidade específicas. Também exige que você planeje a nomenclatura dos certificados emitidos com essa funcionalidade habilitada. Algumas das principais considerações incluem:
desejo que o caminho padrão para o meu ponto de extremidade de serviço imponha o TLS 1.2 hoje e forneça um certificado diferente como ponto de acesso "herdado" de backup para usuários que precisam do TLS 1.0?
A minha certificação Contoso padrão pronta para uso deve usar Desabilitar TLS herdado? Nesse caso, talvez seja necessário fornecer um certificado legacy.contoso.com e associá-lo a um ponto de extremidade, permitindo o TLS 1.0.
Como posso comunicar melhor o uso recomendado desses certificados para meus clientes?
Você pode aproveitar esse recurso para atender às necessidades de grandes grupos de clientes, aqueles com uma obrigação de usar o TLS 1.2+, e aqueles que ainda estão trabalhando para sair do TLS 1.0, tudo sem despesas adicionais de hardware. Além da disponibilidade atual da associação de versão TLS por certificado no Windows Server 2019, a Microsoft procurará disponibilizar a opção Desabilitar o TLS herdado nos serviços online com base na demanda do cliente.