У меня есть подпись PKCS7, с которой я могу получить проанализированное содержимое с помощью
openssl pkcs7 -inform DER -in signature.pkcs7 -print_certs -text
Но как сделать такой же вывод с помощью PHP-функций openssl?
Редактировать. Мне удалось создать правильный файл PEM со следующей функцией:
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;
}
$data = der2pem($der_data, "PKCS7");
Однако я не смог успешно проанализировать данные с помощью любой из функций, упомянутых в руководстве по PHP. Работает с использованием openssl с:
openssl pkcs7 -inform PEM -in signature.pkcs7 -print_certs -text
К сожалению, я считаю, что нет простого решения. Если вы хотите проанализировать подпись в кодировке PKCS # 7 DER в PHP, вам нужен синтаксический анализатор ASN.1. Функции OpenSSL в PHP не способны это делать.
Существуют ли какие-либо PHP-библиотеки для анализа ASN.1 или для генерации PHP-кода на его основе?
Попробуйте расшифровать данные DER с помощью парсеров, на которые есть ссылки. Если какой-либо парсер сработает, вы сможете увидеть и извлечь необходимую информацию. В качестве первого шага вы можете попробовать онлайн-парсер из проекта phpseclib.
Как насчет этого решения 🙂
<?php
$result = shell_exec('openssl pkcs7 -inform DER -in signature.pkcs7 -print_certs -text');
var_dump ($result);
// you can use preg_match() if you want to parse something specific