Я уже преобразовал открытый ключ (.cer) и закрытый ключ (.key) в формат pem, но мне пришлось использовать командные строки для их преобразования следующим образом:
$openSSLpath = "c:\OpenSSL-Win64\bin\openssl.exe"; //Path to OpenSSL exe
$path = "c:\appserver\Apache2.2\htdocs\FIEL"; //Path to Project Folder
$rutaCer = $path.'\GAMA600504JP1.cer';
$rutaKey = $path.'\GAMA600504JP1.key';
$passwordKey = '12345678a';
$cmdKey = $openSSLpath." pkcs8 -inform DER -in ".$rutaKey." -passin pass:".$passwordKey." -out ".$rutaKey.".pem";
exec($cmdKey);
$cmdCer = $openSSLpath." x509 -inform DER -outform PEM -in ".$rutaCer." -pubkey -out ".$rutaCer.".pem";
exec($cmdCer);
Это правильно генерирует файлы .pem, но мне нужно знать, возможно ли это сделать любым другим способом с использованием PHP. Обратите внимание, что я совершенно новичок в openSSL, и это единственный способ, который я нашел, сделать это на PHP.
Для этого я должен убедиться, что OpenSSL правильно расположен и установлен на моем сервере, а для преобразования в .pem мне нужно временно сохранить файлы .cer и .key на сервере, что не рекомендуется по соображениям безопасности. ,
Есть ли другой путь?
Вы можете легко конвертировать ваши данные дер в PEM с помощью простого кода.
$rutaCer = file_get_contents($path.'\GAMA600504JP1.cer');
$rutaKey = file_get_contents($path.'\GAMA600504JP1.key');
echo "-----BEGIN PRIVATE KEY-----\n" . chunk_split(base64_encode($rutaKey), 64, "\n") . "-----END PRIVATE KEY-----";
echo "-----BEGIN CERTIFICATE-----\n" . chunk_split(base64_encode($rutaCer), 64, "\n") . "-----END CERTIFICATE-----";
// Save anywhere
В PHP есть функции для экспорта в PEM, но есть проблема с загрузкой ключей / сертификатов из двоичного формата DER.
Другим способом может быть использование phpsec библиотека.
Других решений пока нет …