0

尝试从 IIS 中的站点发送推送通知时,我收到“无法识别提供给包的凭据”消息。

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

我在这里尝试了解决方案: PushSharp - 无法识别提供给包的凭据

我试过了:

"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 无法发送推送通知

4

3 回答 3

0

如果它在控制台中有效但在服务中无效,那么我可能是罪魁祸首之一:交互式会话。

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

一些相当陈旧的代码也需要交互式会话。特别是 (t)rusty Office COM 互操作知道是否需要该权限,否则它将根本无法运行。

它可能只与您的情况有关。

于 2018-03-12T21:42:41.690 回答
0

我已经解决了这个问题。

我将运行该站点的应用程序池的身份更改为我当前的用户(管理员)

只是为了确保我还为该用户运行了 winhttpcert,并且在 Cert 文件属性安全设置中,我将完全控制权授予了同一用户。

证书现在工作得很好

于 2018-03-15T00:39:11.490 回答
0

我在部署到 AWS Elastic Beanstalk 的 .NET Core Web 服务中遇到了同样的问题。我将概述我尝试过的所有内容以及我最终如何修复它。

  1. 我按照您可以在任何地方找到的所有步骤来创建 APNS 生产证书。
  2. 下载证书并安装到 Mac Keychain 应用程序中。
  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. 我不知道有什么不同,尽管我怀疑它可能与私钥的加密有关。

希望这可以帮助。

于 2018-10-24T17:46:21.863 回答