Ошибка push-уведомления: «Невозможно установить локальный файл цепочки сертификатов» - PullRequest
10 голосов
/ 04 июля 2010

Я написал тестовую страницу php, которая просто отправляет общее push-уведомление, и оно работает с перебоями.Иногда он доставляет сообщение, а иногда я получаю эту ошибку:

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

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

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

Ответы [ 3 ]

13 голосов
/ 29 октября 2014

Я тоже получил больше борьбы, чтобы сделать то же самое.В конце концов я нашел решение отправить push-уведомление через глобальный URL-адрес PHP.Попробуйте следующие шаги.До этого я надеюсь, что вы все знаете, чтобы сгенерировать 3 сертификата, которые PushChat.certSigningRequest, pushkey.p12 & aps_development.cer (csr, 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.Оба файла будут в одной папке.и измените маркер устройства, фразу-пароль, имя сертификата ( 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'.

. Это означает, что push-уведомление вылетит и достигнет определенногоУстройство 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, и значок приложения появится сномер значка в красном круге.

7 голосов
/ 02 марта 2011

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

  1. Вы создали законный сертификат с помощью инструкций, подобных this .
  2. ваш .pem файл, читаемый процессом вашего веб-сервера (то есть права доступа и расположение файла хороши)?Многие установки запускают apache, например, под пользователем / группой "www-data".Примечание: убедитесь, что посетители не могут просматривать .pem-файл, перейдя к нему.
  3. На вашем сервере установлен корневой сертификат Secure Ent CA (2048 бит)?Если нет, следуйте инструкциям по загрузке / установке для конкретной серверной ОС.
  4. Открыт ли исходящий TCP-порт 2195 ?Многие хостинг-провайдеры по умолчанию НЕ открывают этот исходящий порт.
0 голосов
/ 03 октября 2016

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

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