APNS ssl://gateway.sandbox.push.apple.com:2195连接失败

时间:2011-06-16 13:02:25

标签: ssl push apple-push-notifications

我尝试制作推送通知服务器。 我通过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服务器阻止了。

8 个答案:

答案 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)

这种错误发生在两种情况:

  1. 当2195端口阻塞时。
  2. .pem文件未正确生成时(如我的情况)。
  3. 尝试这两点。你肯定不会收到任何错误。

答案 2 :(得分:3)

我遇到了同样的问题,但我的案例中的解决方案是需要绝对路径的pem证书

  1. 使用私钥的绝对路径而不是相对路径。
  2. 确保允许php用户(或webserver用户,取决于.. www-data,apache,nginx,www ...)读取它(chown,chmod)。
  3. 来自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计算机执行此操作):

  1. 复制第一个服务器的.p12文件(证书和随播私钥)。
  2. 将.p12文件复制到您的钥匙串中。它将成为那里的证书。
  3. 将该证书(包含随播私钥)导出到 .p12文件。
  4. 使用openssl将新的.p12文件转换为新的.pem文件
  5. 您现在可以在新服务器上的openssl命令中使用新的.pem文件。
  6. 希望这是有帮助的

答案 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