2

我已经在这里待了大约 12 个小时。所有与 MDM 相关的 google 链接都是紫色的。我向所有重要的事情发誓,我已经尝试了一切。我已经多次重新生成供应商和客户 CSR、密钥等,但无法获得推送通知。

这是我所做的:

  1. 创建了供应商 CSR,将私钥导出为 vendor.p12
  2. 登录 Apple Provisioning Portal 并生成 MDM CSR 证书
  3. 下载了该证书并将其命名为 vendor.cer
  4. 运行此命令“openssl pkcs12 -in vendor.p12 -nocerts -out vendor.pem”
  5. 然后我在 Keychain Utility 中创建了第二个 CSR,名为 ​​customer.csr
  6. 我使用了在这里找到的很酷的 python 脚本:https ://github.com/grinich/mdmvendorsign
  7. 我为此脚本运行了命令:“python mdm_vendor_sign.py --csr customer.csr --key vendor.key --mdm vendor.cer”
  8. 这生成了一个 plist 证书请求,然后我将其上传到https://identity.apple.com/pushcert/
  9. 我下载了证书并将其命名为 client-push.pem
  10. 我试图通过运行以下命令来检查它是否有效:“openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert push.pem -key vendor.pem”。这给了我错误“错误设置私钥 67028:error:0B080074:x509 证书例程:X509_check_private_key:key values mismatch:/SourceCache/OpenSSL098/OpenSSL098-47.1/src/crypto/x509/x509_cmp.c:406:”

所以我的问题是:我使用什么密钥和证书组合来发送推送通知?我将使用 VENDOR 密钥和客户的证书是有道理的,因为我永远不会拥有客户的私钥,但这是错误的吗?

当我使用客户的 KEY 和 CERT 时,它看起来像是通过打印一大堆东西来工作,但在最顶部它说“验证错误:num = 20:无法获得本地颁发者证书”。此外,我将如何获得客户的私钥?

最后要尝试的是供应商的证书和密钥,这似乎与使用客户的密钥和证书完全相同。

哪种组合是正确的方法?

附带说明一下,我是否需要做任何事情来将“数据”推送令牌转换为常规推送令牌?它说它是base64编码的。我需要解码吗?

更新

我读过该令牌是一个 32 字节的 base64 编码字符串。我正在使用 PHP 发送推送通知操作系统,我认为 bin2hext(base64_decode(Token)) 可以工作。至少当我这样做时它看起来是合法的。仍然没有推送通知。

我还尝试了所有可能的组合,并且只有当我在同一个 PEM 文件中同时使用供应商密钥和证书时,我才能让它发送通知而没有任何错误。消息仍然没有到达。我还多次尝试(并成功生成)来自 identity.apple.com/pushcert 的 PEM 证书文件。它说它在那个页面上工作。

我正在为 Laravel 框架使用 Push 库。它所要求的只是证书文件、推送服务器主机和 pem 密码。

当我尝试使用从 identity.apple.com/pushcert 生成的 pem 文件时出现此错误:

stream_socket_client():无法设置本地证书链文件`/Users/neb/Dev/www/cgmdm/trunk/app/certificates/MDM.p12';检查您的 cafile/capath 设置是否包含您的证书及其颁发者的详细信息

4

0 回答 0