File p7m e loro decodifica

Uno dei vantaggi della fatturazione elettronica per i cittadini, è la possibilità di automatizzare il trattamento del contenuto delle fatture. In abbinamento con PowerApps è possibile creare automatismi anche per le piccole società.

Il formato p7m viene utililizato non solo per la fatturazione elettronica, ,ma per lo scambio di documenti firrmati sia con la pubblica amministrazione che tra privati. Non sempre però che riceve un file in formato p7m sa come aprirlo.

Sul sito Infocert è di disponibile il software Dyke (https://www.firma.infocert.it/installazione/) che consente di firmare e, soprattutto leggere i file firmati. E’ un software che personalmente non gradisco, ogni volta chiede di essere aggiornato, ogni volta scarica i nuovi certificati per poter verificare l’autenticità della firma e ogni volta fatico a trova la funzione che mi serve. Mi sono detto che dev’essere semplice decodificare (per usare un termine informatico) o togliere dalla busta, (per usare termine business) un file p7m.

Per usare una similitudine possiamo vedere il il p7m come una busta che contiene un file. La busta garantisce che il contenuto, ossia il file, non è stato manomesso da quando è stato imbustato. La busta contiene inoltre il certificato, ossia sigillo, di chi l’ha imbustato. E’ quindi sempre possibile stabile l’autenticità del documento e sua originalità.

Visto che tecnicamente si tratta di certificati, lo strumento più adatto è openssl. Se siamo interessati solo leggere il contenuto e non a verificare l’autenticità del documento le cose sono relativamente semplici. Se dobbiamo verificare l’autenticità, ossia che chi l’ha imbustato è chi dice di essere le cose sono più complesse perché occorre scaricare l’elenco degli issuer da un sito attendibile (es: infocert, poste,…). In questo secondo caso secondo me conviene usare dike o altri software.

Se, come detto occorre solo spacchettare il contenuto, con openssl è relativamente facile. Prima occorre verificare se il file è codificato in base64. Tutte le “buste” possono venire codificate in base64, senza che l’estensione venga modificata. Perché? Non lo so, personalmente avrei lasciato la codifica base64 fuori dalle specifiche, quando un documento viene allegato a un protollo testuale viene automaticamente codificato base64.

Ecco il comando con la spiegazione dei parametri openssl usati:

cat ./IT13336240158_0HPZH.xml.p7m | openssl cms -verify -inform DER -noverify -no_attr_verify -out IT13336240158_0HPZH.xml

L’operazione openssl può essere smime o cms, tecnicamente fanno la stessa cosa, in giro ho letto che cms è più permissimo rispetto a smime, nelle prove fatte dove si piantava smime, si pianta anche cms. I messaggi di errore cambiano leggermente.

Dopo l’operazione occorre il comando che è ‘-verify’, ossia verifica il messaggio firmato, omettendo -verify si ottiene il seguente errore:

 "No operation option (-encrypt|-decrypt|-sign|-verify|...) specified."

cat ./IT13336240158_0HPZH.xml.p7m | tr -d '\r\n' | openssl base64 -d -A | openssl smime -verify -inform DER -noverify -no_attr_verify -out IT13336240158_0HPZH.xml

cat: Legge il contenuto del file
tr:

Il parametro -inform DER specifica il formato del messaggio in ingresso può essere SMIME PEM, o DER, nel caso delle firme italiane è DER. Senza questo parametro l’errore sarà:

Error reading S/MIME message
34359738384:error:0D0D40D1:asn1 encoding routines:SMIME_read_ASN1:no content type:crypto/asn1/asn_mime.c:399:

Il parametro “-noverify” specifica di non verificare l’autenticità dei certificati, senza questo parametro si riceve l’errore:

Verification failure
34359738384:error:21075075:PKCS7 routines:PKCS7_verify:certificate verify error:crypto/pkcs7/pk7_smime.c:284:Verify error:unable to get local issuer certificate
o 
Verification failure
34359738384:error:2E099064:CMS routines:cms_signerinfo_verify_cert:certificate verify error:crypto/cms/cms_smime.c:252:Verify error:unable to get local issuer certificate

In fine abbiamo il parametro per generare l’output.

WP to LinkedIn Auto Publish Powered By : XYZScripts.com