服务器脚本中的APN错误

时间:2009-11-19 11:56:55

标签: php iphone sockets stream apple-push-notifications

我在发送有效负载数据时,在我的php脚本中收到此错误。

Warning: stream_socket_client() [function.stream-socket-client]:
Unable to set private key file `/Applications/XAMPP/xamppfiles/htdocs/test/apn/apns-dev.pem'
in /Applications/XAMPP/xamppfiles/htdocs/test/apn/push.php on line 42

Warning: stream_socket_client() [function.stream-socket-client]:
failed to create an SSL handle
in /Applications/XAMPP/xamppfiles/htdocs/test/apn/push.php on line 42

Warning: stream_socket_client() [function.stream-socket-client]:
Failed to enable crypto
in /Applications/XAMPP/xamppfiles/htdocs/test/apn/push.php on line 42

Warning: stream_socket_client() [function.stream-socket-client]:
unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error)
in /Applications/XAMPP/xamppfiles/htdocs/test/apn/push.php on line 42

是什么原因?我需要更改任何设置吗? 我还在服务器中安装了.pem文件。

由于

3 个答案:

答案 0 :(得分:4)

您可以发布用于连接APN的PHP代码(push.php)吗?

黑暗中的一些镜头:
- 那个.pem文件中的证书和私钥都是吗? - 您是否从私钥文件中删除了密码,或者您是否在PHP代码中正确设置了密码? - 运行脚本的用户是否具有访问/读取证书/密钥文件的正确的unix权限? - 您可以从您的机器访问Apple的服务器吗?您可以通过运行telnet进行测试。

telnet gateway.sandbox.push.apple.com 2195

答案 1 :(得分:4)

我遇到了这个问题并且密钥生成过程是问题,对于证书和密钥文件有两个不同的openssl命令,而我两个都使用相同的命令。以下是我如何生成证书并从私钥文件中删除密码(假设您已导出.p12文件):

openssl pkcs12 -clcerts -nokeys -out aps-dev-cert.pem -in aps-dev-cert.p12
openssl pkcs12 -nocerts -out aps-dev-key.pem -in aps-dev-key.p12
openssl rsa -in aps-dev-key.pem -out aps-dev-key.unencrypted.pem
cat aps-dev-cert.pem aps-dev-key.unencrypted.pem > aps-dev.pem

注意前两个openssl命令的区别。

答案 2 :(得分:0)

我也有这个问题。对我来说,删除“密码”的明确设置后,它才有用。在ssl选项中:

$context_options = [ 
    'ssl' => [ 
        'local_cert' => ..., 
        'passphrase' => ..., 
        'ciphers' => 'DES-CBC3-SHA'
    ] 
]; 
stream_context_set_option($stream_context, $context_options);

所以删除行后:' ciphers' => ' DES-CBC3-SHA'它奏效了。