'无法设置私钥文件'尝试使用php发送推送

时间:2014-06-03 17:42:16

标签: 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字节的大量调整和输出,表明它是成功的,因此证书和密钥必须有效。

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

在最初得到问题之后我删除了所有内容 - 我清除了钥匙串中的所有证书和密钥,删除了所有配置文件等等。整个批次再次以干净的石板开始,以确保我没有制作一个错误的地方。相同的结果 - 继续获取“无法设置私钥文件”。

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

任何建议,这都让我很生气,特别是因为我之前成功地做了几十次。

1 个答案:

答案 0 :(得分:3)

我有过一次这样的事情,经过几个小时的挫折之后,我跟踪问题直到我使用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';

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