APNS ssl: //gateway.sandbox.push.apple.com: 2195 сбой подключения - PullRequest
15 голосов
/ 16 июня 2011

я пытаюсь сделать сервер push-уведомлений. Я получаю соединение с ssl: //gateway.sandbox.push.apple.com: 2195 с помощью telnet.

telnet gateway.sandbox.push.apple.com 2195
Trying 17.172.232.229...
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is '^]'.

мой * .pem в порядке (я использую его на другом сервере). Я использую тот же проект на другом Сервере, и он работает там, но клон на другом Сервере не работает.

Я получаю эти ошибки:

Warning: stream_socket_client() [function.stream-socket-client]: SSL operation failed with code 1. OpenSSL Error messages: error:14094415:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate expired in /var/www/try.php on line 69

Warning: stream_socket_client() [function.stream-socket-client]: Failed to enable crypto in /var/www/try.php on line 69

Warning: stream_socket_client() [function.stream-socket-client]: unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /var/www/try.php on line 69

Срок действия сертификата НЕ истек, он работает на другом Сервере и совпадает с датой.

Кто-нибудь знает, в чем может быть ошибка?

Я работаю на

Apache/2.2.9 (Debian) PHP/5.2.17-0.dotdeb.0 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g

EDIT: Кажется, что использование одного сертификата на разных серверах не работает. Возможно, это заблокировано серверами Apple.

Ответы [ 8 ]

14 голосов
/ 17 июня 2011

Я использую apn_on_rails для этого, но я думаю, что он будет работать для вас, пока вы используете pem file.Я исправил это, повторно загрузив сертификат и промежуточный сертификат, заново создав файл push-уведомлений pem, используя следующие инструкции:

Получив сертификат от Apple для своего приложения, экспортируйте свой ключ и сертификат Apple в видефайлы p12.Вот краткое руководство о том, как это сделать:

1. Click the disclosure arrow next to your certificate in Keychain Access and select the certificate and the key. 
2. Right click and choose `Export 2 items…`. 
3. Choose the p12 format from the drop down and name it `cert.p12`.

Now covert the p12 file to a pem file:  

  $ openssl pkcs12 -in cert.p12 -out apple_push_notification_production.pem -nodes -clcerts
6 голосов
/ 20 декабря 2011

Этот тип ошибки возникает в двух ситуациях:

  1. Когда порт 2195 блокирован.
  2. Когда файл .pem сделан неправильно (как в моем случае),

Попробуйте эти два пункта.Вы наверняка не получите никакой ошибки.

3 голосов
/ 27 августа 2015

У меня была та же проблема, но решение в моем случае состояло в том, что сертификат pem, требующий абсолютного пути

  1. Используйте абсолютный путь для закрытого ключа вместо относительного пути.
  2. Убедитесь, что пользователю php (или пользователю веб-сервера, в зависимости .. www-data, apache, nginx, www ...) разрешено читать его (chown, chmod).

из здесь

2 голосов
/ 26 октября 2011

Может быть, ваш ISP блокирует порты 2195 и 2196. У меня была такая же проблема, попросил их открыть ее, и это сработало для меня.

1 голос
/ 06 марта 2015

У меня была похожая проблема с моей коробкой Linux.Для меня это была проблема SELinux.

Так что в вашем файле / etc / selinux / config установите SELINUX = принудительное на SELINUX = отключено .И перезапустить.Вот и все.

1 голос
/ 19 января 2013

Вы упоминаете:

Я использую тот же проект на другом Сервере, и он работает там, но клон на другом Сервере не работает.

I 'мы обнаружили, что сертификаты .pem не передаются.Вот шаги, которые я выполнил, чтобы заставить приложение, работающее на одном компьютере с OS X, работать на другом (не знаю, как это сделать для компьютеров, не принадлежащих Apple):

  1. Копировать поверх первогоФайл .p12 сервера (закрытый ключ сертификата и компаньона).
  2. Скопируйте этот файл .p12 в свою цепочку для ключей.Там он станет сертификатом.
  3. Экспортируйте этот сертификат (с дополнительным закрытым ключом) в новый .p12 файл.
  4. Используйте openssl для преобразования этого нового файла .p12в новый файл .pem
  5. Теперь вы можете использовать новый файл .pem в вашей команде openssl на новом сервере.

Надеюсь, это полезно

1 голос
/ 05 июля 2012

Случайные находки из интернета, которые могут помочь:

Это может быть проблема с сертификатом.Попробуйте параметры потока allow_self_signed и verify_peer, чтобы проверить это.

Попробуйте явно использовать sslv2: // или sslv3: //?

Проблема с правами доступа для "/ dev / urandom"

0 голосов
/ 27 ноября 2012

попробовать ...
telnet gateway.sandbox.push.apple.com:2195 вместо ... telnet gateway.sandbox.push.apple.com 2195

...