Firma automatica File PA : Apache

Salve,
scrivo questa vittoria per magari qualcuno che legge:
Come firmare un file ed inviarlo allo SDI ?

1)Niente di più semlice! avvalersi dei certificati SFTP
2) firmare il file > p7m
3) inviare file a SDI

Siccome noi utilizziamo tutti e 2 i canali, Firmiamo i file (o meglio il sistema) con i cert AE:

esempio php firma ed invio :

$command = 'openssl smime -binary -nodetach -sign -signer ' .
    $pemfile . ' -passin pass:' .
    env('FIRMA_PASSPHRASE') . ' -in ' .
    $fileIn . ' -out ' .
    $fileOut . ' -outform DER';
exec($command . ' 2>&1', $output, $status);

Il file .p7m viene passato a SOAP e poi inviato come se fosse un file normale, ed ecco la magia:

4 Mi Piace

Hai fatto la verifica su fatturapa?

L’immagine che vedi è dove l’abbiamo presa ? :woman_facepalming:

Intendo qui: https://sdi.fatturapa.gov.it/SdI2FatturaPAWeb/AccediAlServizioAction.do?pagina=controlla_fattura

ClaudioP, secondo te ? avremmo mai scritto un post se non eravamo sicuri ?

1 Mi Piace

Ottimo, io con quelli forniti mesi fa x un cliente ho testato ma la verifica falliva. Ho testato con quello client e server per lo SDICoop ma non valida ad oggi.
Forse finalmente accettano i loro certificati?

Claudio, con quali certificati stavi firmando il file ?
La procedura è abbastanza lunga e complessa per estrarre correttamente i certificati da un agglomerato (se uno è alle prime armi con questi)
Anche se firmi il file senza errori (tipo openssl), questo non vuol dire che sia firmato correttamente.
lo SDI, secondo noi, vuole che i file siano firmati da chi emette la fattura (oppure) chi trasporta la fattura.
Per questo spediamo i file firmati con (CERTIFICATO DI FIRMA) dell’ AGENZIA dell’ ENTRATE rilasciato a chi ha accreditato il canale.

Se ricordo, il certificato x firmare i supporti. I certificati emessi per lo SDIcoop non hanno il Key usage appropriato.

Questo screen viene da un canale in fase di test?

SI, ABBIAMO FATTO IL TEST CON CIRCA 10/20 FATTURE. :smirk:

INVIAMO LA FATTURA E POI LA SCARICHIAMO .

PER ESTRARRE POI LA FIRMA DAL FILE P7M, BASTA USARE GLI STESSI CERTIFICATI E USARE IL COMANDO DI ESTRAZIONE

ES OPENSSL : :scream:

openssl smime -in documento.xml.p7m -inform DER -verify -out documento.xml
1 Mi Piace

Nella documentazione dell’Agenzia c’è scritto che si può firmare con i loro certificati, comunque hai verificato se in produzione i file firmati con quel certificato vengono accettati? Funziona anche con quelli SDICOOP o solo con quelli SDIFTP?

Guarda sinceramente non abbiamo ancora provato in produzione ma mi sembra strano che il sistema abbia due algoritmi di verifica firma uno per fase di test e uno per fase di produzione Allora significherebbe che dovevano fornirci altri certificati.

Secondo me la questione è molto più semplice di quello che sembra. Noi utilizziamo tutti e due i canali e Firmiamo i file sia per lo sdicoop sia per le sftp.

Siccome il sistema è del tutto automatizzato e i file che riceviamo sono del tutto automatizzati per esempio quelli dello FTP risalgono a una versione obsoleta di Open SSL che ormai siamo arrivati alla 1.1.

Questo per dire che il sistema verifica solamente che la firma sia autentica e rilasciata da un ente autentico e appartenga o al cliente o al titolare del canale accreditato

, poi che noi utilizziamo la firma per firmare anche i file inviati con sdicoop. A loro non gli interessa.

Comunque toglieremo ogni dubbio quando passeremo in produzioni Ma io penso proprio che non abbiano un algoritmo diverso per verificare l’autenticità di una firma perché sembrerebbe alquanto stupido.

Perché vorrebbe dire che quella firma non vale neanche più per lo FTP quindi ce le ha devono ridare nuova? E allora utilizzeremo quella nuova anche per lo sdicoop Ma comunque come ho spiegato prima rimango della nostra idea.

2 Mi Piace

@MwSpaceLLC :scream_cat::scream_cat::scream_cat:
Aspetta aspetta aspetta un attimo che in questo momento mi sto sentendo veramente un pirla! :sunglasses::rofl::rofl::rofl:
Tu hai firmato la fattura con il certificato di firma che ti ha rilasciato l’AdE, e fin qui ci siamo. Ora, prima che io inizi ad autoflagellarmi in sala mensa, dimmi solo se era un FPR12 o una FPA12… :grimacing:

1 Mi Piace

Bello sapere che queste cose saltano fuori perchè c’è qualche sadico programmatore che a tentativi ci arriva anzichè perchè documentate dall’AdE :joy:

3 Mi Piace

FPA12 :scream::scream::scream::scream::scream::scream::scream::rofl::rofl::rofl:

1 Mi Piace

GRAZIE!!! :+1::+1::+1:
Stavano già organizzando la mia crocifissione in sala mensa… :rofl::rofl::rofl:

ciao, io ho provato con openssl ma per eseguirlo ho bisogno anche della key. Creo un file p7m ma lo sdi mi dice:

00200 File non conforme al formato (nella descrizione del messaggio è riportata l?indicazione puntuale della non conformità) : Errore nella parse del file (idSdi xxxxxxxx ): Premature end of file.

qualcuno ha verificato e può darmi conferma che è possibile firmare l’xml con i certificati?

Non stai firmando correttamente il file,
Devi seguire la guida di SOGEI / SDIFTP e verificare la versione openssl per la corretta dicitura dei comandi e USARE I CORRETTI CERTIFICATI

Ma hai letto sopra ?:unamused: vuoi ancora conferma e foto di snippet di codice

Confermo che la firma p7m avviene in CAdES e NON in XAdES

1 Mi Piace

va bene, grazie. Approfondisco…

Ho provato tutti i certificati e mi firma il file solamente usando questo:

openssl smime -binary -nodetach -sign -signer SDI-xxxxxxxxxxxxx.pem -inkey mykey.key -in ITxxxxxxxxxxxxxxxx_382.xml -out out.xml.p7m -outform DER

Ma lo da troncato.

Io ho solo il canale SDCOOP accreditato quindi sto usando quei certificati.

Con l’esempio sopra ho provato tutti i certificati che ho ma evidentemente sbaglio qualcosa. Poi non capisco "’ -passin pass:’ . env(‘FIRMA_PASSPHRASE’) "…

Immagino serva solo se si è impostata la passphrase alla creazione del certificato…

Se avete qualche dritta sono tutto orecchi :wink: