На самом деле я использую эту команду в 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
функция. Кто-нибудь?