4

Apple 推送通知让我快疯了!我按照Ray Wanderlich教程开发了我的应用程序和测试通知,一切正常,直到我将文件 .pem 更改为发行版,并将连接字符串从 gateway.sandbox.push-apple.com 更改为 gateway.push-apple。 com。

现在,如果我尝试发送消息,服务器会返回

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to     ssl://gateway.push.apple.com:2195 (Connection timed out)
Failed to connect: 110 Connection timed out

php 文件和 .pem 文件位于 TMDHosting 上:我尝试询问他们是否关闭了端口号 2195,因为谷歌搜索我发现错误意味着端口已关闭。

不过,我不明白该错误是与证书相关还是与服务器相关。

奇怪的是,如果我按照终端程序测试 .pem 文件,一切似乎都正常

CONNECTED(00000003)
    depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c)     2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
    verify error:num=20:unable to get local issuer certificate
    verify return:0
    ---
    Certificate chain
     0 s:/C=US/ST=California/L=Cupertino/O=Apple Inc/OU=Internet     Services/CN=gateway.push.apple.com
       i:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c)     2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
     1 s:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c)     2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
       i:/O=Entrust.net/OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/OU=(c)     1999 Entrust.net Limited/CN=Entrust.net Certification Authority (2048)
---
Server certificate
-----BEGIN CERTIFICATE-----
    MIIEXTCC..........
-----END CERTIFICATE-----
    subject=/C=US/ST=California/L=Cupertino/O=Apple Inc/OU=Internet         Services/CN=gateway.push.apple.com
    issuer=/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c)      2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 2541 bytes and written 2039 bytes
    ---
    New, TLSv1/SSLv3, Cipher is AES256-SHA
    Server public key is 1024 bit
    Secure Renegotiation IS supported
   Compression: NONE
   Expansion: NONE
    SSL-Session:
    Protocol  : TLSv1
    Cipher    : AES256-SHA
        Session-ID: 
        Session-ID-ctx: 
        Master-Key:     CBA98981BB512ED2FDF0C003F4556FDDA564BEBBEFC6528C37D8E0336BC141AEC6D7E014568B334B8330FFFE266E8CB4
    Key-Arg   : None
    Start Time: 1332945845
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---

这让我认为这不是 .pem 问题......

我错了吗?

我已经在这里阅读了所有类似的问题,并尝试将端口号从 2195 更改为 30,但没有任何变化。提示?

编辑:我发现似乎等于我的问题:TMDHosting 告诉我

...您位于共享托管环境下,无法为您打开端口。但是请注意,您在端口 2195 上建立连接的地址与我们的服务器无关。换句话说,您正在尝试在端口 2195 上建立与远程服务器的连接。为了建立与上述指定端口的连接,您应该确保该端口已为远程服务器上的传入连接打开,而不是在服务器上您在我们这里的帐户所依赖的。

我需要一个 VPS 吗?

编辑2

在我遵循的教程中,我发现

..您将需要一个连接到互联网的服务器。推送通知始终由服务器发送。对于开发,您可以将 Mac 用作服务器(我们将在本教程中使用),但对于生产用途,您至少需要 VPS(虚拟专用服务器)之类的东西。便宜的共享主机帐户还不够好。您需要能够在服务器上运行后台进程、安装 SSL 证书并能够在某些端口上进行传出 TLS 连接。大多数共享主机提供商不允许您这样做,尽管如果您提出要求,他们可能会这样做。不过,我真的推荐使用像 Linode 这样的 VPS 主机。

最后,我认为我确实需要一个 VPS。你能确定吗? 但是为什么如果我使用沙盒服务器发送推送通知,它可以在没有 VPS 的情况下正常工作?

最后更新:(希望对某人有所帮助)似乎有一个错误,因为正确的是我无法从我的主机(TMDHosting)向沙箱或生产服务器发送推送通知:我的共享主机没有 2195端口开放。更改提供者:一切正常。

4

1 回答 1

0

米维,

感谢这篇详细的文章。

我们遇到了类似的问题,这让我们抓狂。

当我们测试证书时,它似乎可以工作,除了:“验证错误:num = 20:无法获取本地颁发者证书”

无论如何,我们通过 openssl 的命令行测试得到一个有效的握手,就像你做的那样。

我们也可以让沙盒/开发证书正常工作。

您能否让我们知道您切换到哪个提供商,以防我们需要进行切换?

谢谢。

于 2012-04-12T07:35:34.440 回答