2010-07-04 1 views
9

Я написал тестовую php-страницу, которая просто отправляет общее уведомление push, и работает с перерывами. Иногда он доставляет сообщение, и я получаю эту ошибку:Ошибка Push Notification: «Невозможно установить локальный файл цепочки сертификатов»

Сообщение: stream_socket_client() [function.stream-socket-client]: невозможно установить локальный файл цепочки сертификатов `/var/www/ninerobot.com/ public/mlb/certs/mlbtr-push-dev.pem '; Проверьте, что ваши настройки cafile/capath содержат сведения о вашем сертификате и его эмитенте. «

Вы знаете, как я могу решить эту проблему?

Я вижу, что в документах Apple говорится: «Для установки сеанса TLS с APN на сервер провайдера должен быть установлен корневой сертификат Entrust Secure CA. Если на сервере установлена ​​Mac OS X, этот корневой сертификат уже в цепочке ключей. В других системах сертификат может быть недоступен. Вы можете загрузить этот сертификат с веб-сайта сертификатов Entrust SSL. " Означает ли это все, что мне нужно?

+0

Это удалось решить? У меня та же проблема. –

ответ

7

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

  1. ли вы создать законный сертификат с помощью инструкции, как these.
  2. Ваш файл .pem доступен для чтения по вашему серверному процессу (т. Е. Разрешения и расположение файлов хороши)? Многие настройки запускают apache, например, под пользователем/группой «www-data». Замечание: убедитесь, что посетители не могут просмотреть файл .pem, просмотрев его.
  3. Имеет ли ваш сервер Сертифицированный сертификат корневого центра сертификации CAZ (2048 бит)? Если нет, следуйте инструкциям по загрузке/установке для конкретной серверной ОС.
  4. Есть исходящий порт TCP 2195 открыть? Многие хостинг-провайдеры не имеют этого исходящего порта по умолчанию.
+0

4. Как проверить, открыт ли порт 2195? С терминала я сделал 'telnet gateway.sandbox.push.apple.com 2195', и он показал' Trying 17.149.34.66 ... Подключен к gateway.sandbox.push-apple.com.akadns.net.' Затем после некоторых время, он закрыл сам, говоря, что *** Соединение закрыто иностранным хостом. *** ... Это нормально? –

+0

2. Я не уверен, что файл pem доступен для чтения. Когда я просматриваю файл pem через мой браузер, он показывает пустую страницу. Но когда я делаю 'cat path/to/file.pem' в терминале, я вижу содержимое сертификата файла pem. –

+0

Данное разрешение для файла' .pem' решает проблему. – Qazi

11

У меня тоже было больше борьбы, чтобы сделать то же самое. В конце концов я нашел решение отправить push-уведомление через глобальный URL-адрес PHP. Попробуйте выполнить следующие шаги. До этого я надеюсь, что вы все знаете, для создания 3 сертификата Thats PushChat.certSigningRequest, pushkey.p12 & aps_development.cer (ксо, p12, CER)

Откройте терминал и шаг за шагом выполнить следующие команды:

# Make sure terminal refers your correct certificate path. 
$ cd ~/Desktop/ 

# Ask system administrator to open if its not connected 
$ telnet gateway.sandbox.push.apple.com 2195 

Trying 17.110.227.35... 
Connected to gateway.sandbox.push-apple.com.akadns.net. 

Escape character is '^]'. 

# Convert .cer to .pem 
$ openssl x509 -in aps_development.cer -inform der -out PushCert.pem 

# Convert .p12 to .pem. Enter your pass pharse which is the same pwd that you have given while creating the .p12 certificate. PEM pass phrase also same as .p12 cert. 
$ openssl pkcs12 -nocerts -out PushKey1.pem -in pushkey.p12 

Enter Import Password: 

MAC verified OK 

Enter PEM pass phrase: 

Verifying - Enter PEM pass phrase: 

# To remove passpharse for the key to access globally. This only solved my stream_socket_client() & certificate capath warnings. 
$ openssl rsa -in PushKey1.pem -out PushKey1_Rmv.pem 

Enter pass phrase for PushChatKey1.pem: 

writing RSA key 

# To join the two .pem file into one file: 
$ cat PushCert.pem PushKey1_Rmv.pem > ApnsDev.pem 

Затем, наконец, переместите файл SimplePush.php в расположение файла ApnsDev.pem. Оба файла будут в одной папке. и изменить Device Token, Pass Phrase, Certificate Name (ApnsDev.pem), Сообщение ... В файле simplepush.php Скачайте файл, используя приведенный ниже URL. http://d1xzuxjlafny7l.cloudfront.net/downloads/SimplePush.zip Затем запустите файл в терминале или вашего домена сервера

$ php simplepush.php 

или

www.Domainname.com/push/simplepush.php // Now, url shows 'Connected to APNS Message successfully delivered'. 

Thats это, толчок уведомление будет летать и достичь конкретного устройства IOS.

Если вы хотите отправить «Знак», то измените код полезной нагрузки в simplepush.php, как показано ниже,

// Construct the notification payload body: 

$badge = 1; 

$sound = 'default'; 

$body = array(); 

$body['aps'] = array('alert' => $message); 

if ($badge) 

    $body['aps']['badge'] = $badge; 

if ($sound) 

    $body['aps']['sound'] = $sound; 


// End of Configurable 

// Encode the payload as JSON: 

$payload = json_encode($body); 

Теперь запустите файл PHP снова и значок приложения появляется с номером значок в красном кружке.

+0

ваши шаги на терминале работали на меня. Thanks – daniherculano

+0

С удовольствием слышу :) – Anuprabha

0

В дополнение к большому ответу Стива N позвольте мне добавить последний пункт.

  1. Убедитесь, что вы понимаете предупреждение, особенно , включают сведения о вашем сертификате и его эмитенте. Вероятно, у вас нет блока в вашем .pem-файле, то есть issuer=, subject= и т. Д., И ваш файл начинается с -----BEGIN CERTIFICATE. Он может быть случайно удален во время преобразования файла сертификата.
Смежные вопросы