18

我正在尝试使用 PyAPNS 将推送通知发送到 iPhone 应用程序。我们已经完成了从 Apple 开发中心获取证书的过程,效果很好;但是,我们遵循了几个不同的教程,了解如何将证书和私钥放在一个 .pem 文件中,并且对于所有这些教程,尝试使用生成的证书从我们的 Web 服务器使用 OpenSSL 连接到 APNS 服务器这个错误:

$ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apns.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, server certificate, etc.]

有时我们可以在这一切结束时输入一些东西,并且在我们按下回车之前连接不会关闭,有时不会(它立即关闭),但即使我们看起来有连接,当我们尝试时 PyAPNS 总是失败发送推送通知,给出错误“故障 500:'无法连接到 APNS 服务器。'”,我只能假设与“无法获取本地颁发者证书”的原因相同——尽管我不知道这可能是什么原因。

我们一直关注的教程包括:

http://blog.serverdensity.com/how-to-build-an-apple-push-notification-provider-server-tutorial/

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

http://www.nasoni.net/2010/12/02/apns-client-development-certificate/

http://thebirdytoldmeso.com/%28S%28l131v3jmvpdh5255u1jayp20%29%29/userActions/thread/Question.aspx?id=10302792

是的,我们一直在从私钥中删除密码,当我们尝试连接 OpenSSL 时它不会要求它,所以大概这部分工作正常。

我们不知道出了什么问题。令人恼火的是,所有这些教程(显然还有 Apple)都认为您使用的是 Mac,而我正在 Windows 上开发,而服务器(我正在开发的服务器)是 Ubuntu;在将结果文件发送给我以上传到服务器并执行最后步骤之前,我在 Mac 上的同事一直在为第一步做各种前缀。这可能与它有关吗?或者是否有一个必要的服务器设置步骤在任何地方都被省略了?

4

2 回答 2

1

使用来自 raywenderlich.com 的教程中的 simplepush php 脚本测试您的证书,然后我们可以从那里继续。有时看起来证书很好,但苹果对所有这些东西都非常挑剔。

错误二十我认为意味着您的私钥有问题,我认为您的配置文件也可能有问题,根据此:http ://www.raywenderlich.com/forums/viewtopic.php?f=2&t=380&start =100

确保您正确导出所有内容,如果需要,请撤销并制作新证书。希望你能解决这个问题!:)

于 2013-03-01T16:59:35.533 回答
-2

正如 Ray Wenderlich 所说,您可能需要将其添加到您的 php 文件中:

stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer');

您可以在此处下载证书颁发机构文件: https ://www.entrust.net/downloads/binary/entrust_2048_ca.cer

于 2014-05-07T20:11:40.873 回答