Procedure consigliate per Transport Layer Security (TLS) con .NET Framework

Il protocollo Transport Layer Security (TLS) è uno standard del settore progettato per proteggere la riservatezza delle informazioni comunicate tramite Internet. TLS 1.2 è uno standard che offre miglioramenti per la sicurezza rispetto alle versioni precedenti. TLS 1.2 verrà sostituito dalla versione più recente dello standard, TLS 1.3, più veloce e che offre maggiore sicurezza. Questo articolo presenta alcune raccomandazioni per proteggere le applicazioni .NET Framework che usano il protocollo TLS.

Per garantire la sicurezza delle applicazioni .NET Framework, la versione di TLS non deve essere hardcoded. Le applicazioni .NET Framework devono usare la versione di TLS supportata dal sistema operativo.

Questo documento è destinato agli sviluppatori che:

Prendi in considerazione le seguenti raccomandazioni:

  • Per TLS 1.2, usare .NET Framework 4.7 o versioni successive nelle app e usare .NET Framework 4.7.1 o versioni successive nelle app WCF.
  • Per TLS 1.3, usare .NET Framework 4.8 o versione successiva.
  • Non specificare la versione di TLS. Configurare il codice per consentire al sistema operativo di decidere la versione di TLS.
  • Eseguire un controllo esaustivo del codice per assicurarsi che non venga specificata una versione di TLS o SSL.

Quando l'app consente al sistema operativo di scegliere la versione di TLS:

  • L'app sfrutta automaticamente i nuovi protocolli aggiunti in futuro, ad esempio TLS 1.3.
  • Il sistema operativo blocca i protocolli riscontrati come non sicuri.

La sezione Controllare il codice e apportare modifiche al codice tratta il controllo e l'aggiornamento del codice.

Questo articolo illustra come abilitare la sicurezza più avanzata disponibile per la versione di .NET Framework di destinazione e in cui viene eseguita l'app. Quando un'app imposta in modo esplicito un protocollo di sicurezza e una versione, rifiuta esplicitamente qualsiasi altra alternativa e il comportamento predefinito di .NET Framework e del sistema operativo. Se si vuole che l'app sia in grado di negoziare una connessione TLS 1.2, l'impostazione esplicita di una versione di TLS precedente impedisce una connessione TLS 1.2.

Se non è possibile evitare di usare una versione del protocollo hardcoded, è consigliabile specificare TLS 1.2. Per indicazioni sull'identificazione e la rimozione delle dipendenze TLS 1.0, scaricare il white paper Risolvere il problema tls 1.0.

WCF supporta TLS 1.0, 1.1 e 1.2 come impostazione predefinita in .NET Framework 4.7. A partire da .NET Framework 4.7.1, WCF usa come predefinita la versione configurata dal sistema operativo. Se un'applicazione è configurata in modo esplicito con SslProtocols.None, WCF usa l'impostazione predefinita del sistema operativo quando si usa il trasporto NetTcp.

È possibile porre domande su questo documento nel problema di GitHub Transport Layer Security (TLS) best practices with the .NET Framework (Procedure consigliate per Transport Layer Security (TLS) con .NET Framework).

Controllare il codice e apportare modifiche al codice

Per le applicazioni ASP.NET, controllare l'elemento <system.web><httpRuntime targetFramework> di Web.config per verificare di usare la versione prevista di .NET Framework.

Per Windows Forms e altre applicazioni, vedere Procedura: Scegliere una versione di .NET Framework di destinazione.

Usare le sezioni seguenti per verificare che non sia in uso una versione specifica di TLS o SSL.

Se l'app è destinata a .NET Framework 4.7 o versioni successive

Le sezioni seguenti illustrano come verificare che non sia in uso una versione specifica di TLS o SSL.

Per reti HTTP

ServicePointManager, usando .NET Framework 4.7 e versioni successive, userà il protocollo di sicurezza predefinito configurato nel sistema operativo. Per ottenere la scelta predefinita del sistema operativo, se possibile, non impostare un valore per la ServicePointManager.SecurityProtocol proprietà , che per impostazione predefinita è SecurityProtocolType.SystemDefault.

Poiché l'impostazione SecurityProtocolType.SystemDefault determina ServicePointManager l'uso del protocollo di sicurezza predefinito configurato dal sistema operativo, l'applicazione può essere eseguita in modo diverso in base al sistema operativo in cui viene eseguito. Ad esempio, Windows 7 SP1 usa TLS 1.0 mentre Windows 8 e Windows 10 usano TLS 1.2.

Il resto di questo articolo non è pertinente se la destinazione è .NET Framework 4.7 o versioni successive per le reti HTTP.

Per reti TCP Sockets

SslStream, quando si usano .NET Framework 4.7 e versioni successive, per impostazione predefinita delega al sistema operativo la scelta del protocollo di sicurezza e della versione ottimali. Per ottenere la scelta migliore del sistema operativo predefinita, se possibile, non usare overload di metodo di SslStream che accettano un parametro SslProtocols esplicito. In caso contrario, passare SslProtocols.None. È consigliabile non usare Default. L'impostazione SslProtocols.Default impone l'uso di SSL 3.0/TLS 1.0 e impedisce l'uso di TLS 1.2.

Non impostare un valore per la proprietà SecurityProtocol (per le reti HTTP).

Non usare overload di metodo di SslStream che accettano un parametro SslProtocols esplicito (per le reti TCP Sockets). Quando si ridestina l'app a .NET Framework 4.7 o versioni successive, si seguiranno le procedure consigliate.

Il resto di questo argomento non è pertinente se la destinazione è .NET Framework 4.7 o versioni successive per le reti TCP Sockets.

Per il trasporto TCP WCF con sicurezza del trasporto con credenziali del certificato

WCF usa lo stesso stack di rete del resto di .NET Framework.

Se la destinazione è la versione 4.7.1, WCF è configurato per consentire al sistema operativo di scegliere il protocollo di sicurezza migliore per impostazione predefinita, a meno che non sia configurato in modo esplicito:

  • Nel file di configurazione dell'applicazione.
  • Oppure nell'applicazione nel codice sorgente.

Per impostazione predefinita, .NET Framework 4.7 e versioni successive sono configurati per l'uso di TLS 1.2 e consentono le connessioni tramite TLS 1.1 o TLS 1.0. Configurare WCF per consentire al sistema operativo di scegliere il protocollo di sicurezza ottimale configurando il binding per l'uso di SslProtocols.None. Questa impostazione può essere eseguita in SslProtocols. SslProtocols.None è accessibile da Transport. NetTcpSecurity.Transport è accessibile da Security.

Se si usa un binding personalizzato:

  • Configurare WCF per consentire al sistema operativo di scegliere il protocollo di sicurezza ottimale impostando SslProtocols per l'uso di SslProtocols.None.
  • Oppure configurare il protocollo usato con il percorso di configurazione system.serviceModel/bindings/customBinding/binding/sslStreamSecurity:sslProtocols.

Se non si usa un binding personalizzato e si imposta il binding WCF tramite la configurazione, impostare il protocollo usato con il percorso di configurazione system.serviceModel/bindings/netTcpBinding/binding/security/transport:sslProtocols.

Per la sicurezza dei messaggi WCF con le credenziali del certificato

.NET Framework 4.7 e versioni successive per impostazione predefinita usano il protocollo specificato nella SecurityProtocol proprietà . Quando AppContextSwitchSwitch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols è impostato su true, WCF sceglie il protocollo ottimale, fino a TLS 1.0.

Se l'app è destinata a una versione di .NET Framework precedente alla 4.7

Controllare il codice per verificare che non si stia impostando una versione TLS o SSL specifica usando le sezioni seguenti.

Per .NET Framework 4.6 - 4.6.2 e non WCF

Impostare l'opzione DontEnableSystemDefaultTlsVersionsAppContext su false. Vedere Configurazione della sicurezza tramite opzioni di AppContext.

Per WCF con .NET Framework 4.6 - 4.6.2 e la sicurezza del trasporto TCP con credenziali del certificato

È necessario installare le patch più recenti del sistema operativo. Vedere Aggiornamenti della sicurezza.

Il framework WCF sceglie automaticamente il protocollo più alto disponibile fino a TLS 1.2, a meno che non si configuri in modo esplicito una versione del protocollo. Per altre informazioni, vedere la sezione precedente Per il trasporto TCP WCF con sicurezza del trasporto con credenziali del certificato.

Per .NET Framework 3.5 - 4.5.2 e non WCF

È consigliabile aggiornare l'app a .NET Framework 4.7 o versione successiva. Se non è possibile eseguire l'aggiornamento, seguire questa procedura:

  • Impostare i valori delle voci del Registro di sistema SchUseStrongCrypto e SystemDefaultTlsVersions su 1. Vedere Configurazione della sicurezza tramite il Registro di sistema di Windows. .NET Framework 3.5 supporta il SchUseStrongCrypto flag solo quando viene passato un valore TLS esplicito.

  • Se si esegue in .NET Framework 3.5, è necessario installare una patch ad accesso frequente in modo che TLS 1.2 possa essere specificato dal programma:

    KB3154518 Aggiornamento cumulativo per l'affidabilità HR-1605 - Supporto per le versioni predefinite del sistema TLS incluso in .NET Framework 3.5.1 in Windows 7 SP1 e Windows Server 2008 R2 SP1
    KB3154519 Aggiornamento cumulativo per l'affidabilità HR-1605 - Supporto per le versioni predefinite del sistema TLS incluso in .NET Framework 3.5 in Windows Server 2012
    KB3154520 Aggiornamento cumulativo per l'affidabilità HR-1605 - Supporto per le versioni predefinite del sistema TLS incluso in .NET Framework 3.5 in Windows 8.1 e Windows Server 2012 R2
    KB3156421 Aggiornamento cumulativo hotfix 1605 3154521 per .NET Framework 4.5.2 e 4.5.1 in Windows

Per WCF con .NET Framework 3.5 - 4.5.2 e la sicurezza del trasporto TCP con credenziali del certificato

Queste versioni del framework WCF sono hardcoded per l'uso dei valori SSL 3.0 e TLS 1.0. Questi valori non sono modificabili. È necessario aggiornare e ridestinare a NET Framework 4.6 o versioni successive per l'uso di TLS 1.1 e 1.2.

Se l'app è destinata a .NET Framework 3.5

Se è necessario impostare in modo esplicito un protocollo di sicurezza anziché consentire a .NET o al sistema operativo di selezionare il protocollo di sicurezza, aggiungere SecurityProtocolTypeExtensions ed SslProtocolsExtension enumerazioni al codice. SecurityProtocolTypeExtensions e SslProtocolsExtension includono i valori per Tls12, Tls11 e il valore SystemDefault. Per altre informazioni, vedere Supporto per le versioni predefinite del sistema TLS incluse in .NET Framework 3.5 in Windows 8.1 e Windows Server 2012 R2.

Configurare la sicurezza tramite opzioni AppContext (per .NET Framework 4.6 o versioni successive)

Le opzioni di AppContext descritte in questa sezione sono rilevanti se l'app è destinata a, o viene eseguita in .NET Framework 4.6 o versioni successive. Le opzioni devono essere false se possibile, per impostazione predefinita o impostandole in modo esplicito. Se si vuole configurare la sicurezza tramite una o entrambe le opzioni, non specificare un valore del protocollo di sicurezza nel codice, perché avrebbe la precedenza rispetto alle opzioni.

Le opzioni hanno lo stesso effetto sia per le reti HTTP (ServicePointManager) che per le reti TCP Sockets (SslStream).

Switch.System.Net.DontEnableSchUseStrongCrypto

Il valore false per Switch.System.Net.DontEnableSchUseStrongCrypto imposta l'uso della crittografia avanzata per l'app. Il valore per DontEnableSchUseStrongCrypto usa protocolli di false rete più sicuri (TLS 1.2 e TLS 1.1) e blocca i protocolli non sicuri. Per altre informazioni, vedere Flag SCH_USE_STRONG_CRYPTO. Il valore true disabilita la crittografia avanzata per l'app. Questa opzione influisce solo sulle connessioni client (in uscita) nell'applicazione.

Se l'app è destinata a .NET Framework 4.6 o versioni successive, l'impostazione predefinita di questa opzione è false. Si tratta di un'impostazione predefinita sicura, consigliata. Se l'app viene eseguita in .NET Framework 4.6, ma è destinata a una versione precedente, l'impostazione predefinita dell'opzione è true. In questo caso, è consigliabile impostarla in modo esplicito su false.

DontEnableSchUseStrongCrypto deve avere il valore true solo se è necessario connettersi a servizi legacy che non supportano la crittografia avanzata e non possono essere aggiornati.

Switch.System.Net.DontEnableSystemDefaultTlsVersions

Il valore false per Switch.System.Net.DontEnableSystemDefaultTlsVersions fa sì che l'app consenta al sistema operativo di scegliere il protocollo. Il valore true fa sì che l'app usi i protocolli selezionati da .NET Framework.

Se l'app è destinata a .NET Framework 4.7 o versioni successive, l'impostazione predefinita di questa opzione è false. Si tratta di un'impostazione predefinita sicura, consigliata. Se l'app viene eseguita in .NET Framework 4.7 o versioni successive, ma è destinata a una versione precedente, l'impostazione predefinita dell'opzione è true. In questo caso, è consigliabile impostarla in modo esplicito su false.

Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols

Il valore false per Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols fa sì che l'applicazione usi il valore definito in ServicePointManager.SecurityProtocols per la sicurezza dei messaggi con le credenziali del certificato. Il valore true usa il protocollo più alto disponibile, fino a TLS 1.0

Per le applicazioni destinate a .NET Framework 4.7 e versioni successive, l'impostazione predefinita di questo valore è false. Per le applicazioni destinate a .NET Framework 4.6.2 e versioni precedenti, l'impostazione predefinita di questo valore è true.

Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersions

Il valore false per Switch.System.ServiceModel.DontEnableSystemDefaultTlsVersions imposta la configurazione predefinita per consentire al sistema operativo di scegliere il protocollo. Il valore true imposta il valore predefinito sul protocollo più alto disponibile, fino a TLS 1.2.

Per le applicazioni destinate a .NET Framework 4.7.1 e versioni successive, l'impostazione predefinita di questo valore è false. Per le applicazioni destinate a .NET Framework 4.7 e versioni precedenti, l'impostazione predefinita di questo valore è true.

Per altre informazioni sui protocolli TLS, vedere Mitigazione: Protocolli TLS. Per altre informazioni sulle opzioni AppContext, vedere <AppContextSwitchOverrides> Element.

Configurare la sicurezza tramite il Registro di sistema di Windows

Avviso

L'impostazione delle chiavi del Registro di sistema influisce su tutte le applicazioni nel sistema. Usare questa opzione solo se si ha il controllo completo del computer ed è possibile controllare le modifiche apportate al Registro di sistema.

Se l'impostazione di una o entrambe le opzioni di AppContext non è praticabile, è possibile controllare i protocolli di sicurezza usati dall'app con le chiavi del Registro di sistema di Windows descritte in questa sezione. L'uso di una o entrambe le opzioni di AppContext potrebbe non essere possibile se l'app viene eseguita in .NET Framework 4.5.2 o versioni precedenti oppure se non è possibile modificare il file di configurazione. Se si vuole configurare la sicurezza con il Registro di sistema, non specificare un valore del protocollo di sicurezza nel codice, perché ha la precedenza rispetto all'impostazione del Registro di sistema.

I nomi delle chiavi del Registro di sistema sono simili a quelli delle opzioni AppContext corrispondenti, ma senza il prefisso DontEnable nel nome. Ad esempio, l'opzione di AppContextDontEnableSchUseStrongCrypto corrisponde alla chiave del Registro di sistema denominata SchUseStrongCrypto.

Queste chiavi sono disponibili in tutte le versioni di .NET Framework per cui è disponibile una patch di sicurezza recente. Vedere Aggiornamenti della sicurezza.

Tutte le chiavi del Registro di sistema descritte di seguito hanno lo stesso effetto sia per le reti HTTP (ServicePointManager) che per le reti TCP Sockets (SslStream).

SchUseStrongCrypto

La HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SchUseStrongCrypto voce del Registro di sistema ha un valore di tipo DWORD. Il valore 1 imposta l'uso della crittografia avanzata per l'app. La crittografia avanzata usa protocolli di rete più sicuri (TLS 1.2 e TLS 1.1) e blocca i protocolli non sicuri. Un valore pari a 0 disabilita la crittografia avanzata. Per altre informazioni, vedere Flag SCH_USE_STRONG_CRYPTO. Questa impostazione del Registro di sistema influisce solo sulle connessioni client (in uscita) nell'applicazione.

Se l'app è destinata a .NET Framework 4.6 o versioni successive, il valore predefinito di questa chiave è 1. Si tratta di un'impostazione predefinita sicura, consigliata. Se l'app è destinata a .NET Framework 4.5.2 o versioni precedenti, per impostazione predefinita la chiave è 0. In questo caso, è consigliabile impostarla in modo esplicito su 1.

Questa chiave deve avere il valore 0 solo se è necessario connettersi a servizi legacy che non supportano la crittografia avanzata e non possono essere aggiornati.

SystemDefaultTlsVersions

La HKEY_LOCAL_MACHINE\SOFTWARE\[Wow6432Node\]Microsoft\.NETFramework\<VERSION>: SystemDefaultTlsVersions voce del Registro di sistema ha un valore di tipo DWORD. Il valore 1 fa sì che l'app consenta al sistema operativo di scegliere il protocollo. Il valore 0 fa sì che l'app usi i protocolli selezionati da .NET Framework.

<VERSION> deve essere v4.0.30319 (per .NET Framework 4 e versioni successive) o v2.0.50727 (per .NET Framework 3.5).

Se l'app è destinata a .NET Framework 4.7 o versioni successive, il valore predefinito di questa chiave è 1. Si tratta di un'impostazione predefinita sicura, consigliata. Se l'app è destinata a .NET Framework 4.6.1 o versioni precedenti, per impostazione predefinita la chiave è 0. In questo caso, è consigliabile impostarla in modo esplicito su 1.

Per altre informazioni, vedere Aggiornamento cumulativo per Windows 10 versione 1511 e Windows Server 2016 Technical Preview 4: 10 maggio 2016.

Per altre informazioni su .NET Framework 3.5.1, vedere Supporto per le versioni predefinite del sistema TLS incluse in .NET Framework 3.5.1 in Windows 7 SP1 e Server 2008 R2 SP1.

L'oggetto seguente . Il file REG imposta le voci del Registro di sistema e le relative varianti sui valori più sicuri:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

Configurare i protocolli Schannel nel Registro di sistema di Windows

È possibile usare il Registro di sistema per un controllo dettagliato dei protocolli negoziati dall'app client e/o server. Le funzionalità di rete dell'app passano attraverso Schannel (ovvero un nome diverso per canale sicuro). Configurando Schannel è possibile configurare il comportamento dell'app.

Iniziare con la chiave del Registro di sistema HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols. In tale chiave è possibile creare qualsiasi sottochiave nel set SSL 2.0, SSL 3.0, TLS 1.1e TLS 1.2. In ognuna di queste sottochiavi, è possibile creare sottochiavi Client e/o Server. In Client e Serverè possibile creare valori DisabledByDefault DWORD (0 o 1) e Enabled (0 o 1).

Flag SCH_USE_STRONG_CRYPTO

Quando è abilitata (per impostazione predefinita, da un'opzioneAppContext o dal Registro di sistema di Windows), .NET Framework usa il SCH_USE_STRONG_CRYPTO flag quando l'app avvia una connessione TLS a un server. .NET Framework passa il flag a Schannel per indicare a di disabilitare algoritmi di crittografia deboli noti, suite di crittografia e versioni del protocollo TLS/SSL che potrebbero essere altrimenti abilitate per una migliore interoperabilità. Per altre informazioni, vedi:

Il SCH_USE_STRONG_CRYPTO flag viene passato anche a Schannel per le connessioni client (in uscita) quando si usano in modo esplicito i Tls11 valori enumerati o Tls12 di SecurityProtocolType o SslProtocols. Il SCH_USE_STRONG_CRYPTO flag viene usato solo per le connessioni in cui l'applicazione svolge il ruolo del client. È possibile disabilitare protocolli e algoritmi deboli quando le applicazioni agisce il ruolo del server configurando le impostazioni del Registro di sistema a livello Schannel di computer.

Aggiornamenti della sicurezza

Le procedure consigliate in questo articolo dipendono dagli aggiornamenti della sicurezza installati. Questi aggiornamenti includono la possibilità di usare funzionalità avanzate di .NET Framework 4.7 e versioni successive. Gli aggiornamenti della sicurezza recenti sono importanti se l'app viene eseguita in .NET Framework 4.7 e versioni successive (anche se è destinata a una versione precedente).

Per aggiornare .NET Framework per consentire al sistema operativo di scegliere la versione migliore di TLS da usare, è necessario installare almeno:

Vedere anche:

Supporto per TLS 1.2

Per consentire all'app di negoziare TLS 1.2, il sistema operativo e la versione di .NET Framework devono entrambi supportare TLS 1.2.

Requisiti del sistema operativo per il supporto di TLS 1.2

Per abilitare o riabilitare TLS 1.2 e/o TLS 1.1 in un sistema che li supporta, vedere Impostazioni del Registro di sistema di Transport Layer Security (TLS).

Sistema operativo Supporto di TLS 1.2
Windows 10
Windows Server 2016
Supportato e abilitato per impostazione predefinita.
Windows 8.1
Windows Server 2012 R2
Supportato e abilitato per impostazione predefinita.
Windows 8.0
Windows Server 2012
Supportato e abilitato per impostazione predefinita.
Windows 7 SP1
Windows Server 2008 R2 SP1
Supportato ma non abilitato per impostazione predefinita. Vedere la pagina Web Impostazioni del Registro di sistema di Transport Layer Security (TLS) per informazioni dettagliate su come abilitare TLS 1.2.
Windows Server 2008 Il supporto per TLS 1.1 e TLS 1.2 richiede un aggiornamento. Vedere Aggiornamento per aggiungere il supporto per TLS 1.1 e TLS 1.2 in Windows Server 2008 SP2.
Windows Vista Non supportato.

Per informazioni su quali protocolli TLS/SSL sono abilitati per impostazione predefinita in ogni versione di Windows, vedere Protocols in TLS/SSL (Schannel SSP) (Protocolli in TLS/SSL - Schannel SSP).

Requisiti per il supporto di TLS 1.2 con .NET Framework 3.5

Questa tabella mostra l'aggiornamento del sistema operativo che è necessario per il supporto di TLS 1.2 con .NET Framework 3.5. Si consiglia di applicare tutti gli aggiornamenti del sistema operativo.

Sistema operativo Aggiornamento minimo necessario per supportare TLS 1.2 con .NET Framework 3.5
Windows 10
Windows Server 2016
Aggiornamento cumulativo per Windows 10 versione 1511 e Windows Server 2016 Technical Preview 4: 10 maggio 2016
Windows 8.1
Windows Server 2012 R2
Supporto per le versioni predefinite del sistema TLS incluso in .NET Framework 3.5 in Windows 8.1 e Windows Server 2012 R2
Windows 8.0
Windows Server 2012
Supporto per le versioni predefinite del sistema TLS incluso in .NET Framework 3.5 in Windows Server 2012
Windows 7 SP1
Windows Server 2008 R2 SP1
Supporto per le versioni predefinite del sistema TLS incluso in .NET Framework 3.5.1 in Windows 7 SP1 e Windows Server 2008 R2 SP1
Windows Server 2008 Supporto per le versioni predefinite del sistema TLS incluso in .NET Framework 2.0 SP2 in Windows Vista SP2 e Windows Server 2008 SP2
Windows Vista Non supportato