Apple推送通知 - 无法识别提供给包的凭据

时间:2018-03-12 21:15:38

标签: c# apple-push-notifications moonapns

我收到"提供给包的凭据无法识别"尝试从IIS中的站点发送推送通知时出现错误消息。

我有一个控制台应用程序在运行良好的服务器上运行完全相同的代码,就在它来自IIS时。

我在这里试过这个解决方案: PushSharp - The credentials supplied to the package were not recognized

我试过了:

"C:\Program Files (x86)\Windows Resource Kits\Tools\winhttpcertcfg" -i certificate.p12 -c LOCAL_MACHINE\My -a "NetworkService" -p <Password>

这是IIS运行的帐户。我也试过IIS_IUSRS,USERS,但我仍然得到凭据错误

我还检查过我只导出私钥而不是证书,我也尝试了两种方式

还有什么我可以尝试的吗?奇怪的是,只有IIS才能发送推送通知

3 个答案:

答案 0 :(得分:0)

如果它在Console中工作但不在服务中,我有一个可能的罪魁祸首:交互式会话。

出于安全原因,服务since Vista在非交互式会话中运行。这意味着他们无法以任何其他方式制作屏幕截图,覆盖UAC或与用户桌面交互。

一些相当旧的代码也需要交互式会话。特别是(t)生锈的Office COM互操作要么知道要么正确,要么就是不能运行。

这可能与您的案件有关。

答案 1 :(得分:0)

我已经解决了这个问题。

我将网站运行的应用程序池的标识更改为我当前的用户(管理员)

为了确保我也为该用户运行了winhttpcert,并且在Cert文件属性安全设置中,我完全控制了同一个用户。

证书现在运作正常

答案 2 :(得分:0)

在部署到AWS Elastic Beanstalk的.NET Core Web服务中,我遇到了同样的问题。我将概述我尝试过的所有内容以及最终的解决方法。

  1. 我遵循了所有可用于创建APNS生产证书的步骤。
  2. 下载了证书并安装到Mac钥匙串应用程序中。
  3. 用私钥导出证书,并提供密钥密码。
  4. 将导出的.p12文件复制到我的PC上的wwwroot目录中
  5. 在我的.NET Core Web服务中,将此文件(提供密码)读入X509证书中。
  6. 使用该证书通过SslStream调用苹果推送服务
  7. 我的本地IIS一切正常,但是一旦上载AWS EB,我的手机上就不会收到通知。
  8. 我添加了日志记录,发现sslStream.AuthenticateAsClient方法将抛出“无法识别提供给软件包的凭据”
  9. 我在这里呆了很长时间
  10. 我尝试记录X509对象的Thumbprint和HasPrivateKey属性,它们看起来都正确,所以我觉得证书已正确读取。
  11. 我尝试将Tls版本设置为Tls12
  12. 我尝试从证书的硬编码字节数组构建x509。
  13. 接下来是黑暗中的一枪。
  14. 我将.p12证书导入了本地PC。
  15. 我注意到信任链不完整,所以我从Apple下载了根证书和中间证书
  16. 我验证了证书显示它具有私钥。
  17. 然后我从Windows cert应用程序中导出了包含私钥(注意:导入时,请确保选中允许导出私钥的框)
  18. 在这里我注意到了一些东西。
  19. 首先,导出要求您提供密码。我使用的是与从Mac导出时相同的方式。
  20. 但是随后导出会要求您选择加密(下拉菜单)。 Mac不问这个。我保留了默认设置(TripleDES-SHA1)。
  21. 它另存为.pfx,据我所知与.p12相同,只是扩展名不同。
  22. 我更改了代码,改用.pfx。
  23. 现在,当部署到AWS时,它可以工作。
  24. 我不知道有什么区别,尽管我怀疑这可能与私钥的加密有关。

希望这会有所帮助。