2015-03-17 19 views
5

Ho una firma PKCS7 che posso ottenere il contenuto analizzato dal conPHP Come analizzare il blob della firma pkcs7?

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

Ma come si fa archieve la stessa uscita con funzioni OpenSSL phps?

Modifica. Sono riuscito a creare un file PEM corretto con la seguente funzione:

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 non però riuscite a analizzare i dati con una delle funzioni indicate nel manuale di PHP. Funziona con OpenSSL con:

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

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

+0

questo non è corretto. Voglio analizzare e non firmare. Per quanto posso vedere nel manuale PHP non ci sono funzioni per analizzare le firme pkcs7? –

risposta

4

Purtroppo, credo che non ci sia una soluzione semplice. Se si desidera analizzare la firma codificata DER di PKCS # 7 in PHP, è necessario un parser ASN.1. Le funzioni OpenSSL in PHP non sono in grado di farlo.

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

Prova a decodificare i dati DER con alcuni dei parser di riferimento. Se qualsiasi parser funzionerà, dovresti essere in grado di vedere ed estrarre le informazioni richieste. Come primo passo, puoi provare il parser online dal progetto phpseclib.

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

+0

Darò generosità per questa soluzione. Non ho ancora il tempo di testare ma sembra la soluzione giusta. Proverò a testare domani e poi contrassegnerò la soluzione o il commento. Grazie! –

+0

Questo ha risolto il problema. Unfortanly ASN.1 è un formato orribile ma con l'aiuto della fonte della demo online https://github.com/phpseclib/docs/blob/master/x509/asn1parse.php ho avuto successo. –

0

Che dire di questa soluzione :)

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

Sfortunatamente non posso usare nessun programma di shell sul mio ambiente di hosting. Deve essere fatto con PHP. –

Problemi correlati