Apple 推送通知 - 提供给包裹的凭据未被识别
Posted
技术标签:
【中文标题】Apple 推送通知 - 提供给包裹的凭据未被识别【英文标题】:Apple Push Notifications - The credentials supplied to the package were not recognized 【发布时间】:2018-03-12 21:15:38 【问题描述】:我在尝试从 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 无法发送推送通知,这似乎很奇怪
【问题讨论】:
【参考方案1】:如果它在控制台中有效,但在服务中无效,那么可能是罪魁祸首之一:交互式会话。
出于安全原因,服务since Vista 在非交互式会话中运行。这意味着他们无法制作屏幕截图、覆盖 UAC 或以任何其他方式与用户桌面交互。
一些相当陈旧的代码也需要交互式会话。特别是 (t)rusty Office COM 互操作知道是否需要该权限,否则它将根本无法运行。
这可能与您的情况有关。
【讨论】:
【参考方案2】:我已经解决了这个问题。
我将运行该站点的应用程序池的身份更改为我当前的用户(管理员)
为了确保我还为该用户运行了 winhttpcert,并且在 Cert 文件属性安全设置中,我将完全控制权授予了同一用户。
证书现在可以正常工作了
【讨论】:
【参考方案3】:我在部署到 AWS Elastic Beanstalk 的 .NET Core Web 服务中遇到了同样的问题。我将概述我尝试过的所有内容以及我最终如何修复它。
-
我按照您可以在任何地方找到的所有步骤来创建 APNS 生产证书。
已下载证书并安装到 Mac Keychain 应用程序中。
导出了带有私钥的证书,并提供了密钥的密码。
将导出的 .p12 文件复制到我的 PC 到 wwwroot 中的文件夹中
在我的 .NET Core Web 服务中,将此文件(提供密码)读入 X509 证书。
使用该证书通过 SslStream 调用苹果推送服务
我的本地 IIS 一切正常,但上传 AWS EB 后,我的手机不会收到通知。
我添加了日志记录,发现 sslStream.AuthenticateAsClient 方法会抛出“无法识别提供给包的凭据”异常
卡在这里很久了
我尝试记录 X509 对象的 Thumbprint 和 HasPrivateKey 属性,它们看起来都正确,所以我觉得证书读取正确。
我尝试将 Tls 版本设置为 Tls12
我尝试从证书的硬编码字节数组构建 x509。
接下来是在黑暗中拍摄。
我将 .p12 证书导入本地 PC。
我注意到信任链不完整,所以我从 Apple 下载了根证书和中间证书
我验证了证书显示它有一个私钥。
然后我从 Windows cert 应用程序中导出,包括私钥(注意:导入时请确保选中该框以允许导出私钥)
这是我注意到的地方。
首先导出要求您提供密码。我使用的和从 Mac 导出时一样。
然后导出要求您选择加密(下拉)。 Mac 没有问这个。我保留了默认值 (TripleDES-SHA1)。
它保存为 .pfx,据我了解,它与 .p12 相同,只是扩展名不同。
我将代码更改为使用 .pfx。
现在,当部署到 AWS 时,它可以工作了。
我不知道有什么不同,但我怀疑它可能与私钥的加密有关。
希望这会有所帮助。
【讨论】:
以上是关于Apple 推送通知 - 提供给包裹的凭据未被识别的主要内容,如果未能解决你的问题,请参考以下文章
GCM for iOS 和 Apple 提供的推送通知服务有啥区别