Для частного сертификата PEM я предполагаю, что вам нужна строка, подобная этой:
-----BEGIN PRIVATE KEY-----
YzNhYjhmZjEzNzIwZThhZDkwNDdkZDM5NDY2YjNjODk3NGU1OTJjMmZhMzgzZDRhMzk2MDcxNGNhZWYwYzRmMg==
-----END PRIVATE KEY-----
Итак, что я сделал:
$privateKey = '-----BEGIN PRIVATE KEY-----';
$privateKey .='\n'.base64_encodehash(('sha256','foobar'));
$privateKey .='\n-----END PRIVATE KEY-----';
Но openssl_pkey_get_private ($ privateKey) возвращает false и не является допустимым ресурсом. Я предположил, что PEM это просто строка base64. Что я сделал не так? (Я нашел это через Google: http://www.cryptosys.net/pki/manpki/pki_pemstring.html)
Существуют разные форматы PEM для разных типов объектов. На первый взгляд, PEM — это просто закодированные в base 64 данные, заключенные в маркеры BEGIN и END. Файлы PEM, начинающиеся с маркеров «BEGIN PRIVATE KEY», содержат данные в кодировке base64, соответствующие стандарту PKCS # 8. В частности, см. Раздел 5 RFC5208 (https://tools.ietf.org/html/rfc5208). Обычно вы не создавали бы эти файлы с нуля, а использовали бы какую-то библиотеку или инструмент для этого (например, OpenSSL).
Других решений пока нет …