Подтвердить что ты не робот

APNS ssl://gateway.sandbox.push.apple.com: сбой подключения 2195

Я пытаюсь создать сервер 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 '^]'.

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

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

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.

4b9b3361

Ответ 1

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

Как только у вас есть сертификат от 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

Ответ 2

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

  • Когда порт 2195 является блоком.
  • Если файл .pem не выполнен правильно (как в моем случае).

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

Ответ 3

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

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

из здесь

Ответ 4

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

Ответ 5

Некоторые случайные данные из Интернета, которые могли бы помочь:

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

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

Проблема с разрешением на "/dev/urandom"

Ответ 6

Вы упомянули:

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

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

  • Скопировать файл первого сервера .p12 (сертификат и сопутствующий закрытый ключ).
  • Скопируйте этот файл .p12 в свой брелок. Он станет там сертификатом.
  • Экспортируйте этот сертификат (с закрытым закрытым ключом) в файл new.p12.
  • Используйте openssl для преобразования этого нового файла .p12 в новый .pem файл
  • Теперь вы можете использовать новый .pem файл в своей команде openssl на новом сервере.

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

Ответ 7

У меня была аналогичная проблема на моем Linux-боксе. Для меня это была проблема SELinux.

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

Ответ 8

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