Ошибка использования ssl-сертификата с 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

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

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


person Jamey McElveen    schedule 01.05.2009    source источник


Ответы (5)


Вы получаете сообщение об ошибке, потому что он пытается найти ваш файл 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);
person Jordan S. Jones    schedule 01.05.2009
comment
Я прохожу эту строку сейчас, поэтому я предполагаю, что это исправлено, спасибо !! - person Jamey McElveen; 01.05.2009
comment
Оказывается, этого не было (все), теперь я понимаю это. Предупреждение: stream_socket_client (): невозможно установить локальный файл цепочки сертификатов `/Users/jamey/Sites/cert.pem '; Убедитесь, что ваши настройки cafile / capath включают сведения о вашем сертификате и его издателе в /Users/jamey/Sites/providerService.php в строке 29 - person Jamey McElveen; 01.05.2009
comment
Вы используете самоподписанный сертификат? - person Jordan S. Jones; 01.05.2009
comment
Вот как я создал сертификат. Выберите «Связка ключей» ›Помощник по сертификации› Запросить сертификат в центре сертификации. Позже я щелкнул правой кнопкой мыши по ключу и экспортировал .pem Это для нового Push-уведомления (APNS). APNS все еще находится под соглашением о неразглашении, но это проблема (я думаю) из-за моего непонимания PHP. - person Jamey McElveen; 01.05.2009
comment
SSL-сертификаты работают, проще говоря, по механизму цепочки. Ваш сертификат подписан центром сертификации, использующим этот сертификат. Когда клиент (браузер или curl в вашем случае) пытается использовать ваш сертификат, он захочет проверить или найти объект, который его подписал. - person Jordan S. Jones; 01.05.2009
comment
Возможно, вам придется указать некоторые дополнительные параметры потока. Укажите следующий URL: us2.php.net/manual/en/context. ssl.php. Вы можете попробовать установить verify_peer в false или allow_self_signed в true и т. Д. - person Jordan S. Jones; 01.05.2009
comment
Наконец-то он полностью заработал. Мне пришлось преобразовать сертификат в SSL. Смог сделать это с помощью OpenSSL - person Jamey McElveen; 06.05.2009
comment
@Jamey может ли вы сказать команде, которая преобразовала сертификат в ssl? @Jordan, пожалуйста, перепишите решение, которое вы нашли в ответах. Спасибо - person Ayaz Alavi; 17.06.2010

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

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

person sluther    schedule 26.09.2009
comment
Без проблем :-) Рад, что хоть кому-то это пригодилось! - person sluther; 25.09.2014

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

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

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

person Noone    schedule 06.05.2011
comment
Это сработало для меня. Использование без пароля при экспорте сертификатов / ключей не привело к созданию рабочих файлов .pem. - person Michael Thiel; 29.11.2011

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

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

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

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

person Community    schedule 22.02.2010

Просто поменяйте владельца на www-data. Будет работать :)

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

глухой пользователь apache www-data

person kotresh kumar    schedule 19.04.2013