2015-03-17 25 views
5

Ich habe eine PKCS7 Unterschrift, die ich Inhalte von mitPHP Wie pkcs7 Signatur Blob analysieren?

openssl pkcs7 -inform DER -in signature.pkcs7 -print_certs -text 

Aber wie archieve die gleiche Leistung mit PHPs OpenSSL Funktionen analysiert bekommen können?

Bearbeiten. Es gelang mir, eine korrekte PEM-Datei mit der folgenden Funktion bei der Schaffung von:

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); 

Im jedoch nicht erfolgreichen die Daten mit einer der Funktionen in der PHP-Handbuch erwähnt in Parsen. Es arbeitet mit OpenSSL mit:

openssl pkcs7 -inform PEM -in signature.pkcs7 -print_certs -text 
+0

http://php.net/manual/en/function.openssl-pkcs7-sign.php – adeneo

+0

Das ist nicht richtig. Ich möchte analysieren und nicht unterschreiben. Soweit ich im PHP-Handbuch sehen kann, gibt es keine Funktionen zum Parsen von pkcs7-Signaturen. –

Antwort

4

Unfortunatelly, ich glaube, dass es nicht einfache Lösung ist. Wenn Sie die kodierte PKCS # 7 DER-Signatur in PHP parsen wollen, benötigen Sie einen ASN.1-Parser. OpenSSL-Funktionen in PHP sind dazu nicht in der Lage.

Do any PHP libraries exist for parsing ASN.1 or generating PHP code based on it?

Versuchen Sie, DER Daten mit einigen verwiesen Parser zu entschlüsseln. Wenn ein Parser funktioniert, sollten Sie in der Lage sein, erforderliche Informationen zu sehen und zu extrahieren. Als ersten Schritt können Sie den Online-Parser von phpseclib project ausprobieren.

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

+0

Ich werde Kopfgeld für diese Lösung geben. Ich habe noch keine Zeit zu testen, aber es scheint die richtige Lösung zu sein. Ich werde morgen testen und dann Lösung markieren oder kommentieren. Vielen Dank! –

+0

Dies löste das Problem. Leider ist ASN.1 ein schreckliches Format, aber mit Hilfe der Quelle der Online-Demo https://github.com/phpseclib/docs/blob/master/x509/asn1parse.php war ich erfolgreich. –

0

an dieser Lösung :)

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

Leider kann ich auf meiner Hosting-Umgebung keine Shell-Programme verwenden. Es muss mit PHP gemacht werden. –