[RISOLTO] SDICoop errore invio file firmati

Salve, sto cercando di completare i test di accreditamento per il canale di cominicazione SDI.
Dopo aver controllato che tutto il sistema funzionasse con i file xml non firmati (ricevendo una notifica di scarto), comincio a inviare file firmati.
Premetto che è la prima volta che invio file firmati direttamente all’agenzia delle entrate.
Una volta inviato, questa mi scarta la fattura dicendomi
00200: File non conforme al formato: Cannot find the declaration of element ‘ns1:FatturaElettronica’.

Facendo qualche ricerca ho scoperto che potrebbe esserci qualche carattere all’inizio del file firmato che da problemi, così ho provato a codificare il tutto in utf-8 rimuovendo così qualsiasi problema.
La risposta dello sdi è che il file non è più integro e la firma non è valida(errore 00102).

Non saprei cosa fare per procedere e chiedo il vostro aiuto e la vostra esperienza.

Vi do inoltre altre informazioni utili:

  • il file xml è stato firmato con un certificato di aruba in cades, non so se c’è uno speciale certificato per la firma delle fatture elettroniche ma so che aruba è tra i prestatori fiduciari di certificati.
  • la libreria che sto usando (zeep), ha bisogno che decodifichi il file da base64 prima di inviarlo, perchè a quanto pare solo in questo modo l’SDI riesce a leggere i dati (almeno questo vale per i file xml non firmati)
  • un’altra informazione forse menu utile, la chiamata è fatta da un sistema sviluppato in python

EDIT: ho provato a inviare una fattura p7m che ho scaricato dal registro delle fatture passive di un mio cliente (ovviamente ho modificato il codice sdi e il formato da FPR12 a FPA12). L’errore datomi è sempre 00102:Firma non valida: Errore di formato Il file firmato p7m non risulta integro.
Questo file è già passato ai controlli dell’SDI. Se fosse un problema del certificato stesso non avrebbe dovuto dare alcun problema penso.

Dopo vari complotti nella mia testa mi è sorta la domanda: c’è differenza tra un certificato cades e una cades-bes? Se si a questo punto il problema potrebbe essere che non ho un certificato di firma corretto.
Ho provato a cercare qualcosa su internet ma niente di specifico riguardo la differenza tra cades e cades-bes.
Qualcuno più esperto in certificati sa darmi una risposta?

guarda che secondo me stai firmando un file sbagliato, devi firmare l’xml pulito senza particolari codifiche ti base64 od altro… il file firmato poi è un binario e quindi come tale lo devi trattare…
il fatto che sdi risponda:
00200: File non conforme al formato: Cannot find the declaration of element ‘ns1:FatturaElettronica’.
Vuol dire che il file che gli mandi non è un xml…
Non è che stai firmando l’xml dopo avergli applicato una codifica base64 ?

Ho risolto. Il problema era che i file erano codificati con latin1 invece che utf-8; non mi aveva mai dato problemi questo file inviandolo ad altri intermediari (tipo doceasy, aruba…). Forse loro stessi si accorgevano dell’errore e lo convertivano nella giusta codifica :thinking:
Grazie lo stesso. Spero comunque che possa essere utile a qualcuno

Non c’è nessuna limitazione sulla codifica usata, ma questa deve ovviamente essere specificata nella dichiarazione xml: <?xml version="1.0" encoding="iso-8859-1"?>, altrimenti si assume che sia UTF-8.

la dichiarazione c’era
<?xml version="1.0" encoding="latin1"?>
ma a quanto pare non riusciva a riconoscere la fattura dopo la firma, mentre con
<?xml version="1.0" encoding="utf-8"?>
nessun problema.

Non so cosa dire, ma ti assicuro che dal punto di vista del SdI il set di caratteri non è un problema. Abbiamo ricevuto diverse fatture codificate in latin1 (anche se specificato come “iso-8859-1”), sia firmate che non.
Potrebbe essere un problema con il programma che usi per la firma (ma essendo CADES dovrebbe trattare il file come binario e fregarsene del contenuto) oppure delle librerie che usi.