PHP openssl_pkcs7_verify, как установить атрибут CMS как openssl - PullRequest
0 голосов
/ 27 апреля 2020

На самом деле я использую эту команду в PHP для извлечения XML из файла P7M с цифровой подписью:

@$output = openssl_pkcs7_verify ("file.p7m" , PKCS7_NOVERIFY , null ,array('CA.pem'), 'CA.pem', 'file_cleaned.xml');

После преобразования p7m в с / мим с помощью:

function der2smime($file) //pass a file.p7m digital signed here
{
    $to=<<<TXT
MIME-Version: 1.0
Content-Disposition: attachment; filename="smime.p7m"
Content-Type: application/x-pkcs7-mime; smime-type=signed-data; name="smime.p7m"
Content-Transfer-Encoding: base64
\n
TXT;
    $from=file_get_contents($file);
    $to.=chunk_split(base64_encode($from));
    return file_put_contents($file,$to);
}

Это эквивалент:

openssl smime -verify -in c:\path\to\file\file.p7m -inform DER -noverify -out C:\path\to\file\file_cleaned.xml

НО Я НЕ МОГУ ВЫПОЛНИТЬ ВНЕШНИЕ ПРОГРАММЫ с помощью exe c () на моем сервере, поэтому я не могу использовать команду openssl!

PHP код отлично работает почти для 99% файлов P7M (цифровые итальянские счета).

Но некоторые p7m go в открытии ошибок!

Я искал много, и решение состоит в том, чтобы использовать этот вариант ( cms атрибут):

    openssl cms -verify -in c:\path\to\file\file.p7m -inform DER -noverify -out C:\path\to\file\file_cleaned.xml

Но я не могу найти, как использовать cms внутри openssl_pkcs7_verify функция. Кто-нибудь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...