2016-06-20 44 views
9

Ho un'app WPF, che utilizza SSLStream per connettersi al server e inviare/ricevere alcuni messaggi. Il mio codice è basato su questo esempio (SslTcpClient): https://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v=vs.110).aspx.Una chiamata a SSPI non è riuscita, vedere eccezione interna - L'autorità di sicurezza locale non può essere contattata

Questo ha funzionato bene per mesi. Tuttavia, dopo aver ottenuto questo aggiornamento di Windows (Aggiornamento cumulativo per Windows 10 versione 1511 e Windows Server 2016 Technical Preview 4: 14 giugno 2016 - https://support.microsoft.com/en-us/kb/3163018). La mia app ha iniziato a segnalare questa eccezione:

System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. ---> System.ComponentModel.Win32Exception: The Local Security Authority cannot be contacted 
    --- End of inner exception stack trace --- 
at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception) 
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.ProcessReceivedBlob(Byte[] buffer, Int32 count, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.StartSendBlob(Byte[] incoming, Int32 count, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest) 
at System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) 
at System.Net.Security.SslStream.AuthenticateAsClient(String targetHost, X509CertificateCollection clientCertificates, SslProtocols enabledSslProtocols, Boolean checkCertificateRevocation) 
at MyAPP.Core.Services.Network.Impl.SslTcpClient.ClientSideHandshake() 
at MyAPP.Core.Services.Network.Impl.SslTcpClient.Connect() 
at MyAPP.Core.Services.Impl.MessageService.SendMessage(String message) 

Cosa posso fare?

+1

Stiamo avendo lo stesso problema dopo questo aggiornamento sui nostri computer Windows 10. Utilizziamo il connettore MySQL .NET che si connette a un DB MySQL remoto su SSL. –

risposta

8

Ecco la soluzione, impostare nel Registro di sistema:

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL \ KeyExchangeAlgorithms \ Diffie-Hellman] "ClientMinKeyBitLength" = dword: 00000200

come note here

+0

[Questo collegamento] (https://support.microsoft.com/en-us/help/3061518/ms15-055-vulnerability-in-schannel-could-allow-information-disclosure-may-12,-2015) è un riferimento alla discussione tecnica MS sul perché il supporto DH 512 è stato rimosso. –

4

Questo significa che l'altra parte usa un'altra versione di tls e tu sei più vecchia. Impostare l'attributo di sicurezza su Tls12 prima di effettuare una connessione. Questo è un problema noto, molti provider iniziano a utilizzare Tls12, PayPal, Amazon e così via.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
Problemi correlati