2013-07-12 2 views
5

При попытке сделать испытание надавливанием на мое приложение, я получаю следующее сообщение об ошибке:SSLError outines SSL: SSL_CTX_use_certificate_chain_file: PEM Lib

Traceback (most recent call last): 
    File "test.py", line 16, in <module> 
    wrapper.notify() 
    File "/usr/local/lib/python2.7/dist-packages/APNSWrapper-0.6.1-py2.7.egg/APNSWrapper/notifications.py", line 194, in notify 
    apnsConnection.connect(apnsHost, self.apnsPort) 
    File "/usr/local/lib/python2.7/dist-packages/APNSWrapper-0.6.1-py2.7.egg/APNSWrapper/connection.py", line 215, in connect 
    self.context().connect(host, port) 
    File "/usr/local/lib/python2.7/dist-packages/APNSWrapper-0.6.1-py2.7.egg/APNSWrapper/connection.py", line 161, in connect 
    self.connectionContext.connect((host, port)) 
    File "/usr/lib/python2.7/ssl.py", line 331, in connect 
    self._real_connect(addr, False) 
    File "/usr/lib/python2.7/ssl.py", line 314, in _real_connect 
    self.ca_certs, self.ciphers) 
ssl.SSLError: [Errno 336445449] _ssl.c:365: error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib 

И мой сценарий выглядит следующим образом:

#!/usr/bin/env python 
from APNSWrapper import * 

deviceToken = '****************************************************************' 

# create wrapper 
wrapper = APNSNotificationWrapper('cert.pem', True) 

# create message 
message = APNSNotification() 
message.token(deviceToken) 
message.badge(28) 

# add message to tuple and send it to APNS server 
wrapper.append(message) 
wrapper.notify() 

Что является причиной этой ошибки?

ответ

9

Я не сталкивался с этой конкретной ошибкой раньше в Python, но он очень похож на OpenSSL, забитый на вашем .pem-файле - я бы предположил, что используемый .pem-файл не является правильным форматом для что Python попросил OpenSSL сделать. Я открыл один из моих известных хороших файлов .pem, заменил мою личную идентификационную информацию и общедоступные/закрытые ключи данными мусора, чтобы вы могли понять, что должен выглядеть как не защищенный паролем .pem.

Файл PEM содержит как открытый, так и закрытый ключ. Никогда не публикуйте их, чтобы другие смотрели, поскольку у них есть возможность видеть ваши личные ключи и затем выдавать себя за вас или за ваши серверы!

ПРИМЕЧАНИЕ. Следующий список кодов представляет собой полностью фальшивый рандомизированный набор данных для демонстрации формата файла .pem. Этот образец PEM потерпел неудачу даже в самых случайных проверках с учетом не столь скрытого текста «THIS_IS_JUST_RANDOM_CHARACTERS», где должны быть фактические ключевые данные, а не только случайные символьные данные.

Bag Attributes 
    friendlyName: Apple Development IOS Push Services: com.mycompany.myappidentifier 
    localKeyID: 01 23 45 67 89 AB CD EF 01 23 45 67 89 AB CD EF 01 23 45 67 
subject=/UID=com.mycompany.myappidentifier/CN=Apple Development IOS Push Services: com.mycompany.myappidentifier/OU=ABC1234567/C=US 
issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority 
-----BEGIN CERTIFICATE----- 
THIS_IS_JUST_RANDOM_CHARACTERS_90f0yGqSm7JmgJ0srvviZpn6cSMoCeymB 
t449Y40dVKzDM809kpexmWuMrkjdnfaQmF15lYrpKOAu6t9sZPpFfIocovuW38pH 
p4U9Rtt7TC4tVnMHYYk3Dsbu6lqcMeK9sp15Ffw8vcS9AHafNWeY9sjxe8oICcAt 
mXV6RCcIjqADwf5yHS283SQ45K2DMQbOQ6ScMckLO1o6SC3VqWnkInMQPeVuLkbS 
77BDaRF8X32pOLrwOKyn1CLJLvTDdOb9kWWBVSfvoZwCLinA99Pikc2Cmj0AUzPE 
KHc4GvyqXzotjH9HsHnt8TNPEietXPZuILApztEEoAJwPhlJIiwdCkh66KlP7QJt 
3l8iGCItGoMttokGGR99d7AaPbIwb7dZPjxc8TTBEoHXrHRrVCm4ogEazFiqfG5R 
SCgwK4wyxtMxzgjaUJVq598i7QDmkcQxL8nPyqKvRxURuYMr37JZRFwMQpcmaNwD 
Q7REjrz0DT3qZNZbEB4kSGy9Gcf3HfVZRfzlJV3jdOnw7ACvhB9r9uKdUW5U2Vrh 
Sns6NVpXLHohtXOmWcrMVJfk4wvrmfj4zbj27MO4BVSushEI8f3lOzUY5RdQIA2v 
UZfj47oADpxA0BnO5vysPZ4OcwLwQLoXTEFUiTHDkx7LxNXs0JhADiWnEh8w3c7u 
OeGIYYDU713iBMEUC77kRGeOHzCNYSUG88vRl93b2AKvHM5TL9CFavAr9biSWTEJ 
TCSvYNGv0BjZkmKgZkNQ0Th4Ip2JEBxS8uvBvR0oaF6zLZur3bc1Qi2W3lE7Ea15 
aSZ4o1wMs3TeU8fNZHSCR6NtYNNRkqkoNNYZ4P7IoSafJSnV8sfxBc627jIlUJ7p 
9Xrw0pbnSv2bjcvdZHDhX2bDBYb9mqvYAzgb08diOGEvF7B2H47ScL5RXPv5iPn1 
CzeVCjuByc9hgQZVEoppzyXWpdBwsLgEsSgk1nCSpNItSFqvcu4QBDWeVb9wl44A 
O0SX8rll0jlpbPrWggoGjp5ibJlVXJu70cezccOeturNjhJ4jOLk4yAZsGD10uv6 
yjm4VGwhAzsXgZqaKT29FmIjLVJVfOgsgxAbGI1jgt9rp5kTJZCI2EXRAOOrAUsF 
KUrwynHd9PXCWJLNLHL5nzusPBtRy6C2WXJZgeFYcZ7L7hQ60Fw3IeoyU8AD8GhE 
x1Cv7GADu82kmFPXrkZJgRS6cbtDavMtG8iYCg5Vw8s8l2QglaxqdkXXxcH5TG6c 
Ddcapm7BDpdrvJVwnCqQ8k4i8UlRYXrjYVqh81RSfVjhkfB1QRzBMwPSX1gN61wD 
5m1yiWY9kMHHLhY2jux9rr5MwrRBZLhmjgERwJu89aGIW9cAVXSITZAONTzGI2Zx 
g8L3U2lr7b4zcNuq6pNKuYwpzKrQUK5ou7HWectN9g91yqqmprCO3I8WZCq4W2F2 
GYmwloL1YcoOFpfLSZHijAQOmwppz9VGNbqZn9F27xNUzQhddm8F06vICjQTflBH 
caViw2GaKNLMJm2c4B7saOyqLbthyI59YkyrM9hTQK3fGqQpKJosgEQyFg4KZrRx 
NlkYidUDYy5htWp4kFLW9QmRgoCLtqZyNIOUbdE4dxntPCcGjU5VSGa0ofpxZaMr 
pVLC1GGP4r02yP6aZj04njKJmNrvHEK9sr8S452UVwyRIkIfoiBlCkmmRCVnELa8 
sraVxhpwmLIQC1E4DCIyFH6pPi7VYOh5pZewBlAiFyaHRThVKBSn11dzl714qyqy 
zQaNjHXLP4oWSAEgPHtimCpLgRhhZO2neOwI7ptW7n3WncvW92Fs1Q3FaGujVw0x 
NkpEf4pHfUT4ZK4UdsQzVokyMhptMg03ZLNQ7mkNhkrAPmR5Y7K2zDYBtQ45WULg 
97mCUJ3TCMffVFd3szYF 
-----END CERTIFICATE----- 
Bag Attributes 
    friendlyName: Common Name From Keychain Access CSR Wizard 
    localKeyID: AB CD EF 01 23 45 67 89 AB CD EF 01 23 45 67 89 AB CD EF 01 
Key Attributes: <No Attributes> 
-----BEGIN RSA PRIVATE KEY----- 
THIS_IS_JUST_RANDOM_CHARACTERS_1YKVrMNhmg68Qt026SWMxtaKiVtHG2yYS 
V3gdLgqujtp4rpWONYoLQKhlW923yzrxYuSUhC8LiNDlAjicrJXZVj4vYhwdydSS 
QBnDaxc5U2NYev0tCEbPTpYDERAsdE7WTBwaTuEyWEoqTsPQLucohKY2E7UzoZcZ 
BttZaX0vLy3W7y22dSKtIghJMEy8MENjeJkET6Xaf4ozC7DNr2g1dBICPT42Hx77 
GagtxA2OyxW7qkB8GTnOncXWDbli1y5eYIjb0GZNQVSmGEBl5ykNvhbzpqc53nfN 
NJNMO1mEIaDo3GZIVfv3gpiNGpaplofix2DZJOaQBh4s0X3gwc3Y9f1Ta39tYdVh 
h04JCDdliIfbjp4T6pDJQeebaBPczOne2gFHMOHGlxcfYbNzlqgBhzdoqH25nKN4 
hThTUQioisjUrUayiyPkMAJFdKn37iff1XHOmCFEJqL7eMayeyLk55hWLLBi4Q7I 
wUH9rbR2LnfXdCf25jyRbZQx3uKhjnwZrZL9Pg2OF9nvl1B1UnTtyOHP7uP989u1 
qNiNIS347PLN2tvEIEaFQ26ESY9YpPhcpMWLpJEN6nyer1LcrRQfTPXnoqPKIEDc 
KBnpPyvNxC7EeruwkwWbRdpuOPJ8hFKiY9SwSbJvPb4mBXmSo5mfKaZfy2IuJdTV 
dTQ49Lq3rMDwYsRTAS6Id2I9lFruU5vXR7BtCP5u8QV480f6wU17IPn3mgezXtNU 
R0SSEjVCGWQUZXvEmlLTnqD5T7IHlat7IbKvcaKp6skvJUFanKgCXn7PW6FzuQyF 
QfbGEAmzEIq7UT83WOxCsbUR26kJutIejjcnZWZQ3tMG9wtZysYXkAiCDEMUdSZl 
Y7h5oE5rVeYyT7SXtDhVnNeDmcqIO2VcHt7HFsVQVMUAalA9mnEMjHkxAbgp1mCo 
NxdMzNb44IWAaSM6CmjjMt07GTJsjthXTreFoOm9oWGSIEo67piyIRJP8xmdOitB 
ITLHC9h89kV4vfAJZrrCOxSlcsNADCAS1SJW6kzJn7CxVucnszKZ8sQdc8Xqvqsu 
4CpFs1arZYZ3IE9dOY28LJuuegSBSf6EOTSHK5OOzL6IenrhTUbLSFQpoYF3yNo1 
OfpoyVHltjCeqTHMQjhrY9cokfHsecRR8EZMAAxFDo3YvgVyLzvjvY114NMVkxHh 
5sw7wL4xKE8UxzL4Eew1t8HjSlypLF7s5plq6wtOfEn9HYRKJVGYBT5x2oZm9m6b 
rlVzKeASUuzOXBeNafwYOgXAFBq0i1lw7nkLfyZaeETfE00GxhceK6bnT0UfBMb5 
rvU4Yz1pNhYvG4ZhKJYaiJvzQW6jSYFEyWh8hWPrSco42eMPYms0lxK9Fy4tbHuP 
0XsjURq6aY9P6Cg1ugPM5ad3kOtr8MrJwRLmp94ucwJASuWXj48QH45sVaZbcsKU 
ZwVfKpGke3urr9DtznZnv4QdBSlPhS3e4CihQDdhWZJMPxh1DNRrBWBn7xiOZqEm 
oC7zbfjNtpvhOThz4MCDzJeCtGfI8irjdYFi2eqefZ6lLaoZFYBi 
-----END RSA PRIVATE KEY----- 

Если PEM имеет другой формат (возможно Binary? Missing общественные или частные ключевые разделы? Дополнительные разделы, отсутствующие в данном примере?), То вам необходимо запустить преобразование или повторно экспортировать PEM из PKCS # 12 экспорт из Keychain Access в OS X. Шаг преобразования будет зависеть от того, какой файл у вас на самом деле, поэтому я не могу дать вам никаких указаний без дополнительной информации, но я могу предоставить вам инструкции о том, как перейдите на ретрансляцию PEM из Keychain Access в OS X:

  1. Открытый доступ к брелкам.
  2. В цепочке «логин» найдите категорию «Мой сертификат» или «Все товары» для «Apple Production iOS Push Services: your.apps.app.id»
  3. Щелкните правой кнопкой мыши элемент, который возвращается с чтобы найти и выбрать опцию «Экспорт».
  4. Сохраните файл «Обмен личной информацией (.p12)» в легко доступном месте.
  5. Укажите пароль для файла .p12, который вы можете запомнить, и следуйте инструкциям на экране для аутентификации с помощью Keychain для экспорта данных.
  6. Открыть терминал и 'cd' в каталог, содержащий .p12 от предыдущего шага.
  7. Выполните следующую команду для .p12 filename: openssl pkcs12 -in FILENAME.p12 -out FILENAME.pem -nodes
  8. При появлении запроса введите пароль файла .p12, созданный на шаге 5, и нажмите enter.
  9. Переместите PEM на ваш сервер и, при необходимости, обновите любые ссылки на код.

Опять же, это все предположения, основанные на кодах ошибок, которые вы указали в своем вопросе, однако дайте этот снимок и сообщите нам, как все идет.

Смежные вопросы