Python: APNs SSLError
Я пытаюсь отправить push-уведомления на iPhone через python, как описано здесь, но я получаю следующую ошибку:
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
Ошибка возникает из модуля ssl python, как говорит трассировка, но сообщение не поет мне. Любые идеи о том, что может быть неправильным?
Спасибо,
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
Ответы
Ответ 1
Вот как я его работаю:
Внутри KeyChain экспортируйте следующие файлы в формате p12
, не указывая пароль:
-
Apple Development Push Services
сертификат cert.p12
-
primary key
под Apple 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
- это сертификат, который вам нужен.
Ответ 2
Я столкнулся с тем же сообщением об ошибке, используя 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)