当前位置: 首页 > 知识库问答 >
问题:

PushSharp Apple-收到的消息意外或格式错误

弓明亮
2023-03-14

我使用的是PushSharp的2.1.2版本。该应用程序是。NET 4.5.1(虽然我也尝试过定位。NET 4.5和.网4)

我正在尝试通过沙箱Apple APNS发送推送消息,但没有成功。

我正在使用Ray Wenderlich的演练中提供的PHP脚本成功地发送消息,该脚本使用与我的PushSharp应用程序相同的证书并发送到相同的设备ID。

我已经通过从钥匙链导出完整的证书作为p12进行了测试。导出已完成的证书和密钥。导出私钥。也通过这里使用的方法。当我将证书和密钥结合在PHP脚本中使用时,我没有任何问题。

我已经将p12证书导入到我测试的机器上-似乎没有什么区别。

我尝试在向推送代理注册apple推送服务时更改iProduction标志。当它被设置为生产时没有错误(即使这是一个沙盒证书),但是在这种情况下,它显然也无法通过设备。

我的消息都不会通过,都得到一个服务异常,如下所示:

System.Security.Authentication.AuthenticationException: A call to SSPI failed, see inner exception. ---> System.ComponentModel.Win32Exception: The message received was unexpected or badly formatted
 --- End of inner exception stack trace ---
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.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)

这基本上就是我的代码的样子:

var push = new PushBroker();
// register event handlers for channel create/destroy/exception, notificationrequeue, serviceexception, notification sent

var appleCert = File.ReadAllBytes(ConfigurationManager.AppSettings["CertAddress"]);
push.RegisterAppleService(new ApplePushChannelSettings(false, appleCert, ConfigurationManager.AppSettings["CertPassword"]));

var pn = new AppleNotification().ForDeviceToken(item.SendToDeviceIdentifier).WithAlert(item.AlertMessage).WithBadge(item.Badges);

push.QueueNotification(pn);

我调用了channel up事件,然后调用了service exception。

一些相关的问题提到,这个错误可能与防火墙问题有关-我已经在2个不同的网络中测试了我的应用程序,这些网络能够发送推送通知(其中1个目前正在使用PushSharp应用程序)。

如有任何见解,将不胜感激。

共有2个答案

能向晨
2023-03-14

如果有人在Windows Server 2003上运行此修补程序(我知道,我知道),则必须运行此修补程序,否则即使在实施修复程序后,仍会出现奇怪的错误。我花了几个小时想知道为什么我的2008服务器工作,而我的2003服务器没有。

http://support.microsoft.com/kb/948963

龙博
2023-03-14

我们使用现在不推荐使用的APNS Sharp库(PushSharp的祖先)时遇到了相同的问题。我提交了对APNS Sharp的拉取请求,该请求根据我的测试修复了该问题。

修改是要更改的(在ApplePushChannel.cs中)

stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, System.Security.Authentication.SslProtocols.Ssl3, false);                   

stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, System.Security.Authentication.SslProtocols.Tls, false);

我没有找到对此的确认,但看起来沙盒APN不再支持SSL3协议。与其他报告此问题的人一样,我针对生产APN的通知仍然有效。

您可以在此处找到拉取请求:

https://github.com/Redth/PushSharp/pull/369/files

最新消息

Apple Developer网站上有一个关于此主题的帖子:

https://devforums.apple.com/thread/224320?tstart=0

然而,那里的一些人也在这个线程或github线程上。所以信息肯定是有偏见的。我在苹果的一个联系人说:

虽然还没有正式的留档,但APNS似乎正在向TLS而不是SSL发展(仅仅基于看到这种变化——我没有听到任何官方消息)。

 类似资料:
  • 我正在尝试连接到需要配置双向SSL的API。我有我在postman中配置的证书和私钥,如下图所示。 这在Postman中工作得很好,但当我尝试使用HttpClient在C#中实现它时,SSL失败了。我得到的错误是“收到的消息是意外的或格式不正确的。”。我相信这与不正确的配置有关。 我引用了这篇StackOverflow文章来实现我的代码:将私钥与中的X509Certificate2类相关联。网 以

  • 我试图解决这个问题已经有一段时间了,但我所尝试的一切都是无用的。我尝试了HttpClientHandler,但仍然得到了错误! 错误消息: 无法建立SSL连接,请参阅内部异常 身份验证失败,请参阅内部异常 收到的消息意外或格式不正确 我从零开始学习c#,而且我对c#语言非常熟悉,所以请解释一下问题所在。

  • 我试图连接到Kafka,从C#client启用TLS,在调用。不幸的是,到目前为止,互联网上的帖子都没有帮助我解决这个问题。你知道会出什么问题吗? 下面是我用来启动连接的最小样本C#代码

  • 我使用Windows 10, Python 3.7.6.使用以下软件包: 我使用的MySQL数据库具有以下设置。该数据库是使用我公司内的IT云数据服务创建的。我下载了SSL证书并将它们放在我的django项目中。 现在,当我键入,我可以连接到数据库,一切正常。我可以看到DB支持SSL。 但是,当我键入python manage时。py runserver要启动服务器,我会遇到以下异常,我不知道如何

  • 我有一个。NET Core 3.1 C#应用程序,该应用程序通过HTTPS调用API(并将其公钥作为获取令牌的一部分,因为该证书稍后将用于解密单独发送回的信息)。在我们几乎所有的机器上,它都在工作,但是在一台Windows 8.1机器上,当我们尝试初始连接身份验证令牌时,我们会遇到以下一系列异常: 异常是从,因此我怀疑这是在HTTPS级别发生的,我们的证书内容在这里并不真正相关。 我们获取令牌的代

  • 问题内容: 我最近尝试使用sftp访问我的linux机器,在那里我实现了自己的简单外壳。并且我设置了除root用户以外的其他用户默认使用我的shell(通过编辑/ etc / passwd文件)。然后问题出现了,一旦我尝试通过sftp访问,我将收到一条消息:“接收的消息太长:”,我搜索了解决方案,一种解决方案是将该用户的默认shell改回普通的bash shell。我试过了,而且奏效了,问题在于,