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

问题描述:

我试图使用PyAPNS将推送通知发送到iPhone应用程序。我们已经完成了从Apple开发中心获得证书的过程,该过程正常;但是,我们已经遵循了几个不同的教程来介绍如何将证书和私钥放在一个.pem文件中,并且对于所有这些文件,尝试使用OpenSSL从我们的Web服务器连接到APNS服务器,并使用生成的证书给出这个错误:无法连接到APNS:返回码20(无法获得本地发行者证书)

$ 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总是失败,给出错误“Fault 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上的同事在将结果文件发送给我上传到服务器并执行最后步骤之前,一直在执行各个步骤的各种前缀。不知何故,这有什么关系吗?还是有一个必要的服务器设置步骤到处被省略?

+0

你导出与关键证书?这通常是第一个问题 – 2013-06-03 12:16:48

+0

连接到gateway.sandbox.push.apple.com时出现[“verify error:num = 20”(http://*.com/q/23343910))的可能重复。 – jww 2016-03-14 21:19:19

用raywenderlich.com教程中的simplepush php脚本测试您的证书,然后我们可以从那里移动。有时候看起来证书没问题,但苹果对所有这些东西都很挑剔。

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

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

+0

为什么选择投票?这是一个完全可以接受的答案。 – 2013-07-07 21:06:47

+0

使用raywenderlich.com教程中的simplepush php脚本测试证书对我来说很好。也许你是对的,苹果是疯狂的挑剔。我应该向前看,看看最终的结果。 – David 2014-03-27 18:04:38

由于雷Wenderlich说,你可能需要添加到您的PHP文件:

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

证书授权文件,你可以在这里下载: https://www.entrust.net/downloads/binary/entrust_2048_ca.cer