2011-04-29 123 views
18

我试图通过Python推送通知给iPhone所描述here但我收到以下错误:蟒蛇:APN的SSLError

Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/home/omat/CA/server/ca/models.py", line 193, in push 
    c.connect((host_name, 2195)) 
    File "/usr/lib/python2.6/ssl.py", line 307, in connect 
    self.ca_certs) 
SSLError: [Errno 336265225] _ssl.c:337: error:140B0009:SSL routines: 
    SSL_CTX_use_PrivateKey_file:PEM lib 

该错误是从Python SSL模块内提出为回溯说但是这个消息并没有对我唱歌。任何想法可能是错误的?

感谢,

OMAT

编辑:

使用从证书和私钥创建的证书,如下所示:

openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12 
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12 
cat apns-dev-cert.pem apns-dev-key.pem > apns-dev.pem 
+0

可能重复httlib的HTTPSConnection与PKCS#12证书](http://stackoverflow.com/questions/2630011/error-using-httlibs-httpsconnection-with-pkcs12-certificate) – Daenyth 2011-04-29 14:56:56

+0

在这种情况下两个证书都是PEM证书 – omat 2011-04-29 15:33:03

回答

39

这里是我怎么弄它的工作原理:

从内钥匙链导出以下两者中p12格式,不给密码:

  • Apple Development Push Services证书cert.p12
  • primary keyApple Development Push Services下为pkey.p12

在终端进入目录,你已经出口证书并将p12文件转换为pem格式,并将它们连接如下:

$ openssl pkcs12 -in pkey.p12 -out pkey.pem -nodes -clcerts 
$ openssl pkcs12 -in cert.p12 -out cert.pem -nodes -clcerts 
$ cat cert.pem pkey.pem > iphone_ck.pem 

iphone_ck.pem是您需要的证书。

+0

我有类似的问题,但我找不到苹果开发推送服务的主要密钥,您是如何找到它的?感谢btw巨大的回应。 @omat – GangstaGraham 2013-05-14 22:06:24

+0

检查钥匙串中的钥匙目录。它是您使用CSR证书创建的名称下的私钥。 – elliotrock 2013-12-03 00:10:50

+0

实际上,找出私钥的方法是查看Xcode并查看代码签名授权是什么 - 私钥将与此匹配。另外,当您运行openSSL命令时,系统会提示您输入密码 - 假设您没有在导出时指定一个密钥,只需点击返回即可。呼!这终于让我的努力工作! – 2014-02-21 16:52:41

13

我遇到了同样的错误消息,使用PyAPNs。这个例子说,发起这样的:

apns = APNs(use_sandbox=True, cert_file='cert.pem', key_file='key.pem') 

原来,解决我的问题是,包括每个.PEM文件的完整系统路径:

cert_path = os.path.join(os.path.dirname(__file__), 'cert.pem') 
key_path = os.path.join(os.path.dirname(__file__), 'key.pem') 
apns = APNs(use_sandbox=True, cert_file=cert_path, key_file=key_path) 
[错误使用
+0

这真的很奇怪,但即使'cert.pem'和'key.pem'停留在同一级别层次上,它也是解决方案,很好的答案! – 2015-08-12 19:49:01