2011-04-29 30 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