DAS Elettronico

Ciao a tutti, scrivo qua perchè stiamo sviluppando l’integrazione con il servizio di invio energia elettrica tramite client C# (utilizziamo le librerie FirmaXadesNet per la firma dell’xml da inviare). Abbiamo seguito la procedura per il rilascio del certificato di autenticazione in ambiente di addestramento e installato il file .p12 correttamente.

Quando andiamo a invocare il servizio da applicativo riceviamo l’errore “14 - Utente non autorizzato”, qualcuno ha riscontrato lo stesso problema? Non capisco se sia un errore lato codice oppure se deve essere abilitata qualche autorizzazione particolare quando viene richiesto il certificato.

Riporto l’estratto per eseguire la chiamata al servizio SOAP:

            BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
            EndpointAddress address = new EndpointAddress(ConfigurationManager.AppSettings["ENERGIA_ELETTRICA_ENDPOINT"].ToString());
            binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
            binding.MessageEncoding = WSMessageEncoding.Mtom;

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            EnergiaElettricaServiceClient client = new EnergiaElettricaServiceClient(binding, address);

            Richiesta ric = new Richiesta();
            RichiestaData[] data = new RichiestaData[1];
            data[0] = new RichiestaData();

            ric.serviceId = RichiestaServiceId.invioEnergiaElettrica;

            data[0].xml = FirmaXml(); //contiene il messaggio xml valido per l’XSD
            data[0].dichiarante = partitaIvaDichiarante; //l’identificazione dell’utente dichiarante (partita iva del soggetto per il quale si sta inviando il messaggio).

            ric.data = data;
            
            client.ClientCredentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySerialNumber, ConfigurationManager.AppSettings["CERT_AUTHENTICATION_SERIAL"].ToString());
            response = client.process(ric);

Aggiungo una domanda: nel tracciato della richiesta il campo “dichiarante” indica la partita IVA del del soggetto per il quale si sta inviando il messaggio, questo campo in ambiente di addestramento può essere valorizzato con qualsiasi partita IVA o esistono delle restrizioni?

Grazie a tutti,
Marco.

Buongiorno a tutti,
sto cercando di fare la spedizione di Gas Naturale 2020 in ambiente di addestramento purtroppo non riesco a passare la validazione XSD.

DoganeWCFClient.Gas.Risposta
{
“IUT”: “20210211M11001264243”,
“esito”: {
“codice”: “20”,
“messaggio”: [
“Acquisito a sistema”
]
},
“data”: null,
“dataRegistrazione”: “2021-02-11T00:00:00+01:00”
}

DoganeWCFClient.Program+esitoRecuperato
{
“codice”: 10,
“messaggio”: “Verifica xsd: fallita”
}

Le specifiche https://www.adm.gov.it/portale/dogane/operatore/servizi-online/servizio-telematico-doganale-e.d.i./web-service/webservice-ambienteprova#sez-digitdichgasnatu sono corrette?

Di seguito posto il link della richiesta completa comprensiva di xml https://0bin.net/paste/8c5qvMh8#TdVTIZXQyoiSJakR10xjs5BtpGRywE3I4cXWkp4Pk8c

Ringrazio anticipatamente a chiunque possa darmi qualche suggerimento.

Saluti

Christian

                ServicePointManager.Expect100Continue = true;
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                X509Certificate2 cert = new X509Certificate2(PathCertificate, "****");
                
                ServicePointManager.ServerCertificateValidationCallback += ValidateCallback;
                BasicHttpBinding binding = new BasicHttpBinding(BasicHttpSecurityMode.Transport);
                EndpointAddress address = new EndpointAddress("https://interoptest.adm.gov.it/MovimentazioniDASWeb/services/MovimentazioniDAS?wsdl");
                binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
                binding.MessageEncoding = WSMessageEncoding.Mtom;


                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

                client = new DoganaTestEdas.MovimentazioniDASClient(binding, address);

                DoganaTestEdas.Richiesta input = new DoganaTestEdas.Richiesta();
                DoganaTestEdas.RichiestaData[] data = new DoganaTestEdas.RichiestaData[1];
                data[0] = new DoganaTestEdas.RichiestaData();

                input.serviceId = DoganaTestEdas.RichiestaServiceId.invioDE815;

                data[0].xml = Encoding.Default.GetBytes(PathXmlEdas); //contiene il messaggio xml valido per l’XSD
                data[0].dichiarante = "*******"; ; //l’identificazione dell’utente dichiarante (partita iva del soggetto per il quale si sta inviando il messaggio).

                input.data = data;

                client.ClientCredentials.ClientCertificate.Certificate = cert;
                client.process(input);

Usando questo codice mi da errore interno, sto utilizzando Visual Studio 2013 e C# naturalmente.
Non riesco a capire dove sbaglio. Aggiungo che il certificato è corretto perchè da browser accedo al web service e non mi da ‘forbidden’.

Ciao, scusa il ritardo. Allora, anche in ambiente di test la partita IVA (senza IT) deve essere quella del dichiarante. Utente non autorizzato indica un errore in fase di creazione del certificato, ad esempio per il DAS se il dichiarante è una ditta individuale, il rilascio deve essere richiesto con il CF(mi riferisco ai passaggi tramite OpenSSL oppure XCA), altrimenti se è una ditta devi inserire la P.IVA (sempre senza IT). Per i passaggi da seguire, dovrebbe esserci un mio post più su con la descrizione dettagliata.

Ciao, l’errore che indichi si riferisce ad un errore nella verifica del file da parte dei server delle Dogane. in pratica uno o più campi nel tuo tracciato non sono coerenti con quelli richiesti. L’XML che hai allegato è criptato, quindi è difficile capire dove sta l’errore. In che linguaggio sviluppi?

ServicePointManager.ServerCertificateValidationCallback += ValidateCallback;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

X509Certificate2 cert = new X509Certificate2(PathCertificate, "****");
Uri EPMovimentazioni = new Uri("https://interoptest.agenziadoganemonopoli.gov.it/MovimentazioniDASWeb/services/MovimentazioniDAS");             

EndpointIdentity identity = EndpointIdentity.CreateDnsIdentity("https://interoptest.agenziadoganemonopoli.gov.it");
EndpointAddress endPointMovimentazioni = new EndpointAddress(EPMovimentazioni, identity);

BasicHttpBinding myBinding = new BasicHttpBinding();
var timeout = new TimeSpan(0, 8, 0);
myBinding.SendTimeout = timeout;
myBinding.ReceiveTimeout = timeout;
myBinding.OpenTimeout = timeout;
myBinding.CloseTimeout = timeout;
myBinding.Security.Mode = BasicHttpSecurityMode.Transport;
myBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;
myBinding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None;
myBinding.Security.Transport.Realm = "";

client = new DoganaTestEdas.MovimentazioniDASClient(myBinding, endPointMovimentazioni );
client.ClientCredentials.ClientCertificate.Certificate = cert;

DoganaTestEdas.Richiesta input = new DoganaTestEdas.Richiesta();
DoganaTestEdas.RichiestaData[] data = new DoganaTestEdas.RichiestaData[1];
data[0] = new DoganaTestEdas.RichiestaData();

input.serviceId = DoganaTestEdas.RichiestaServiceId.invioDE815;

data[0].xml = Encoding.UTF8.GetBytes(PathXmlEdas); //contiene il messaggio xml valido per l’XSD
data[0].dichiarante = "*******"; ; //l’identificazione dell’utente dichiarante (partita iva del soggetto per il quale si sta inviando il messaggio).

input.data = data;
client.process(input);

Prova cosi, ho modificato qualcosa… Ovviamente per ambiente reale devi cambiare poi i percorsi, utilizzando quelli scritti sul PDF delle Dogane.

Grazie Giuseppe, il file non è criptato ma è in base64 basta decodificarlo.
Sai se per caso il server boccia file di grandi dimensioni?
Christian

Non che io sappia… Tuttavia forse l’errore sta in quello, dovresti mandarlo “in chiaro”, ovviamente compilandolo secondo i tracciati. Non dimenticare la firma, che è fondamentale.

Ho risolto. Ora ho il problema della firma. Naturalmente per ora allego un file Xml non firmato (il file è codificato correttamente perché lo utilizzo nella mia ditta di carburanti tramite un software per inviare E-DAS all’agenzia delle dogane in ambiente reale). Come mi muovo per la firma?

La verifica della firma è fallita"
Codice Errore ‘1’

Qu

Per la firma utilizzo la libreria “Chilkat”, che offre numerosi metodi già pronti per firmare un file XML. In alternativa puoi utilizzare la libreria free “FirmaXades.NET”, che alcuni in questo post sono riusciti a far funzionare. Se decidi di andare su Chilkat, ti posso dare una mano, se ne dovessi avere bisogno.

Usare una libreria piuttosto che un altra mi è indifferente, tanto non le conosco nessuno dei due :rofl:. Vorrei per lo piu capire se oltre all’uso della libreria ci vuole un certificato per firmare un file xml e dove lo posso prendere. (Io ho un aruba token usb che utilizzo per firmare i pdf della mia azienda). Voi come avere fatto?

Qualcuno ha del codice per utilizzare FirmaXadesNet?

Usando Chilkat (che è a pagamento), è possibile leggere dai dispositivi USB ed utilizzarli per firmare, ed è cosi che faccio io. Funziona sia con lettori di SmartCard che con Token USB. Con firma Xades ci ho provato all’inizio e poi l’ho abbandonato, quindi non saprei come aiutarti. In teoria potresti anche usare un certificato in formato p12, ma da quello che so costano cari, e purtroppo i dispositivi che si trovano in vendita non consentono di esportare i certificati.

Usando un certificato p12 risolverei il problema?

Si ma comunque devi sempre sviluppare un’applicazione per consentire di effettuare la firma, basandoti su tale certificato.

Probabilmente la soluzione migliore e più conveniente potrebbe essere comprare un token usb, mantenerlo sempre attaccato al pc di riferimento per gli invii E-DAS, e utilizzare la libreria FirmaXadesNet per estrarre il certificato dal token USB via codice in modo da firmare i file Xml.
Potrebbe funzionare tutta questa procedura?

Si, certo, un utente qui lo aveva fatto… Dovresti trovare la procedura

Ok visto che sto passando l’acquisto del TOKEN. va bene anche quello ARUBA KEY?

Ce nessuno . Che mi consigliate?

Sulla mia fork https://github.com/pgiacomo69/Xades.NetCore c’è un esempio, per qualsiasi dubbio scrivimi pure