对 SSPI 的调用失败 - 收到的消息是意外的或格式错误

Posted

技术标签:

【中文标题】对 SSPI 的调用失败 - 收到的消息是意外的或格式错误【英文标题】:A call to SSPI Failed - The message received was unexpected or badly formatted 【发布时间】:2017-02-27 19:12:20 【问题描述】:

我们正在使用 PushSharp v2.2.1.0 的略微修改版本,该版本最近在我们的最新版本中停止工作。由于重写的时间限制,我们无法将其更新到 4.x 或 3.x 版本。在对代码的大部分方面进行了几天的修改后,我不确定还有什么可能导致问题。

每当我们尝试处理数据时,我们都会收到以下错误(到目前为止,它看起来只是在 Apple 方面):

A call to SSPI failed, see inner exception.
at System.Net.Security.SslState.StartSendAuthResetSignal(ProtocolToken message, AsyncProtocolRequest asyncRequest, Exception exception)
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.StartReceiveBlob(Byte[] buffer, 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.StartReceiveBlob(Byte[] buffer, 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.StartReceiveBlob(Byte[] buffer, 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.StartReceiveBlob(Byte[] buffer, 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.StartReceiveBlob(Byte[] buffer, 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 PushSharp.Apple.FeedbackService.Run(ApplePushChannelSettings settings, CancellationToken cancelToken)
at PushSharp.Apple.ApplePushService.<>c__DisplayClass4.<.ctor>b__1(Object state) 

Inner Exception: System.ComponentModel.Win32Exception (0x80004005)
The message received was unexpected or badly formatted

我们已经修复了提到的here。由于没有发布大量代码,我不确定哪些信息将有助于调试。我们在检索和加载证书时没有收到任何问题或错误(记录表明它已正确加载且版本正确)。由于旧证书已过期,我们确实对此证书进行了最近更新,但新证书正在正确加载。

我们的基础架构没有任何变化,这意味着入站数据会发生变化。对安全帐户信息进行了一些掩蔽更改,但删除这些更改并不能解决问题,而且它应该只发生在日志记录期间。我错过了什么?

【问题讨论】:

【参考方案1】:

因为我找到了几个接近这个问题但并没有完全解决它的答案(并且因为 PushSharp 的 Git 页面表明他们对 2.x 的问题不感兴趣)我将把我的具体答案寄希望于它帮助某人:

我的问题与新证书有关。虽然我们确实安装了新证书,但我们没有添加保存证书私钥的 p12 文件,因此无法正确加密消息。

将 p12 文件安装到服务器解决了该问题。

总而言之,对于一个被过度考虑的问题,这是一个相当明显的解决方案。

【讨论】:

如果它对某人有帮助,我也遇到了这个问题,摆脱对调试推送代理的调用为我解决了这个问题。

以上是关于对 SSPI 的调用失败 - 收到的消息是意外的或格式错误的主要内容,如果未能解决你的问题,请参考以下文章

apns sharp 中的 iPhone 证书错误调用 SSPI 失败

在 SOAP 请求 .NET CORE 2.2 上发送的 Http.WinHttpException。收到的消息是意外的或格式错误

调用 SSPI 失败,请参见内部异常。接收到的消息异常,或格式不正确。

System.Security.Authentication.AuthenticationException:对 SSPI 的调用失败,请参阅内部异常

WCF“对 SSPI 的调用失败,请参阅内部异常”

调用 SSPI 失败,请参见内部异常 解决方法