【问题标题】:Unable to connect to live 'ssl://gateway.push.apple.com:2195'无法连接到 live 'ssl://gateway.push.apple.com:2195'
【发布时间】:2016-01-26 09:44:08
【问题描述】:

我在 IOS 设备上遇到推送通知的 APNS php 代码问题,我有两个独立的开发和生产连接。

  1. 我已经通过添加 .pem 文件证书和 Passphares 在我的服务器上配置了开发连接,它的工作完美,我也收到了通知。看看我的开发配置:

网址:'ssl://gateway.sandbox.push.apple.com:2195'

$push = new ApnsPHP_Push(
    ApnsPHP_Abstract::ENVIRONMENT_SANDBOX,
    'APNS_Dev_ISAS.pem'
);
$myNewLogger = new MyNewLogger();
$push->setLogger($myNewLogger);

// Set the Provider Certificate passphrase
$push->setProviderCertificatePassphrase('1234567');

$push->setRootCertificationAuthority('APNS_Dev_ISAS.pem');
$push->connect();

问题:

  1. 我通过添加以下参数为生产配置了连接,但出现连接错误:

网址:ssl://gateway.push.apple.com:2195

$push = new ApnsPHP_Push(
    ApnsPHP_Abstract::ENVIRONMENT_PRODUCTION,
    'APNS_PROD_ISAS.pem'
);
$myNewLogger = new MyNewLogger();
$push->setLogger($myNewLogger);

// Set the Provider Certificate passphrase
$push->setProviderCertificatePassphrase('12345678');

$push->setRootCertificationAuthority('APNS_PROD_ISAS.pem');
$push->connect();

连接错误: 信息:正在尝试 ssl://gateway.push.apple.com:2195...错误:无法连接到“ssl://gateway.push.apple.com:2195”:(0) 信息:重试连接(1/3)...信息:正在尝试 ssl://gateway.push.apple.com:2195...错误:无法连接到 'ssl://gateway.push.apple.com :2195': (0) 信息:重试连接 (2/3)... 信息:尝试 ssl://gateway.push.apple.com:2195...错误:无法连接到 'ssl://gateway.push.apple.com:2195':(0) 信息:重试连接 (3/3)... 信息:正在尝试 ssl://gateway.push.apple.com:2195...错误:无法连接到“ssl://gateway.push.apple.com:2195”:(0)

我用谷歌搜索了这个问题,我找到了一些解决方案,我检查了一切,一切都很好,但没有成功。

  • 我使用了正确的开发和生产路径。
  • 我为两者创建了单独的证书 .pem 文件,并在推送应用程序上测试了证书。证书正确。
  • 端口也很好,并且没有阻塞我的服务器,因为开发 url 中使用了相同的端口,并且开发服务器推送通知工作正常。

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: push-notification apple-push-notifications apns-php


    【解决方案1】:

    我在执行 PHP 脚本时遇到了同样的问题。经过一番研究,我评论了这三个密钥对值“cafile”、“CN_match”和“ciphers”。

    然后它开始正常工作。我希望这个回复也对其他人有用。

    $contextOptions = array(
    'ssl' => array(
        'verify_peer' => false, // You could skip all of the trouble by changing this to false, but it's WAY uncool for security reasons.
    //    'cafile' => 'NiteVisionWebPushFile.pem',
    //    'CN_match' => 'gateway.push.apple.com', // Change this to your certificates Common Name (or just comment this line out if not needed)
      //  'ciphers' => 'HIGH:!SSLv2:!SSLv3',
        'disable_compression' => true,
    ));
    

    【讨论】:

      【解决方案2】:

      我为推送通知创建的证书 (.pem) 存在问题。

      解决方案: 经过几天尝试相同的问题,我发现使用迷你字符密码创建证书可能是 1234,它将非常适合您并成功连接到 IOS 推送通知服务器。

      也许这会帮助别人。

      谢谢。

      【讨论】:

      • omggg……我被困了大约 8 小时,直到我找到了这个答案……我爱你,为我节省了很多时间……我想知道原因是不是复杂密码无法连接,原因可能是因为它试图像 ejabberd(像任何其他 XMPP 套接字一样)那样与 APNS 服务器进行 4 次握手,所以如果 SHA 解密/加密花费的时间超过超时限制,那么它连接失败......我想知道
      • @lffi,在我的情况下,我从另一台生成 .csr 文件的机器获得了 .p12 文件。现在我已经使用密码 1234 生成了 .pem 文件,但是在创建 VOIP 测试连接时它仍然给我同样的错误。 警告:stream_socket_client():无法连接到 ssl://gateway.sandbox.push.apple.com:2195(php_network_getaddresses:getaddrinfo 失败:提供节点名或服务名,或未知) This 是我用来在线测试的。有什么建议我缺少什么?
      • @CoDe 兄弟,我也有同样的情况,请问您找到解决方法了吗?请告诉我。
      • 我通过这种方式修复了。使用“$ openssl pkcs12 -in cert.p12 -out pushcert.pem -nodes -clcerts”命令生成 pem。虽然它要求“密码”我没有给出任何“密码”只是点击进入。并使用 "apns-gcm.bryantan.info" 进行测试。希望它会对某人有所帮助。
      • @kalpa 你拯救了我的一天。非常感谢!