Buonasera a tutti,
magari qualcuno di voi usa openSSL per estrarre la fattura xml da un file firmato dall’emittente della fattura (non il file enc dell’SdI ma proprio la fattura firmata) e mi può aiutare.
Ho creato il software che cerca di estrarre il suddetto xml utilizzando questo comando openSSL:
smime -decrypt -verify -in e:\ITxxxxxxxxxxxx.p7m -inform der -binary -out e:\ITxxxxxxxxxxxxxxx.xml -noverify"
Il problema è che spesso fallisce dandomi un errore che allego
A completezza dell’informazione aggiungo che si apre normalmente con il dike 6 (e non mi sembrano file strani).
Probabilmente il file è codificato in base64. In questo caso devi prima fare la decodifica base64 e poi l’estrazione dal p7m come sopra.
Puoi fare anche la decodifica base64 con openssl. Vedi questo mio post:
Ho visto nell’altro thread che usi C#. Puoi fare tutto in .NET senza altre librerie. Per estrarre il contenuto del .p7m (dopo aver decodificato l’eventuale base64) puoi usare la seguente funzione:
private byte[] EstraiFileDaP7M(byte[] signedData)
{
SignedCms cms = new SignedCms();
cms.Decode(signedData);
if (cms.Detached) {
throw new InvalidOperationException("Cannot extract enveloped content from a detached signature.");
}
return cms.ContentInfo.Content;
}
La classe SignedCms sta in System.Security.Cryptography.Pkcs.
Confermo, addirittura dalla versione 2.0 del .NET.
Chilkat ha invece parecchi vantaggio nella parte di firma dato che produce sia xades che pades che cades.
E ti ringrazio tantissimo! Grazie al suggerimento della codifica in base64 e a questo pezzo di codice ho risolto il problema (ed in più ho eliminato la dipendenza ad openSSL che, per quanto ottimo, è sempre un elemento esterno).
Chi o cosa ti ha dato quell’errore?
ASN1 è il formato (binario) dei file .p7m (CAdES-BES), quindi il messaggio indica che c’è qualcosa che non va col file. Potrebbe essere il caso già discusso di file .p7m codificato in base64, mentre la procedura a cui l’hai dato in pasto si aspetta un file binario. Oppure il file è veramente rovinato.
L’errore me l’ha dato la funzione Decode di SignedCms.
Credo che sbaglio qualcosa, mi puoi dire dove:
Leggo il file p7m, lo converto in byte e lo passo alla funzione che hai pubblicato EstraiFileDaP7m.
Da quello che ho capito dovrei decodificare in base64, grazie in anticipo.
Noi abbiamo sviluppato uno script che scarica le fatture presenti nel Cassetto Fiscale e può automaticamente sbustarle (estrarre xml da p7m) tramite openssl
hmmm le scarica dal Cassetto Fiscale in che modo, se posso chiederlo? Perchè non esistendo API o altro l’unica è procedere simulando un accesso “fisico” dell’utente, giusto?