我尝试制作推送通知服务器。 我通过telnet连接到ssl://gateway.sandbox.push.apple.com:2195。
telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.229...
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is '^]'.
我的* .pem没关系(我在另一台服务器上使用它)。 我在其他服务器上使用SAME项目,它在那里工作,但其他服务器上的克隆没有。
我得到了这些错误:
Warning: stream_socket_client() [function.stream-socket-client]: SSL operation failed with code 1. OpenSSL Error messages: error:14094415:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate expired in /var/www/try.php on line 69
Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in /var/www/try.php on line 69
Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /var/www/try.php on line 69
证书未过期,它适用于其他服务器,日期相同。
有人知道错误是什么吗?
我在
工作Apache/2.2.9 (Debian) PHP/5.2.17-0.dotdeb.0 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g
编辑: 看来,在不同服务器上使用相同的证书是行不通的。也许这被Apples服务器阻止了。
答案 0 :(得分:13)
我为此使用apn_on_rails,但我认为只要您使用pem file
,它就会对您有用。我通过重新下载证书和中间证书来修复此问题,使用这些说明重新生成推送通知pem
文件:
从Apple获得应用程序的证书后,导出密钥 和苹果证书作为p12文件。以下是有关如何执行此操作的快速演练:
1. Click the disclosure arrow next to your certificate in Keychain Access and select the certificate and the key.
2. Right click and choose `Export 2 items…`.
3. Choose the p12 format from the drop down and name it `cert.p12`.
Now covert the p12 file to a pem file:
$ openssl pkcs12 -in cert.p12 -out apple_push_notification_production.pem -nodes -clcerts
答案 1 :(得分:6)
这种错误发生在两种情况:
.pem
文件未正确生成时(如我的情况)。 尝试这两点。你肯定不会收到任何错误。
答案 2 :(得分:3)
我遇到了同样的问题,但我的案例中的解决方案是需要绝对路径的pem证书
来自here
答案 3 :(得分:2)
也许你的ISP阻止端口2195和2196.我遇到了同样的问题,要求他们打开它,这对我有用。
答案 4 :(得分:1)
来自互联网的一些随机发现可能有所帮助:
这可能是证书问题。尝试使用流选项allow_self_signed和verify_peer来检查。
尝试使用explicitely sslv2://或sslv3://?
“/ dev / urandom”
上的权限问题答案 5 :(得分:1)
你提到:
我在其他服务器上使用SAME项目并且它在那里工作,但是其他服务器上的克隆没有。
我发现.pem证书不会转移。以下是我使用的步骤,以便在一台OS X计算机上运行的应用程序可以在另一台OS X计算机上运行(不知道如何为非Apple计算机执行此操作):
希望这是有帮助的
答案 6 :(得分:1)
我的Linux机器上有类似的问题。对我来说,这是SELinux问题。
因此,在/ etc / selinux / config文件中,将 SELINUX =强制执行设置为 SELINUX =已禁用。然后重启。多数民众赞成。
答案 7 :(得分:-6)
尝试...
telnet gateway.sandbox.push.apple.com:2195
代替 ...
telnet gateway.sandbox.push.apple.com 2195