【问题标题】:APNS ssl://gateway.sandbox.push.apple.com:2195 connection failsAPNS ssl://gateway.sandbox.push.apple.com:2195 连接失败
【发布时间】:2011-09-16 08:52:59
【问题描述】:

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

编辑: 看来,在不同的服务器上使用相同的证书是行不通的。也许这被苹果服务器阻止了。

【问题讨论】:

  • 我今天遇到了同样的错误。也许这是苹果方面的事情。我现在正在挖掘......
  • 我今天刚刚为自己解决了这个错误。我注意到我的 Entrust 证书很糟糕,所以我重新制作了它和中提琴。奇怪的是,没有它你就无法连接,但是 w/e。
  • 也许这可以解决我的问题...不知道。我现在在另一台服务器上使用 JavaAPNS =)

标签: ssl push apple-push-notifications


【解决方案1】:

我为此使用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

【讨论】:

  • 我已经试过了,这对我不起作用。 =(但我知道在大多数情况下证书是问题。但我的证书还可以,它在其他服务器上工作正常
【解决方案2】:

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

  1. 当 2195 端口被阻塞时。
  2. .pem 文件未正确制作时(如我的情况)。

试试这两点。你肯定不会得到任何错误。

【讨论】:

  • 至 1. 当 2195 端口被阻塞时,telnet 不起作用。 To 2. 我在另一台服务器上使用相同的 *.pem 文件,它在那里工作。
  • 我可以将我的案例添加为第三点,以验证您服务器上 *.pem 文件的路径
  • 但在 cake php 中包含 .pem 文件的位置。如果您有想法请分享。
  • 嗨@Starbax,请接受任何答案,以便对其他人有所帮助。
  • 嗨@HimanshuMohan,我不能接受任何答案,他们都没有帮助我,从来没有发现问题。这篇文章 > 6 岁。问候
【解决方案3】:

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

  1. 使用私钥的绝对路径而不是相对路径。
  2. 确保允许 php 用户(或 webserver 用户,取决于.. www-data、apache、nginx、www...)读取它(chown、chmod)。

来自here

【讨论】:

    【解决方案4】:

    从互联网上随机找到一些可能会有所帮助的发现:

    可能是证书问题。试试流选项 allow_self_signed 和 verify_peer 来检查。

    尝试明确使用 sslv2:// 或 sslv3:// ?

    “/dev/urandom”权限问题

    【讨论】:

      【解决方案5】:

      也许您的 ISP 阻止了端口 2195 和 2196。我遇到了同样的问题,要求他们打开它,这对我有用。

      【讨论】:

      • 正如我在描述 telnet 工作中所说,如果端口被阻止,它将无法工作
      【解决方案6】:

      你提到:

      我在另一台服务器上使用 SAME 项目,它在那里工作,但另一台服务器上的克隆却没有。

      我发现 .pem 证书不会转移。以下是我为在一台 OS X 机器上运行的应用程序在另一台机器上运行所遵循的步骤(不知道如何为非 Apple 机器执行此操作):

      1. 复制第一个服务器的 .p12 文件(证书和配套私钥)。
      2. 将该 .p12 文件复制到您的钥匙串中。它将在那里成为证书。
      3. 将该证书(带有配套私钥)导出到 .p12 文件。
      4. 使用 openssl 将新的 .p12 文件转换为新的 .pem 文件
      5. 您现在可以在新服务器上的 openssl 命令中使用新的 .pem 文件。

      希望对你有帮助

      【讨论】:

      • 我从来没有在任何服务器上做过...但我的问题几乎是 2Jears 旧 =) 也许将 p12 或 pem 导入服务器钥匙串就可以了,我不记得这样做了 =)由于 1 jear 我曾经使用 JavaPNS 来执行此操作,因此它比 easyApns 效果更好。 ;)
      【解决方案7】:

      我在我的 Linux 机器上遇到了类似的问题。对我来说,这是 SELinux 的问题。

      因此,在您的 /etc/selinux/config 文件中,将 SELINUX=enforcing 设置为 SELINUX=disabled。并重新启动。就是这样。

      【讨论】:

        【解决方案8】:

        试试...
        telnet gateway.sandbox.push.apple.com:2195 代替 ... telnet gateway.sandbox.push.apple.com 2195

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-04
          • 2020-04-05
          • 2013-02-18
          • 2015-11-05
          • 2015-12-25
          相关资源
          最近更新 更多