Firma Elettronica per Web Service

Salve a tutti. Sto sviluppando un servizio che consenta l’invio del DAS Elettronico. Superato lo scoglio del certificato server, mi trovo davanti il seguente errore:

“Nessuna firma creata perché nessuna parte del messaggio corrispondeva alla specifica della parte del messaggio fornita.”

Da quanto capisco, la firma digitale applicata al documento XML non è valida.
Ho provato diverse strade, firmando il documento con un certificato rilasciato dall’agenzia delle Dogane, firmando l’XML con Dyke (quindi con una firma acquistata), inviando il documento senza firma.
L’errore è sempre lo stesso.
Utilizzo la libreria “XadesNet” per la firma del documento, ho provato sia con Xades che con Cades, ma niente. Qualcuno di voi che ci è passato prima di me avrebbe qualche dritta?

Devi firmare il file xml con una firma XaDES-DES embedded. Dyke non ci riesce (dike pro invective si). Usa File Protector (infocamere).
Il certificato di firma deve essere emesso da una CA certificata (non dogane) e risiedere su dispositivo sicuro. Ad esempio va bene la CNS o la usb di firma Aruba.

Se leggi le istruzioni noterai che la firma deve essere embedded (cioè inserita nel xml a livello di nodo della root ed ha anche un altro paio di “ristrettezze”. Dalla tua descrizione è chiaro che la firma non è embedded.

Perfetto, proverò in giornata… Che tu sappia, c’è un modo per integrare questa firma da codice? Senza fare affidamento ad un programma esterno (ovviamente ho sia il dispositivo che la password per la firma).

Per il DAS elettronico devo usare due firme (una per la trasmissione certificata al webservice e la seconda è la firma XADES del XML contenuto nella trasmissione stessa). Personalmente riesco ad eseguire il tutto anche in maniera completamente trasparente all’utilizzatore, ma dipende anche dal sistema di sviluppo che utilizzi.
Al limite ti puoi appoggiare a librerie esterne.

La trasmissione certificata avviene senza problemi (ho a disposizione il certificato di autenticazione), solo che non è propriamente una “firma”, bensì un canale HTTPS (generato basandomi sul certificato, appunto) tra client e server (almeno per come l’ho capito io).

So che è troppo da chiedere, ma avresti un esempio pratico? Anche degli input su eventuali librerie, anche privatamente.

Grazie mille

Aggiornamento: Confrontando un file firmato correttamente con uno firmato da me, la firma è praticamente identica. Ho provato a mandare entrambi, ma la risposta è sempre la stessa. Ho creato a MANO un file XML fittizio, che però è coerente con le specifiche, e niente. Ho provato a chiamare il “WelcomeTest”, ma niente. Sempre questo errore che neanche si capisce cosa significhi.
Oltre a @col.Straker che mi ha già dato una preziosa mano, qualcuno che si sia scontrato con questo errore saprebbe darmi una mano? Anche a capire cosa significa, visto che boh, non si capisce bene.

Aggiornamento. Il problema era dovuto alla protezione dell’endpoint, che era settata su “None”, mentre deve essere impostata su “Sign”. Ora restituisce l’errore che non riesce a impostare una comunicazione SSL/TSL sicura perchè il certificato non risulta attendibile, solo che non specifica se si tratta del certificato client (che ho generato da Desktop Dogane secondo le istruzioni e risulta valido) o del certificato server, che non si riesce a bypassare neanche con la ValidationCallback… Se qualcuno ha qualche suggerimento, è ben accetto…

Il problema è nel certificato di trasmissione.
Infatti ottieni lo stesso errore anche se mandi un welcomeTest senza XML (giusto per dimostrare che la firma del XML in questo caso non c’entra)
Come hai generato il certificato di trasmissione?
Deve essere generato seguendo le istruzioni delle dogane (in sostanza deve contenere la loro chiave pubblica e la chiave pubblica del gestore delegato)

Il certificato lo genero tramite l’applicazione “Desktop Dogane”, effettuando l’accreditamento direttamente presso i loro uffici. Potresti mandarmi il link delle dogane che indica la procedura corretta per ottenere questo benedetto certificato? Dal loro sito non trovo niente che possa essermi d’aiuto.

Non esiste un link con la procedura corretta in quanto per accedere alle istruzioni devi prima eseguire il login con SPID. Comunque riassumo tutta la procedura (testata e funzionante).

  1. Procedere alla nomina del Gestore. In sostanza il rappresentante della ditta si collega al portale (Area Riservata / Dogane / Accesso per utenti esterni con credenziali / SPID) tramite SPID (quello delle Poste o altro SPID) e nomina un Gestore delle autorizzazioni ai servizi digitali (può essere persona terza o meglio ancora se stesso), Se persona terza bisognerà fare un MAU (Modello Autorizzativo Unico, con copia carta identità etc).
  2. Il Gestore delegato richiede per il soggetto obbligato (aka ditta) l’autorizzazione a due servizi che ovviamente vanno delegati a persona fisica: a) “DAS - Movimenti ad accisa assolta” e b) “Gestione Certificati”
  3. Se Gestore = Rappresentante fiscale le autorizzazioni sono praticamente immediate, ed a questo punto abbiamo una persona fisica che è il Gestore Delegato che ha (almeno) le due autorizzazioni base che gli consentono di gestire (inviare / ricevere) i DAS elettronici e l’autorizzazione a gestire i certificati.
  4. Ricevute le autorizzazioni, la persona fisica Gestore Delegato accede al portale col proprio SPID (se Gestore=Rapp.Fisc tecnicamente siamo già dentro il portale con SPID) e va in Area Riservata / Dogane / Servizi online / Interattivi dove teoricamente è possibile selezionare “Gestione Certificato”. Dico teoricamente in quanto talvolta questa voce appare alcune ore dopo la richiesta di autorizzazione, talvolta bastano pochi minuti… mistero.
  5. Quando finalmente compare Gestione Certificato, in quella sezione compaiono le istruzioni su come generare il Certificato (di trasmissione). Fino a alcune settimane fa per generare il certificato bisognava armarsi di OpenSSL e digitare svariate righe dal prompt di OpenSSL. Ora invece le istruzioni consigliano l’uso di un programma (di cui purtroppo non ricordo il nome) con interfaccia grafica che rende la generazione del certificato moooolto più agevole. In sostanza si genera una request (req.der) ed una chiave key.der, si esegue l’upload del req.der sul portale il quale (se tutto è corretto) fa apparire il pulsante “Richiedi certificato”. Cliccare su Richiedi certificato, girare un po’ i pollici e poi clicchiamo su “Scarica certificato” ed otteniamo un file dal nome certificato_AUTH_<p.ivaDitta>-EST.cer. Si trasforma il file .cer in un .pem (sempre col programmino indicato dalle dogane, o con OpenSSL per gli smanettoni) ed infine generiamo il nostro benedetto certificato .p12 “unendo” il .pem con la nostra chiave (key.der) generata al punto 1.
  6. Il certificato p12 così ottenuto va installato come certificato utente, ed ora potete procedere alla trasmissione.
    Per la firma XaDES, ripeto, non ho trovato altra soluzione che utilizzare la CNS o chiavette USB (ma se qualcuno trova altre soluzioni, ben vengano)

Sei il mio salvatore. Dovrò sentire il mio cliente e farlo dotare di SPID e poi fare tutta questa procedura… Con la speranza che le cose non cambino di nuovo… Grazie mille!!!

Finalmente la luce… Ho eseguito l’accesso tramite la CNS, che funziona bene come lo SPID, e dalla sezione “Mio Profilo” ho creato il Gestore, richiesto le autorizzazioni (mi sono uscite tutte, anche quelle sull’energia elettrica ecc ecc) e autorizzate.
Tuttavia, nonostante compaia la sezione “Gestione Certificati” nel menu “Interattivi”, cliccandoci esce una pagina bianca, senza nessun link. Sicuramente, come indicato da Stefano, c’è da attendere.
Vedremo domani mattina.

Grazie per l’info “CNS funziona bene come lo SPID”. Non lo avevo mai provato.

E’ stato uno sparo nel buio, in realtà… Nel documento delle Dogane era specificato sia lo SPID che la CNS, ho voluto provare… Speriamo che domani mattina riesca ad andare avanti

Aggiornamento: Ho creato il famoso file p12 seguendo le istruzioni sul sito (nessun programma esterno però, ho usato OpenSSL come indicato dal sito delle dogane), ma provando ad utilizzarlo, restituisce sempre lo stesso errore di certificato non valido. Inoltre, sempre nella stessa sezione, c’era la possibilità di scaricare un certificato chiamato “CADoganeMonopoli.pem”, ma non ho trovato nulla nessuna info sul suo utilizzo o funzionalità…

Scusate se riesumo questa conversazione. Lo stesso problema riportato lo sto vivendo anche io. Sono riuscito a generare il certificato di autenticazione, tramite il sito delle dogane. Il problema è invece il certificato di firma. Poniamo che sottoscriva il contratto con uno dei fornitori autorizzati. Riceverò un token usb con dentro il certificato. Il mio problema a quel punto è integrarlo nel mio software. Il mio programmatore dice che senza un file P12 non riesce a lavorare, non entro nel merito…, e deve integrarlo nella sua architettura cloud. Adesso proverò a richiedere il certificato al di fuori dell’ It
alia, dove non esiste la regola del supporto fisico… Qualcuno sa quale legge impone il supporto Hardware?

Il servizio esposto dall’Agenzia delle Dogane, prevede che l’XML sia firmato secondo le modalità descritte nel paragrafo 2.3 del documento “PROGETTO WEB SERVICES DOGANE
“SERVIZIO ACQUISIZIONE INFORMAZIONI INTEROPERABILITÀ”
MOVIMENTAZIONI DAS”, disponibile sul sito nella sezione E-Das.

Ovviamente la soluzione più semplice ed immediata è demandare una postazione singola che si occupa della generazione, firma e invio documento.

Tuttavia, in alcune realtà come quella da te descritta, si ha la necessità di utilizzare un sistema centralizzato per la firma (magari si usa per firmare 2000/3000 documenti al giorni, da diverse postazioni). In questo caso Aruba, Infocert, Namirial (di questi lo so per certo, gli altri indicati nel documento non saprei) rilasciano il certificato in formato .p12 che può essere poi messo su server o in cloud ed essere utilizzato. I costi si aggirano sui 5000 euro, sinceramente non mi sono informato più di tanto perchè i nostri clienti non generano un volume di documenti tale da giustificare tale acquisto.

Quindi, nessuna legge impone l’utilizzo di un dispositivo Hardware, in realtà. Potresti provare a controllare a chiedere appunto fuori dall’Italia, facendo tuttavia attenzione a scegliere un provider tra quelli accettati dall’Agenzia delle Dogane (sempre indicati nel documento).

Buongiorno @meltigel
Ho letto che fa uso della libreria chilkat per firmare in modalità xades-bes il file xml del e-das.
Anche io ho questa libreria, ma non ho capito dove recuperare il file p12 da usare per la firma.
Il mio problema sta nel fatto che l’applicazione che invia gli E-DAS è Cloud, quindi accessibile via web da N clienti diversi ognuno con la propria firma digitale.
È possibile avere una firma digitale che si basi solo su un file p12 e non richieda quindi la presenza fisica dell’operatore per essere applicata?
La mia idea sarebbe quella di salvare sul server tutti i certificati dei miei clienti con rispettive credenziali e di volta in volta usare quello corretto.
Grazie

Ciao Emanuele,
anche io ho parecchi clienti in cloud quindi ho già affrontato le tue stesse problematiche.
Anzitutto il sistema eDas, come saprai, richiede due firme. La prima è la firma di trasmissione e tecnicamente non è una firma certificata e pertanto è il classico p12. Il file XML invece va firmato CADES tramite una firma certificata la quale (essendo di livello 2) richiede la presenza fisica del supporto (risiede in un chip e non è esportabile).
Pertanto la firma deve avvenire sul PC fisico sui quale è collegata la firma (usb, scheda…) e non è possibile copiare la firma in cloud (a meno di non collegare fisicamente il sistema di firma al pc fisico nel quale gira il cloud, cosa ovviamente improponibile).
Personalmente ho risolto con un sistema (un servizio) che risiede nel PC fisico dell’utente, riceve dal cloud il file XML, esegue le dovute elaborazioni (firma), lo invia alle dogane e restituisce la risposta (esiti, xml, pdf…)

Per quanto riguarda la firma digitale al momento io sono gestore e delegato (su mandato) delle aziende miei clienti, per cui sono in grado di firmare digitalmente in modo massivo da remoto con un lotto di firme agganciate ad un certificato qualificato: ogni firma viene applicata XADES-BES enveloped con una semplice chiamate web-service.
Volendomi, però, togliere l’onere dell’essere delegato da ogni azienda, volevo capire quali alternative ci sono. Grazie della risposta.