php - “无法设置私钥文件”试图使用 php 发送推送

标签 php ios apple-push-notifications

我正在使用 Ray Wenderlich 推送教程作为为我的应用程序设置推送的引用,我以前做过几十次,实际上是几十次,而且一直很顺利,直到现在。

在执行 php 文件以手动测试发送推送时出现错误:

'Unable to set private key file ... ck.pem' 

最后一行:

$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

ck.pem 是 ssl 证书和私钥的组合,我可以通过以下命令使用这些证书:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushCert.pem -key PushKey.pem

当我执行此操作时,我得到一个关于 SSK 握手读/写 N 字节的大提示和输出,这表明它是成功的,因此证书和 key 必须有效。

所以我不明白为什么当用作上面的 openssl 命令行的参数时,单独使用证书和 key 没有问题,但在 php 文件中的连接 from 中使用时会出现问题。

最初遇到问题后,我删除了所有内容 - 我从钥匙串(keychain)中清除了所有证书和 key ,删除了所有配置文件等。所有这些都从头开始,以确保我没有做错误的地方。相同的结果 - 不断收到“无法设置私钥文件”。

我看到一个过去的帖子,其中有人遇到了同样的问题,他们通过使用 sudo 执行 php 文件解决了这个问题,但这对我不起作用。

任何建议,这让我发疯,特别是因为我之前已经成功完成了数十次。

最佳答案

我遇到过一次,经过数小时的挫折后,我将问题归结为我正在使用 TextEdit 编辑 .php 文件的内容,而 TextEdit 正在插入不可见的字符。

不在行尾,实际上在行本身,即如果 Ray Wenderlich 文件中的原始文本是这样的:

// Put your private key's passphrase here:
$passphrase = ‘cpushchat';

然后在使用 TextEdit 更改密码后,当您查看它时它看起来像这样:

// Put your private key's passphrase here:
$passphrase = ‘mypassword';

但是如果你在十六进制编辑中查看它,TextEdit 实际上所做的是插入不可见的(在文本查看器中不可见的)字符,如下所示:

// Put your private key's passphrase here:
$passphrase = ‘E28098mypassword';

这当然会导致密码不正确,从而导致该消息。

关于php - “无法设置私钥文件”试图使用 php 发送推送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24021660/

相关文章:

php - 验证帐户状态

PHP imap_fetchbody 无法获取 HTML a 标签链接 url

android - IBM Worklight 6.0 - 无法更改默认的 WL.BusyIndi​​cator 文本

ios - 在 Xcode 6 中上传应用程序时出错

Heroku Rails App 上的 iOS 推送通知——如何提供 PEM 文件

php - laravel 获取与多个外键的关系

PHP 到 MySQL 日期格式问题

ios14 Xcode 12 - 触摸 SwiftUI 对象时 Sprite 不显示,但触摸 SKScene 时可以工作

java - 如何使用 javapns 从苹果的增强型通知格式中获取错误响应数据包

ios - gateway.push.apple.com 和 api.push.apple.com 之间的区别