2016-06-20 46 views
9

Mam aplikację WPF, która używa protokołu SSLStream do łączenia się z serwerem i wysyłania/odbierania niektórych wiadomości. Mój kod jest bardziej oparty na tym przykładzie (SslTcpClient): https://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v=vs.110).aspx.Połączenie z SSPI nie powiodło się, zobacz wyjątek wewnętrzny - nie można skontaktować się z lokalnym organem bezpieczeństwa

To działało dobrze przez wiele miesięcy. Jednak po otrzymaniu tej aktualizacji systemu Windows (Aktualizacja zbiorcza dla systemu Windows 10 wersja 1511 i techniczna wersja systemu Windows Server 2016 4: 14 czerwca 2016 r. - https://support.microsoft.com/en-us/kb/3163018). Moja aplikacja zaczęła zgłaszać ten wyjątek:

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) 

Co mogę zrobić?

+1

Po tej aktualizacji na naszych komputerach z systemem Windows 10 wystąpił ten sam problem. Używamy złącza MySQL .NET łączącego się ze zdalnym MySQL DB przez SSL. –

Odpowiedz

8

Tutaj jest rozwiązanie, w samym rejestrze:

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

jako zanotowano: here

+0

[Ten link] (https://support.microsoft.com/en-us/help/3061518/ms15-055-vulnerability-in-schannel-could-allow-information-disclosure-may-12,-2015) to odniesienie do dyskusji technicznej MS, dlaczego usunięto wsparcie DH 512. –

4

Oznacza to, że druga strona używa innej wersji tls i jesteś starsza. Skonfiguruj atrybut zabezpieczeń na Tls12 przed nawiązaniem połączenia. To jest znany problem, wielu dostawców zaczyna korzystać z Tls12 PayPal, Amazon i tak dalej.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 
Powiązane problemy