0

我在我的 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 文件。

谢谢

4

3 回答 3

4

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

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

telnet gateway.sandbox.push.apple.com 2195
于 2009-11-20T23:29:55.453 回答
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 命令的区别。

于 2010-09-04T11:15:40.800 回答
0

我也有这个问题。对我来说,在 ssl 选项中删除“密码”的显式设置后它起作用了:

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

所以在删除该行之后:'ciphers' => 'DES-CBC3-SHA' 它起作用了。

于 2015-03-26T10:01:53.547 回答