2016-06-20 22 views
9

Ich habe eine WPF-Anwendung, die SSLStream verwendet, um eine Verbindung zum Server herzustellen und einige Nachrichten zu senden/empfangen. Mein Code basiert mehr auf diesem Beispiel (SslTcpClient): https://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v=vs.110).aspx.Ein Aufruf von SSPI ist fehlgeschlagen, siehe innere Ausnahme - Die lokale Sicherheitsbehörde kann nicht kontaktiert werden

Das funktionierte für Monate gut. Nach Erhalt dieses Windows-Updates (kumulatives Update für Windows 10 Version 1511 und Windows Server 2016 Technical Preview 4: 14. Juni 2016 - https://support.microsoft.com/en-us/kb/3163018). Meine App hat damit begonnen, diese Ausnahme zu melden:

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) 

Was kann ich tun? Hier

+1

Wir haben das gleiche Problem nach diesem Update auf unseren Windows 10 Maschinen. Wir verwenden den MySQL .NET Connector, der eine Verbindung zu einer entfernten MySQL DB über SSL herstellt. –

Antwort

8

ist die Lösung, setzen Sie in der Registrierung:

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

als notiert here

+0

[Dieser Link] (https://support.microsoft.com/en-us/help/3061518/ms15-055-vulnerability-in-channel-could-allow-information-disclosure-may-12,-2015) ist ein Verweis auf die technische Diskussion der MS, warum die DH 512-Unterstützung entfernt wurde. –

4

Das bedeutet, andere Seite verwenden eine andere Version von Tls und Sie sind älter. Richten Sie das Sicherheitsattribut auf Tls12 ein, bevor Sie eine Verbindung herstellen. Dies ist ein bekanntes Problem, viele Anbieter beginnen mit Tls12 Paypal, Amazon und so weiter.

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;