openssl — PHP Как разобрать pkcs7 подпись BLOB-объекта?

У меня есть подпись 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

6

Решение

К сожалению, я считаю, что нет простого решения. Если вы хотите проанализировать подпись в кодировке PKCS # 7 DER в PHP, вам нужен синтаксический анализатор ASN.1. Функции OpenSSL в PHP не способны это делать.

Существуют ли какие-либо PHP-библиотеки для анализа ASN.1 или для генерации PHP-кода на его основе?

Попробуйте расшифровать данные DER с помощью парсеров, на которые есть ссылки. Если какой-либо парсер сработает, вы сможете увидеть и извлечь необходимую информацию. В качестве первого шага вы можете попробовать онлайн-парсер из проекта phpseclib.

http://phpseclib.sourceforge.net/x509/asn1parse.php

5

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

Как насчет этого решения 🙂

<?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
0

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