Ошибка при использовании ssl cert с PHP

Я новичок в php, и я получаю эту ошибку, пытаясь загрузить сертификат

jameys-macbookpro41:~ user$ php -f ~/Sites/providerService.php 

Предупреждение: stream_socket_client (): невозможно установить локальный файл цепочки сертификатов `cert.pem '; Убедитесь, что ваши настройки cafile / capath содержат сведения о вашем сертификате и его эмитенте в /Users/jamey/Sites/providerService.php в строке 27

cert.pem находится в той же папке, что и файл php. файл cert.pem был создан в инструменте Apple keychain

 class pushNotifications { ... private $sslPem = 'cert.pem'; ... function connectToAPNS(){ $streamContext = stream_context_create(); stream_context_set_option($streamContext, 'ssl', 'local_cert', $this->sslPem); 

Спасибо за любую помощь!

Solutions Collecting From Web of "Ошибка при использовании ssl cert с PHP"

Вы получаете сообщение об ошибке, потому что он пытается найти ваш файл cert.pem в каталоге, в котором выполняется скрипт, а не в каталоге, в котором находится скрипт. В вашем примере это ваш каталог пользователя «~».

Попробуйте изменить свой класс на это или что-то подобное:

 class pushNotifications { ... private $sslPem = 'cert.pem'; ... function connectToAPNS(){ $streamContext = stream_context_create(); stream_context_set_option($streamContext, 'ssl', 'local_cert', dirname(__FILE__) . '/' . $this->sslPem); 

У меня тоже была эта проблема, оказалось, что по какой-то причине мой закрытый ключ не соответствовал тому, который был связан с aps_developer_identity.cer, который у меня был …

Я закончил тем, что очистил все свои общедоступные и закрытые ключи от моего элемента логина «login», затем снова начал весь процесс (сгенерировал запрос) … Я отправил новый файл запроса на портал программы и сгенерировал новый сертификат , загрузить и установить его, дважды щелкнув по нему (developer_IDity.cer). Затем я сбрасываю профили подготовки, чтобы использовать новые сертификаты Push SSL, загружал их и устанавливал их двойным щелчком (aps_developer_identity.cer). Наконец, я перезагружаю профиль подготовки и загружаю новый. Я очистил старый в Xcode Organizer и установил новый. Наконец, я экспортировал свой «закрытый» ключ как key.p12 и aps_developer_identity.cer apsdi.p12 и выполнил следующие команды против них:

 openssl pkcs12 -clcerts -nokeys -out apsdi.pem -in apsdi.p12 openssl pkcs12 -nocerts -out key.pem -in key.p12 

Если вы согласны с использованием парольной фразы (рекомендуется для производства):

 cat apsdi.pem key.pem > cert.pem 

Если вы хотите использовать «пустую» кодовую фразу, вам нужно сначала дешифровать свой закрытый ключ, используя пароль, который вы указали при преобразовании его в формат pem :

 openssl rsa -in key.pem -out key.unencrypted.pem 

И затем кота cert и незашифрованный ключ в apns.pem (или любое другое имя файла, которое вы выбрали):

 cat apsdi.pem key.unencrypted.pem > apns.pem 

Очень важно, чтобы вы экспортировали сертификат aps_developer_identity, а не сертификат разработчика в apsdi.pem.

Если вы можете расширять записи developer_identity.cer и aps_developer_identity.cer в Keychain Access, и вы видите «закрытый» ключ, когда вы это делаете, все должно работать.

В качестве дополнительного совета для тех, кто имеет одну и ту же проблему: при экспорте закрытого ключа из доступа к цепочке ключей Apple и конвертации в .pem, УКАЗАТЬ ПАРОЛЬ.

По какой-то причине кажется, что оставляя пустой пароль в одном из экспорта, удаляет закрытый ключ, поэтому окончательный .pem не завершен.

Поэтому поставьте фиктивный пароль, даже если позже вы удалите его с помощью openssl.

Заметки на будущее (после большой боли в голове из-за всего этого): 1. если вы получите ошибку рукопожатия – созданный вами файл pem, вероятно, неверен.

а. убедитесь, что файл находится в том же каталоге, что и php, который вы пытаетесь запустить. б. экспортируйте файл certifcate p12 И ключ под ним в утилите доступа к keychain. Оба из этих файлов будут одинакового размера, но они различны. с. выполните указанные выше команды «openssl» на терминале macintosh.

  1. в настоящее время все, что я могу сделать, это запустить php как sudo, из-за chmod 400 для ck.pem. что-то дало …

Кстати, сообщение «Не удалось включить крипто» исчезнет, ​​когда система работает правильно.

Просто измените владельца на www-data. Он будет работать 🙂

sudo chown www-data.www-data ck.pem

deafult пользователь apache www-data