Ошибка использования SSL-сертификата с PHP - PullRequest
8 голосов
/ 01 мая 2009

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

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

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

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

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

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

Ответы [ 5 ]

15 голосов
/ 01 мая 2009

Вы получаете сообщение об ошибке, потому что он пытается найти ваш файл 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);
10 голосов
/ 27 сентября 2009

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

В итоге я очистил все моих открытых и закрытых ключей от элемента цепочки для ключей 'login', затем я снова запустил весь процесс (сгенерировал запрос) ... Я отправил новый файл запроса на портале программы и сгенерировал новый сертификат, скачал и установил его, дважды щелкнув по нему (developer_identity.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

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

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

Очень важно экспортировать свой сертификат aps_developer_identity, не свой сертификат developer_identity как apsdi.pem.

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

2 голосов
/ 06 мая 2011

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

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

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

0 голосов
/ 19 апреля 2013

Просто смените владельца на www-data. Это будет работать:)

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

Глупый пользователь apache www-data

0 голосов
/ 22 февраля 2010

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

а. убедитесь, что файл находится в том же каталоге, что и php, который вы пытаетесь запустить. б. экспортируйте файл certifcate p12 И ключ под ним в утилите доступа цепочки для ключей. Оба этих файла будут ОДНОГО и того же размера, но они РАЗНЫЕ. с. выполните указанные выше команды «openssl» в терминале Macintosh.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...