Não é possível ligar a um servidor utilizando o ServicePointManager ou as SslStream APIs depois de actualizar para o 4.6. .NET Framework

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática… erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 3069494
Sintomas
Suponha que actualizou para Microsoft .NET Framework 4.6 no seu computador. Quando utiliza uma aplicação que utiliza SSL 3.0 com ServicePointManager ou SslStream APIs para ligar a um servidor, a ligação falha.
Causa
Este problema ocorre porque o conjunto de protocolos SSL/TLS predefinido que é utilizado pelo ServicePointManager e SslStream foi alterado.

Valor antigo: Ssl 3.0 | TLS 1.0 | TLS 1.1

Novo valor: Tls 1.0 | TLS 1.1 | TLS 1.2

Como contornar
Para contornar este problema, actualize o servidor para Tls 1.0, Tls 1.1 ou Tls 1.2 porque foi demonstrado SSL 3.0 não seguro e vulnerável a ataques, como POODLE.

Nota Se não conseguir actualizar o servidor, utilize AppContext classe de recusarem a esta funcionalidade. Para tal, utilize um dos seguintes métodos:
  • Programaticamente: Tem de ser a primeira coisa que a aplicação executa porqueServicePointManagerserá inicializado apenas uma vez. Utilize o seguinte exemplo de código na sua aplicação:
    private const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching";        private const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto";        AppContext.SetSwitch(DisableCachingName, true);        AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true);
  • Utilizando o ficheiro de AppConfig para a aplicação: adicione a seguinte linha no ficheiro Appconfig:
    <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=true"></AppContextSwitchOverrides>


Para mais informações sobre os problemas conhecidos na 4.6. .NET Framework, consulte Problemas conhecidos relacionados com a 4.6. .NET Framework.
Mais Informação
Para mais informações sobre as alterações de controlo de versões de produto e o impacto em 4.6 de Framework o .NET, consulte Compatibilidade de aplicações no .NET Framework 4.6.

Notas
  • A nova configuração só serão aplicadas quando a aplicação é de filtragem a 4.6. .NET Framework. O .NET Framework 4.5.2 e versionswill anterior não afectados mesmo que sejam executados num ambiente do .NET Framework 4.6.
  • Uma lista de APIs de nível superior afectados:
    • HttpClient, HttpWebRequest
    • FtpClient
    • SmtpClient
    • SslStream
  • SCH_USE_STRONG_CRYPTO Este sinalizador vai ser usada automaticamente em 4.6 de Framework o .NET e afecta o comportamento removendo não seguros algoritmos criptográficos e hash. Para todas as plataformas do sistema operativo anteriores ao Windows 10, o algoritmo deRC4 será removido da utilização. De 10 de Windows, os seguintes algoritmos inseguros adicionais serão removidos:DES, Nulo, EXPORTAR e MD5

Aviso: Este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 3069494 - Última Revisão: 07/22/2015 18:14:00 - Revisão: 1.0

Microsoft .NET Framework 4.6

  • kbsurveynew kbtshoot kbexpertiseadvanced kbmt KB3069494 KbMtpt
Comentários
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)