openssl — Использование форматированных ключей DER для подписи документов при переполнении стека

Мне нужно подписать 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 решить мою проблему?

Заранее большое спасибо
Дайте мне знать, если вам нужно больше информации

1

Решение

Не видя, что вы делаете, я могу вам сказать, что у вас там работает функция. Это может зависеть от нескольких причин, почему он не работает для вас, и без дополнительной информации будет трудно сказать.

По умолчанию эта функция преобразует ваши данные в base64 и добавляет верхний и нижний колонтитулы «BEGIN CERTIFICATE». Имейте в виду, что если вы вызываете эту функцию для обработки закрытого ключа, вам нужно будет вызвать его следующим образом:

$keyVal = der2pem($YOUR_KEY_DATA, 'PRIVATE KEY');
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]