Partilhar via


Recursos de imposição de versão TLS agora disponíveis por vinculação de certificado no Windows Server 2019

Este post é de autoria de

Andrew Marshall, Gerente Principal do Programa de Segurança, Segurança e Confiança do Cliente

Gabriel Montenegro, Gerente de Programa Principal, Core Networking

Niranjan Inamdar, Engenheiro de Software Sênior, Core Networking

Michael Brown, Engenheiro de Software Sênior, Serviços de Informações da Internet

Ivan Pashov, Líder Principal de Engenharia de Software, Core Networking

Agosto de 2019

À medida que engenheiros em todo o mundo trabalham para eliminar suas próprias dependências de TLS 1.0, eles se deparam com o complexo desafio de equilibrar suas próprias necessidades de segurança com a prontidão de migração de seus clientes. Até o momento, ajudamos os clientes a resolver esses problemas adicionando suporte a TLS 1.2 a sistemas operacionais mais antigos, enviando novos formatos de log no IIS para detetar de uso fraco de TLS pelos clientes e fornecendo a orientação técnica de mais recente para eliminar dependências do TLS 1.0.

Agora, a Microsoft tem o prazer de anunciar um novo recurso poderoso no Windows para facilitar sua transição para um mundo TLS 1.2+. A partir do KB4490481, o Windows Server 2019 agora permite que você bloqueie o uso de versões TLS fracas com certificados individuais designados. Chamamos esta funcionalidade de "Desativar TLS legado" e ela efetivamente impõe um limite mínimo de versão e conjunto de cifras em qualquer certificado que selecionar.

Desativar 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 tráfego TLS 1.0 herdado. As alterações são implementadas em HTTP.syse, 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 desses recursos exigiria um investimento adicional em hardware, pois essas configurações só eram configuráveis em todo o sistema via registro.

Detalhes do cenário da funcionalidade

Um cenário de implantação comum apresenta um conjunto de hardware em um datacenter com clientes de necessidades mistas: alguns precisam do TLS 1.2 como um mínimo imposto no momento e outros não terminaram de remover as dependências do TLS 1.0. A Figura 1 ilustra a seleção da versão TLS e a vinculação de certificados como ações distintamente separadas. Esta é a funcionalidade padrão:

Seleção de Versão TLS Padrão

Figura 1: Seleção da versão padrão do TLS e funcionalidade de vinculação de certificado

  • secure.contoso.com direciona seus clientes para um ponto de extremidade de serviço que suporta apenas TLS 1.2 e superior.

  • legacy.contoso.com direciona os clientes com necessidades herdadas do TLS 1.0 (como aqueles que ainda migram para o TLS 1.2) para um ponto de extremidade que suporta o TLS 1.0 por um tempo limitado. Isso permite que os clientes concluam os testes 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 fisicamente separados para lidar com todo o tráfego e fornecer a imposição da versão TLS, já que atender às solicitações TLS com uma versão mínima do protocolo requer desabilitar protocolos mais fracos por meio de configurações de registro em todo o sistema. Disponibilizamos essa funcionalidade mais acima na pilha, onde a sessão TLS está vinculada ao certificado, portanto, uma versão mínima específica do TLS pode ser atribuída conforme descrito na Figura 2 abaixo.

Impondo a versão mínima do TLS para um certificado selecionado

Figura 2: Desative o recurso TLS herdado que impõe a versão mínima do TLS para um certificado selecionado, Secure.contoso.com.

Diretrizes de implantação de recursos

O recurso Desativar a antiga TLS pode ser implementado através da interface de utilizador do Servidor IIS (Serviços de Informações da Internet), por meio de comandos PowerShell ou de APIs C++ HTTP.sys.

Opção #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 um binding de site para o certificado SSL "secure.contoso.com", conforme mostrado abaixo, marque "Desativar TLS Antigo" e clique em OK.

IIS UI

Opção #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 SSL como este:

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

É conveniente criar variáveis nomeadas mais curtas para eles:

$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 criação de uma vinculação de site a um novo site e desativação do 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 adição de uma associação de site a um site existente e desativação do TLS herdado:

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

Além disso, pode-se solucionar problemas e testar esse recurso com o Netsh:

  • Adicionando uma nova ligação:

    netsh http adicionar sslcert <parâmetros regulares> disablelegacytls=enable

  • Atualizar um vínculo existente:

    netsh http update sslcert <parâmetros regulares> disablelegacytls=enable

  • Verifique se está definido numa vinculação:

    netsh http show sslcert <parâmetros regulares>

    Verifique Desativação de Versões TLS Legacy: Ativadas/Não Ativadas

Opção #3: C++ HTTP.sys APIs (disponível agora)

Junto com Desativar TLS herdado, as seguintes adições foram feitas para HTTP.sys:

  • HTTP_SERVICE_CONFIG_SSL_PARAM. DefaultFlags agora suporta os seguintes novos valores:

  • HTTP_SERVICE_CONFIG_SSL_FLAG_ENABLE_SESSION_TICKET: Ativar/desativar o bilhete de sessão para um ponto de extremidade SSL específico.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: Ativar/desativar o registo de eventos alargado para um ponto de extremidade SSL específico. Eventos adicionais são registrados no Log de Eventos do Windows. Há apenas um evento suportado a partir de agora que é registrado quando o handshake SSL falha.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: Ativar/desativar versões TLS herdadas para um endereço SSL específico. A configuração desse sinalizador desabilita o TLS1.0/1.1 para esse ponto de extremidade e restringe os pacotes de codificação que podem ser usados para pacotes de codificação HTTP2.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: Ativar/desativar TLS 1.2 para um terminal SSL específico.

  • HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: Permitir/Bloquear o HTTP/2 para um ponto de extremidade SSL específico.

A maneira mais simples de habilitar/desabilitar esta funcionalidade por certificado em C++ é com o sinalizador HTTP_SERVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS fornecido pela API HttpSetServiceConfiguration de HTTP.sys.

Quando a desativação do TLS herdado é ativada, as seguintes restrições são impostas:

  • Desative os protocolos SSL2, SSL3, TLS1.0 e TLS1.1.

  • Desative as cifras de criptografia DES, 3DES e RC4 (para que apenas AES seja usado).

  • Desative a cifra de criptografia AES com o modo de encadeamento CBC (assim apenas o AES GCM será usado).

  • Desative a troca de chaves RSA.

  • Desative a troca de chaves DH com tamanho de chave inferior a 2048.

  • Desative as trocas de chaves ECDH com tamanho de chave inferior a 224.

Está disponível documentação oficial destas alterações no docs.Microsoft.com.

Próximas etapas para a imposição de versão TLS

Desabilitar TLS herdado fornece novos recursos poderosos para impor pisos de versão/pacote de codificação TLS em associações específicas de certificado/ponto final. Ele também requer que você planeje a nomenclatura dos certificados emitidos com essa funcionalidade habilitada. Algumas das considerações incluem:

  • Quero que o percurso padrão para o meu ponto de extremidade de serviço imponha o TLS 1.2 hoje e forneça um certificado diferente como um ponto de acesso "herdado" secundário para os utilizadores que precisam do TLS 1.0?

  • A minha certificação Contoso padrão, já em uso, deve desativar o TLS herdado? Em caso afirmativo, talvez seja necessário fornecer um certificado legacy.contoso.com e vinculá-lo a um ponto de extremidade que permita o TLS 1.0.

  • Qual a melhor forma de comunicar a utilização recomendada destes certificados aos meus clientes?

Você pode aproveitar esse recurso para atender às necessidades de grandes grupos de clientes – aqueles com a obrigação de usar o TLS 1.2+ e aqueles que ainda estão trabalhando na migração do TLS 1.0, tudo sem despesas adicionais de hardware. Além da disponibilidade atual de vinculação de versão TLS por certificado no Windows Server 2019, a Microsoft procurará disponibilizar Desabilitar TLS herdado em seus serviços online com base na demanda do cliente.