Мне нужно подписать PDF документы на PHP, я использую библиотеку TCPDF, чтобы сделать это
Проблема моя .CER и мой .ключ файлы находятся в DER формат и openssl_pkcs7_sign () Функция может загрузить закрытый ключ, если этот формат
Если я использую команды openssl на своем терминале для преобразования моих ключей из двоичного файла DER отформатировать в ASCII все работает но я не хочу использовать Exec функция для вызова системных функций через PHP.
После небольшого исследования я нашел этот вопрос:
Загрузить файл .key из формата DER в PEM с PHP
По одному из ответов предлагаем открыть файл, получить контент и использовать конвертацию.
function der2pem($der_data, $type='CERTIFICATE') {
$pem = chunk_split(base64_encode($der_data), 64, "\n");
$pem = "-----BEGIN ".$type."-----\n".$pem."-----END ".$type."-----\n";
return $pem;
}
Но когда я использую эту функцию для преобразования моих данных, результат отличается от файла, сгенерированного OpenSSL на консоли и функции openssl_pkcs7_sign () снова выдает ошибку
ОБНОВИТЬ
Это мой PHP-код для преобразования моего файла:
<?php
$myKey = 'p-key.key';
$private_key = file_get_contents($myKey);
echo der2pem($private_key,'PRIVATE KEY');
file_put_contents('p-key.key.pem', der2pem($private_key,'PRIVATE KEY'));
function der2pem($der_data, $type = 'CERTIFICATE')
{
$pem = chunk_split(base64_encode($der_data), 64, "\n");
$pem = "-----BEGIN ".$type."-----\n".$pem."-----END ".$type."-----\n";
return $pem;
}
Это мое OpenSSL команда:
openssl pkcs8 -in p-key.key -out p-key.key.pem -inform DER -outform PEM
Есть ли объяснение этому?
Как правильно это сделать?
Должен ли я использовать Exec решить мою проблему?
Заранее большое спасибо
Дайте мне знать, если вам нужно больше информации
Не видя, что вы делаете, я могу вам сказать, что у вас там работает функция. Это может зависеть от нескольких причин, почему он не работает для вас, и без дополнительной информации будет трудно сказать.
По умолчанию эта функция преобразует ваши данные в base64 и добавляет верхний и нижний колонтитулы «BEGIN CERTIFICATE». Имейте в виду, что если вы вызываете эту функцию для обработки закрытого ключа, вам нужно будет вызвать его следующим образом:
$keyVal = der2pem($YOUR_KEY_DATA, 'PRIVATE KEY');
Других решений пока нет …