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.
Ответы
Ответ 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