Impossibile connettersi a un server utilizzando le API ServicePointManager o SslStream dopo l'aggiornamento a .NET Framework 4.6

Si applica a
.NET Framework 4.6.2

Sintomi

Si supponga di aver eseguito l'aggiornamento a Microsoft .NET Framework 4.6 nel computer. Quando si utilizza un'applicazione che usa SSL 3.0 insieme alle API ServicePointManager o SslStream per connettersi a un server, la connessione non riesce.

Causa

Questo problema si verifica perché il set predefinito di protocolli SSL/TLS utilizzato da ServicePointManager e SslStream è stato modificato.

Valore precedente: Ssl 3.0 | Tls 1.0 | Tls 1.1

      

Nuovo valore: Tls 1.0 | Tls 1.1 | Tls 1.2

Soluzione alternativa

Per risolvere questo problema, aggiornare il server a Tls 1.0, Tls 1.1 o Tls 1.2 perché SSL 3.0 risulta non sicuro e vulnerabile ad attacchi come POODLE.

Nota Se non è possibile aggiornare il server, usare la classe AppContext per rifiutare esplicitamente questa funzionalità. A questo scopo, usare uno dei metodi seguenti:

  • A livello di programmazione: deve essere la prima operazione eseguita dall'applicazione perché ServicePointManager verrà inizializzato una sola volta. Usare l'esempio di codice seguente nell'applicazione:

    private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching";
            private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto";
            AppContext.SetSwitch(DisableCachingName, true);
            AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true);
    
  • Usando il file AppConfig per l'applicazione: Aggiungere la riga seguente al file Appconfig:
    <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=true"/>

        
Per ulteriori informazioni sui problemi noti in .NET Framework 4.6, vedere Problemi noti di .NET Framework 4.6 .

Altre informazioni

Per altre informazioni sulle modifiche al controllo delle versioni del prodotto e sull'impatto in .NET Framework 4.6, vedere Compatibilità delle applicazioni in .NET Framework 4.6.

Note

  • La nuova configurazione verrà applicata solo quando l'applicazione ha come destinazione .NET Framework 4.6. .NET Framework 4.5.2 e versioni precedenti non saranno interessati anche se vengono eseguiti in un ambiente .NET Framework 4.6.

  • Elenco delle API di primo livello interessate:

    • HttpClient, HttpWebRequest
    • FtpClient
    • Smtpclient
    • Sslstream
  • SCH_USE_STRONG_CRYPTO Questo flag verrà usato automaticamente in .NET Framework 4.6 e influisce sul comportamento rimuovendo algoritmi di crittografia e hash non sicuri. Per tutte le piattaforme del sistema operativo precedenti a Windows 10, l'algoritmo RC4 verrà rimosso dall'uso. Da Windows 10 verranno rimossi i seguenti algoritmi aggiuntivi non sicuri: DES, NULL, EXPORT e MD5