OpenSSL in errore su fattura firmata Actalis

Buongiorno
stiamo verificando un problema in estrazione di fattura da XML non codificato BASE64, file che con DIKE si estrae senza problemi mentre openSSL va in errore.
openssl smime -verify -in C:\OpenSSL-Win64\bin\actalis.p7m -inform DER -noverify -out C:\OpenSSL-Win64\bin\actalis.xml

8552:error:0D0680A8:asn1 encoding routines:asn1_check_tlen:wrong tag:crypto\asn1\tasn_dec.c:1130:
8552:error:0D07803A:asn1 encoding routines:asn1_item_embed_d2i:nested asn1 error:crypto\asn1\tasn_dec.c:290:Type=PKCS7_ISSUER_AND_SERIAL
8552:error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error:crypto\asn1\tasn_dec.c:627:Field=issuer_and_serial, Type=PKCS7_SIGNER_INFO
8552:error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error:crypto\asn1\tasn_dec.c:596:Field=signer_info, Type=PKCS7_SIGNED
8552:error:0D08303A:asn1 encoding routines:asn1_template_noexp_d2i:nested asn1 error:crypto\asn1\tasn_dec.c:627:
8552:error:0D08403A:asn1 encoding routines:asn1_template_ex_d2i:nested asn1 error:crypto\asn1\tasn_dec.c:477:Field=d.sign, Type=PKCS7

L’errore è sistematico e solo -al momento- su pacchetti firmati da certificato emesso da Actalis (Aruba).

Ecco il file per chi volesse darmi una mano: https://maranmichele-my.sharepoint.com/:f:/g/personal/maranmichele_maranmichele_it/EisGPUW-6RlHt9PAIzXvmtEB_MCJZk5uQ4V-rtB_R3ZeXg?e=lbM5WDù
Qualche idea?
Grazie

Ciao
Io ho lo stesso problema con le ultime fatture emesse in novembre da E-DISTRIBUZIONE
Quelle più vecchie non avevano nessun problema

Per ora ho risolto “a mano” togliendo tutto ciò che sta prima a
<p:FatturaElettronica> e tutto ciò che sta dopo a
</p:FatturaElettronica>
e salvando il file con estensione XML

… seguo

Ho già risposto nell’altro thread:

Direi perfetto. Funziona a meraviglia.
Grazie mille per il suggerimento.
Buona continuazione

Solo a me capita che alcuni file li possono decodificare con

openssl smime ......

e altri con

openssl cms ...

Come fate voi? Uno swtich?

Prima provo a decodificare con openssl smime
se trovo il file di output vuol dire che ha decodificato ed allora proseguo altrimenti provo openssl cms

Soluzione un po’ del menga ma non ne ho trovate altre…
Nessuna delle due copre tutti i casi.

Grazie Romolo, anche io faccio così… aggiungo anche una codifica base64 come terza opzione in caso di fallimenti di entrambi…

Magari meglio usare qualche altro applicativo e non openssl a questo punto

Non vedo quali altri applicativi possa usare in ambiente linux.
Onestamente non capisco perchè alcune fatture non vengano decodificate correttamente usando cms (che dovrebbe decodificare anche le s/mime in accordo alla documentazione)
Non ho ancora approfondito dato che in questo periodo non ho troppo tempo per farlo e ci ho messo una pezza a quel modo.
Mi viene da pensare che almeno nella versione 1.1.1 che sto usando io (ubuntu 18.04.4 lts) openssl abbia qualche difetto.

Ho dei file di prova se interessato a testare.

Su linux pensavo a qualche librerira python come alternativa

Ciao, c’è qualcuno che conosce l’equivalente di openssl cms in php?
Siccome sul server non posso usare il comando exec().

Attualmente il 99% delle fatture firmate me le legge con

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

dopo aver convertito il file con der2smime.

Ma ahimè l’ 1% delle fatture non funziona e non trovo l’equivalente di php per il comando CMS

Attualmente non esiste l’equivalente del comando cms in php.
PHP espone un subset delle funzioni openssl.
L’unica alternativa in questi casi è utilizzare l’exec. Ma se sul tuo server l’exec non è consentito puoi provare a scrivere un po’ di codice per estrarre i chuck dell’xml dalla busta p7m (se hai c…o è un’unico chunk)

Ho avuto oggi il tempo di fare un po’ di prove…

Ho preso un file che fallisce la decodifica con cms (errore signature invalid)
Con openssl 1.1.x cms da errore
con openssl 1.0.2u cms decodifica correttamente.

Controlli più stringenti sulla validità del formato binario della firma fanno si che le più recenti versioni di openssl falliscano.
Sembra, facendo un parsing dell’asn1, che ci sia un byte in più del dovuto nella sezione della firma.

Quindi delle due l’una: o mi compilo una versione locale di openssl 1.0.2h solo per la decodifica lasciando quella di sistema per tutto il resto https etc etc, o faccio i due passaggi…

Temo anche che qualsiasi libreria python linkata a openssl 1.1.x soffra dello stesso problema…

Edit: il controllo sembra stato introdotto in openssl 1.1.0c con questo commit su github dato che con openssl 1.1.0b funzionava ancora

Il che vuol dire che in giro c’è chi firma fuori dagli standard…

Mi è capitata questa fattura .p7m che con openssl non riesco proprio a decriptare

potete scaricarla qui
https://easyupload.io/qv5rtr

allego anche una foto del file

Si tratta di un documento “trattato” con base64,
o meglio,
prima firmato in p7m, e poi convertito in base64

quindi andando a ritroso, dovresti poterlo decifrare
p.s. si tratta di una fattura di imponibile di 70,77 ed imposta 7,08.

Concordo, la mia procedura con gli xml.p7m per esteso fa i seguenti tentativi:
1)openssl smime
2)openssl cms
3)base -d e se ha successo di nuovo la sequenza
3.1)openssl smime
3.2)openssl cms

Forse non è efficiente ma per ora mi ha sempre funzionato…