webentwicklung-frage-antwort-db.com.de

Ein Aufruf an SSPI ist fehlgeschlagen, siehe innere Ausnahme - Die lokale Sicherheitsbehörde kann nicht kontaktiert werden

Ich habe eine WPF-App, die SSLStream verwendet, um eine Verbindung zum Server herzustellen und Nachrichten zu senden/zu empfangen. Mein Code basiert weitgehend auf diesem Beispiel (SslTcpClient): https://msdn.Microsoft.com/en-us/library/system.net.security.sslstream(v=vs.110).aspx .

Das hat über Monate gut funktioniert. Nach dem 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/de-de/kb/3163018 ) . Meine App hat diese Ausnahme gemeldet:

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 machen ?

16
MilanMilanovich

Hier ist die Lösung in der Registry:

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

wie erwähnt hier

10
MilanMilanovich

Dies bedeutet, dass die andere Seite eine andere TLS-Version verwendet und Sie eine ältere Version verwenden.
Richten Sie das Sicherheitsattribut auf TLS12 ein, bevor Sie die Verbindung herstellen .. Dies ist ein weithin bekanntes Problem, da viele Provider TLS12 verwenden (z. B. Paypal, Amazon usw.).

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
11
Serg Sh

Wenn Sie SslStream verwenden, müssen Sie die TLS-Version im Aufruf von AuthenticateAsClient explizit festlegen. Beispiel:

ssl.AuthenticateAsClient(url, null, SslProtocols.Tls12, false);
0
Fiach Reid