无法连接到APNS:返回代码20(无法获得本地颁发者证书)

时间:2012-08-16 11:40:54

标签: ssl push-notification ssl-certificate apple-push-notifications

我正在尝试使用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.]

有时我们能够在所有这些内容中键入内容,并且在我们按Enter键之前连接不会关闭,有时不会(它会立即关闭),但即使我们看起来有连接,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上已经做了第一步的各种前缀,然后将结果文件发送给我上传到服务器并执行最后的步骤。不管怎样,这可能与它有关吗?或者是否有一个必要的服务器设置步骤被忽略?

2 个答案:

答案 0 :(得分:1)

使用raywenderlich.com教程中的simplepush php脚本测试您的证书,然后我们可以从那里继续。有时似乎证书很好,但苹果对所有这些东西都很疯狂。

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

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

答案 1 :(得分:-1)

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

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

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