APNS + PHP "stream_socket_client (): Не удалось включить криптографию"

У меня возникли проблемы с использованием APNS с PHP и получением следующего сообщения:

stream_socket_client(): Failed to enable crypto 

Проблема возникает только иногда, и в других случаях она действительно посылает push.

Поскольку у меня есть тестовый скрипт в цикле из 10 итераций, я иногда получаю это:

 stream_socket_client(): SSL: Connection reset by peer 

Я тестирую использование сервера песочницы tls://gateway.sandbox.push.apple.com:2195

Вот что я пробовал:

  • Я попытался переиздать PEM и все сертификаты.
  • Я играл с протоколом запроса sslv3:// и tls:// .
  • Я играл с парольной фразой (push работал без кодовой фразы)
  • Я попытался найти stackoverflow для решения, и ничего не получилось.
  • Проверяемые разрешения на файл pem 644
  • Проверяемые разрешения родительских каталогов pem 755

Похоже, что все решения, которые я нашел в Google и SO, – это люди, у которых проблемы с проблемой вообще.

Я чувствую, что услуга ограничена ставкой, может быть? Поскольку мы ждали некоторое время (около 15 минут), а затем снова попробовали его и смогли успешно нажать около 100 сообщений, пока я не начал получать это сообщение снова.

Функция push sandbox ограничена скоростью. Я сам испытал это при тестировании, но никогда не сталкивался с такими ограничениями, используя API-интерфейс для производства.

Возможно, вы также столкнетесь с их другими защитами.

Открываете ли вы соединение, отправляете сообщение, закрываете соединение, а затем зацикливаете и делаете это снова и снова?

Это приведет к тому, что ваши уведомления будут удалены. Apple хочет, чтобы вы отправляли несколько push-уведомлений с использованием одного и того же соединения, а не нового.

Рекомендации по управлению подключениями

Вы можете установить несколько подключений к одному шлюзу или нескольким экземплярам шлюза. Если вам нужно отправить большое количество удаленных уведомлений, распространите их по соединениям с несколькими разными шлюзами. Это повышает производительность по сравнению с использованием одного соединения: оно позволяет быстрее отправлять удаленные уведомления и позволяет APN быстрее доставлять их.

Хранить соединения с APN в нескольких уведомлениях; не многократно открывайте и закрывайте соединения. APN рассматривает быстрое соединение и разъединение как атаку отказа в обслуживании. Вы должны оставить соединение открытым, если не знаете, что он будет простаивать в течение длительного периода времени, например, если вы только отправляете уведомления своим пользователям один раз в день, нормально использовать новое соединение каждый день.

Из Apple Docs @ https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html

Мой PHP-код генерировал следующую ошибку:

 PHP Warning: stream_socket_client(): Failed to enable crypto in /private/tmp/t.php on line 12 PHP Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /private/tmp/t.php on line 12 PHP Warning: fclose() expects parameter 1 to be resource, boolean given in /private/tmp/t.php on line 24 

Проблема была, проклятый сертификат, истек позавчера! 🙂 Ты можешь поверить в это?

Итак, мне нужно воссоздать мой файл PEM.

Нет необходимости обновлять ваш файл pem

эта ошибка возникает, когда вы используете неверный PassPhrase

приветствует Эмилиано

У меня была эта проблема. Исчезнул после предоставления разрешения на запись для «всех» для файла .pem.

У меня есть эта проблема, потому что я глупо забыл включить расширение файла (.pem) при поставке пути к файлу для local_cert.

несколько проверок :

  1. токен устройства должен быть – с spaces и без < или >
  2. убедитесь, что путь сертификата правильный и истек срок его действия.
  3. убедитесь, что ключевая фраза, которую вы используете, является той, которую вы использовали для получения сертификата

В моем случае проблема была в моем mac (OSX Sierra). Я загрузил php и cert на свой сервер, запустил его, и уведомление было доставлено.