You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在IIS中发送Apple推送通知时遇凭证未识别错误求助

解决IIS环境下发送APN报"The credentials supplied to the package were not recognized"的问题

我之前处理过好几起类似的案例——控制台程序跑APN完全正常,一部署到IIS就报The credentials supplied to the package were not recognized,核心问题基本都出在IIS运行上下文和控制台的权限/环境差异上,哪怕你已经给了IIS_IUSRS权限,还有几个容易漏掉的细节:

  • 证书文件/存储的权限与路径问题

    • 控制台运行时用的是当前登录用户的上下文,如果你是用本地用户存储的证书,或者证书文件路径是相对路径,IIS进程根本访问不到。
    • 如果用的是.p12/.pem证书文件:
      • 一定要用绝对路径(比如C:\Certificates\apn-cert.p12),别依赖相对路径——IIS的工作目录和控制台启动目录完全不同。
      • 给你的IIS应用池标识账户(比如默认的ApplicationPoolIdentity,或者你指定的自定义账户)直接添加这个证书文件的读取权限,别只给IIS_IUSRS组,有时候组权限继承会有问题。
    • 如果是把证书导入到Windows证书存储:
      • 必须导入到本地计算机的「个人」存储,而不是当前用户的存储。
      • 右键证书→「所有任务」→「管理私钥」,添加你的应用池账户(格式是IIS AppPool\你的应用池名称),给它读取权限。
  • 应用池标识的权限细节

    • 很多人会给IIS_IUSRS权限,但如果你的应用池用的是默认的ApplicationPoolIdentity,这个账户并不属于IIS_IUSRS组(或者说权限继承不生效),直接给这个特定的应用池账户分配权限才是最可靠的。
    • 可以临时把应用池标识改成LocalSystem测试(注意:这只是排查手段,别长期用,不安全),如果能正常发送APN,那就实锤是标识账户的权限问题,再改回原来的标识并补全对应权限。
  • PushSharp的配置适配

    • 如果你用的是PushSharp旧版本,可能在IIS环境下有兼容性问题,建议升级到最新稳定版试试。
    • 检查PushSharp的APN配置,确保证书存储位置设置正确:如果证书在本地计算机存储,要显式设置StoreLocation = StoreLocation.LocalMachine,而不是默认的CurrentUser。
  • 加密服务目录的权限

    • 这个错误偶尔和Windows加密服务的存储目录权限有关,IIS进程需要访问C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys(存储证书私钥缓存的地方)。
    • 打开这个目录的权限设置,添加你的应用池账户,给它读取和写入权限(写入权限是为了让系统缓存私钥,避免每次都重新读取)。

按照这个顺序排查,应该能解决大部分类似问题——毕竟控制台能跑就说明证书和代码逻辑没问题,就是IIS的运行环境没适配好。

内容的提问来源于stack exchange,提问作者Sean Forman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:06:01