Funzionalità aggiuntive della versione di TLS ora disponibili per l'associazione certificato in Windows Server 2019

Questo post è creato da

Andrew Marshall, Principal Security Program Manager, Customer Security and Trust

Gabriel Montenegro, Principal Program Manager, Core Networking

Niranjan Inamdar, Senior Software Engineer, Core Networking

Michael Brown, Senior Software Engineer, Internet Information Services

Ivan Pashov, Principal Software Engineering Lead, Core Networking

Agosto 2019

Gli ingegneri di tutto il mondo lavorano per eliminare le proprie dipendenze da TLS 1.0, incontrando così sfide complesse nel bilanciare le proprie esigenze di sicurezza con la disponibilità alla migrazione dei propri clienti. Finora i clienti hanno aiutato i clienti a risolvere questi problemi aggiungendo il supporto TLS 1.2 ai sistemi operativi meno recenti, inviando nuovi formati di registrazione in IIS per rilevare l'utilizzo TLS debole da parte dei client e fornendo le indicazioni tecniche più recenti per eliminare le dipendenze TLS 1.0.

Microsoft è lieta di annunciare una nuova e potente funzionalità per semplificare la transizione a un ambiente TLS 1.2+. A partire da KB4490481, Windows Server 2019 consente di bloccare l'uso di versioni di TLS vulnerabili con i certificati singoli designati. Questa funzionalità è denominata "Disable Legacy TLS" (Disabilita TLS legacy) e applica in modo efficace una versione TLS e una suite di crittografia su qualsiasi certificato selezionato.

Disabilita TLS legacy consente anche a un servizio online di offrire due raggruppamenti distinti di endpoint nello stesso hardware: uno che consente solo il traffico TLS 1.2+ e un altro che supporta il traffico TLS 1.0 legacy. Le modifiche vengono implementate in HTTP.sys e con il rilascio di certificati aggiuntivi, consentono di instradare il traffico al nuovo endpoint con la versione TLS appropriata. Prima di questa modifica, la distribuzione di tali funzionalità avrebbe richiesto un investimento aggiuntivo nell'hardware, poiché tali impostazioni erano configurabili solo a livello di sistema tramite il registro di sistema.

Dettagli dello scenario futuro

Uno scenario di distribuzione comune include un set di componenti hardware in un data center con clienti aventi esigenze diverse: alcuni necessitano di TLS 1.2 come minimo applicato al momento, mentre altri non hanno ancora eliminato le dipendenze TLS 1.0. La figura 1 illustra la selezione della versione di TLS e l'associazione di certificati come azioni chiaramente separate. Le funzionalità predefinite sono le seguenti:

Default TLS Version selection

Figura 1: Selezione della versione TLS predefinita e Funzionalità di associazione di certificati

  • secure.contoso.com indirizza i clienti a un endpoint di servizio che supporta solo TLS 1.2 e versioni successive.

  • legacy.contoso.com indirizza i clienti con esigenze TLS 1.0 legacy (come quelle ancora in fase di migrazione a TLS 1.2) a un endpoint che supporta TLS 1.0 per un periodo di tempo limitato. Questo consente ai clienti di completare il test di conformità per TLS 1.2 senza interruzione del servizio e senza bloccare altri clienti pronti per TLS 1.2.

Tradizionalmente, sono necessari due host fisicamente separati per gestire tutto il traffico e fornire l'imposizione della versione TLS, perché la manutenzione delle richieste TLS con una versione minima del protocollo richiede la disabilitazione dei protocolli più deboli tramite le impostazioni del Registro di sistema a livello di sistema. Questa funzionalità è stata resa disponibile più in alto nello stack, in cui la sessione TLS è associata al certificato, quindi è possibile assegnare una specifica versione minima TLS come descritto nella figura 2 riportata di seguito.

Enforcing minimum TLS version for a selected certificate

Figura 2: Disabilitare la funzionalità TLS legacy che applica la versione minima di TLS per un certificato selezionato, Secure.contoso.com.

Materiale sussidiario per la distribuzione

La funzionalità Disabilitare le versioni legacy di TLS può essere distribuita tramite l'interfaccia utente del server Internet Information Services (IIS), tramite i comandi di PowerShell o le API C++ HTTP.sys.

Opzione 1: configurazione dell'interfaccia utente iis (disponibile in Windows 10 versione 2004 e Windows Server versione 2004 e successive)

Creare un'associazione del sito per il certificato SSL "secure.contoso.com" come illustrato di seguito, quindi selezionare "Disabilitare le versioni legacy di TLS" e fare clic su OK.

IIS UI

Opzione 2: PowerShell (disponibile in Windows 10 versione 2004 e Windows Server versione 2004 e successive)

In PowerShell è possibile fare riferimento ai flag SSL come indicato di seguito:

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

È consigliabile creare variabili denominate più brevi per questi flag:

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

Esempio di creazione di un'associazione del sito a un nuovo sito e disabilitazione di TLS legacy:

$BindingInformation = "\*:443:"

$siteName = "contoso"

$Thumbprint = $certificate.ThumbPrint

New-IISSite con valore della proprietà DisableLegacyTLS di SSLFlag:

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

Esempio di aggiunta di un'associazione del sito a un sito esistente e disabilitazione di TLS legacy:

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

È inoltre possibile risolvere i problemi e testare questa funzionalità con Netsh:

  • Aggiunta di una nuova associazione:

    netsh http add sslcert <regular parameters> disablelegacytls=enable

  • Aggiornamento di un'associazione esistente:

    netsh http update sslcert <regular parameters> disablelegacytls=enable

  • Controllare se è impostato su un'associazione:

    netsh http show sslcert <regular parameters>

    Verifica la disabilitazione delle versioni TLS legacy: Set/Not Set

Opzione 3: API HTTP.sys C++ (ora disponibili)

Insieme a Disabilitare le versioni legacy di TLS, sono state apportate le aggiunte seguenti a HTTP.sys:

  • HTTP_edizione StandardRVICE_CONFIG_SSL_PARAM. DefaultFlags supporta ora i nuovi valori seguenti:

  • HTTP_edizione StandardRVICE_CONFIG_SSL_FLAG_ENABLE_edizione StandardSSION_TICKET: abilitare/disabilitare il ticket di sessione per un determinato endpoint SSL.

  • HTTP_edizione StandardRVICE_CONFIG_SSL_FLAG_LOG_EXTENDED_EVENTS: abilitare/disabilitare la registrazione eventi estesa per un determinato endpoint SSL. Gli eventi aggiuntivi vengono registrati in Registro eventi di Windows. Al momento è supportato un solo evento registrato quando l'handshake SSL ha esito negativo.

  • HTTP_edizione StandardRVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS: abilitare/disabilitare le versioni TLS legacy per un determinato endpoint SSL. L'impostazione di questo flag disabilita TLS1.0/1.1 per tale endpoint e limita i pacchetti di crittografia che possono essere usati per i pacchetti di crittografia HTTP2.

  • HTTP_edizione StandardRVICE_CONFIG_SSL_FLAG_DISABLE_TLS12: abilitare/disabilitare TLS1.2 per un endpoint SSL specifico.

  • HTTP_edizione StandardRVICE_CONFIG_SSL_FLAG_DISABLE_HTTP2: abilitare/disabilitare HTTP/2 per un endpoint SSL specifico.

Il modo più semplice per abilitare/disabilitare questa funzionalità per ogni certificato in C++ è con il flag HTTP_edizione StandardRVICE_CONFIG_SSL_FLAG_DISABLE_LEGACY_TLS fornito dall'API HTTP.sys HttpSetServiceConfiguration.

Quando Disabilitare le versioni legacy di TLS è impostato, vengono applicate le restrizioni seguenti:

  • Disabilitare i protocolli SSL2, SSL3, TLS 1.0 e TLS 1.1.

  • Disabilitare le crittografie aggiuntive DES, 3DES e RC4, in modo da usare solo AES.

  • Disabilitare la crittografia AES con modalità di concatenamento CBC., in modo da usare solo GCM AES.

  • Disabilitare lo scambio di chiavi RSA.

  • Disabilitare lo scambio di chiavi DH con una dimensione chiave inferiore a 2048.

  • Disabilitare lo scambio di chiavi ECDH con una dimensione chiave inferiore a 224.

Documentazione ufficiale relativa a queste modifiche in docs.Microsoft.com sarà presto disponibile.

Passaggi successivi per le funzionalità aggiuntive della versione di TLS

Disabilitare le versioni legacy di TLS fornisce nuove potenti funzionalità per l'applicazione di piani di crittografia della versione o crittografia TLS in specifiche associazioni di certificati o endpoint. Richiede inoltre di pianificare la denominazione dei certificati rilasciati con questa funzionalità abilitata. Alcune considerazioni includono:

  • Si desidera che il percorso predefinito dell'endpoint del servizio imposti attualmente TLS 1.2 e fornisca un certificato diverso come punto di accesso "legacy" di backup per gli utenti che necessitano di TLS 1.0?

  • La certificazione Contoso predefinita, già in uso, usa Disabilita TLS legacy? In questo caso, potrebbe essere necessario fornire un certificato legacy.contoso.com e associarlo a un endpoint che consenta TLS 1.0.

  • Come è possibile comunicare ai clienti in modo ottimale l'utilizzo consigliato di questi certificati?

È possibile sfruttare questa funzionalità per soddisfare le esigenze di grandi gruppi di clienti, ovvero quelli con obbligo di usare TLS 1.2+ e quelli che continuano a lavorare alla migrazione da TLS 1.0, senza spese hardware aggiuntive. Oltre alla disponibilità odierna dell'associazione di versione TLS per certificato in Windows Server 2019, Microsoft cercherà di rendere Disabilita TLS legacy disponibile nei suoi Servizi online in base alla richiesta dei clienti.