Невозможно подключиться к APNS: код возврата 20 (не удалось получить сертификат локального эмитента)
Я пытаюсь использовать PyAPNS для отправки push-уведомлений в iPhone-приложение. Мы прошли процесс получения сертификата из центра Apple dev, который работает нормально; однако мы следовали нескольким различным учебным пособиям о том, как собрать сертификат и закрытый ключ в один файл .pem, и для всех из них попытка подключения к серверу APNS с использованием OpenSSL с нашего веб-сервера с использованием полученного сертификата дает эта ошибка:
$ 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 всегда терпит неудачу когда мы пытаемся отправить push-уведомление, указав ошибку "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, делал различные префиксы первых шагов, прежде чем отправлять полученные мне файлы для загрузки на сервер и выполнять заключительные шаги. Может быть, это как-то связано с этим? Или есть какой-то шаг необходимой настройки сервера, который везде опущен?
Ответы
Ответ 1
Проверьте свой сертификат с помощью simplepush php script в учебнике от raywenderlich.com, а затем мы можем двигаться дальше. Иногда кажется, что сертификат в порядке, но яблоко сумасшедшее по всем этим вещам.
Ошибка двадцать, я думаю, проблема с вашим закрытым ключом, и я думаю, что может быть проблема с вашим файлом инициализации, а также в соответствии с этим: http://www.raywenderlich.com/forums/viewtopic.php?f=2&t=380&start=100.
Убедитесь, что вы экспортируете все правильно и, если необходимо, отмените и создайте новые сертификаты. Надеюсь, вы сможете решить эту проблему!:)
Ответ 2
Как сказал Рэй Вендерлих, вам может потребоваться добавить это в ваш php файл:
stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer');
Файл центра сертификации, который вы можете скачать здесь:
https://www.entrust.net/downloads/binary/entrust_2048_ca.cer