Webservice TrasmissioneFatture

Un saluto a tutti.
Dopo aver risolto la comunicazione con il web service sdi ricevi_file (riusciamo ad inviare il file fattura e vediamo l’esito da Gestione Test Interoperabilità), abbiamo problemi a riceve le notifiche sul nostro web service TrasmissioneFatture.
Vediamo le chiamate arrivare da 217.175.52.231 (IP Sogei) ma terminano con errore 500 sul nostro server.
Da Gestione Test Interoperabilità nel dettaglio del messaggio vediamo l’errore

org.apache.axis2.AxisFault: HTTP ( 500 ) Internal Server Error address : https://26.2.162.231:80

che non è un nostro indirizzo e neanche un indirizzo Sogei, ma di DoD Network Information Center US.

Qualcuno sa come possiamo risolvere?
L’assistenza per adesso non ha risposto

Ho lo stesso problema. Dall’assistenza mi hanno risposto questo:

“Gentile utente,.il problema risiede nel fatto che il vostro enpoint di test non richiede il certificato che consente una corretta trasmissione in SSL bilanciato…Infatti chiamando l’indirizzo, non viene richiesto alcun certificato…Un cordiale saluto…Segreteria Tecnica SdI.”

Ho generato il file P12 così:

openssl x509 -inform der -in C:\SDI\NSDOMINIOENDPOINT.COM.cer -out C:\SDI\NSDOMINIOENDPOINT.COM.pem

openssl pkcs12 -export -out C:\SDI\NSDOMINIOENDPOINT.pfx -inkey C:\SDI\NSDOMINIOENDPOINT.key -in C:\SDI\NSDOMINIOENDPOINT.pem -certfile C:\SDI\CAEntratetest.cer

dove NSDOMINIOENDPOINT.cer,CAEntratetest.cer sono i certificati ricevuti dall’agenzia delle entrate.
mentre NSDOMINIOENDPOINT.key è la chiave originale utilizzata per la richiesta dei certificati.

Installato il certificato su IIS, collegato al dominio e impostato sulle impostazioni SSL “Require SSL” e “Require”. Ma non è cambiato niente.

Grazie Manuel,
dall’assistenza non abbiamo avuto questa risposta dettagliata.
Anche noi abbiamo messo su IIS “require ssl” e “richiedi” su certificati client.

Chiamando il nostro web service da browser, non viene richiesto il certificato, direi che bisogna risolvere questo!

Rimaniamo in contatto qui se ci sono aggiornamenti

Sono riuscito a configurare IIS seguendo questa guida:
https://blog.jayway.com/2014/10/27/configure-iis-to-use-your-self-signed-certificates-with-your-application/
Adesso non mi da più l’errore:
org.apache.axis2.AxisFault: HTTP ( 403 ) Forbidden address
ma questo:
Server was unable to process request. —> Unable to connect to the remote server —> A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond 217.175.53.92:80

In pratica l’errore si presenta solo alla chiamata del ns ws RiceviFatture. Infatti dopo 3 tentativi di chiamata con l’errore, SDI richiama l’altro ws TrasmissioneFatture per notificare la mancata consegna. Quest’ultima chiamata non da nessun errore. Quindi penso che il problema della configurazione di IIS sia risolto visto che 1 dei 2 ws funziona correttamente.

Grazie Manuel per aver condiviso la tua esperienza, sto seguendo la guida che hai indicato, avrei un paio di dubbi:

  • hai usato One-To-One Mappings?
  • quale certificato hai indicato nell’elenco degli utenti abilitati?
  • quindi adesso se chiami da browser il tuo ws TrasmissioneFatture ti chiede il certificato giusto? (cosi faccio le prove per vedere se ho fatto giusto)

Grazie ancora

Ho abilitato ManyToOne, e adesso richiamando il ws mi chiede il certificato.

Ciao Manuel,
niente non mi funziona neanche con “many to one”.
Ho messo queste impostazioni:
immagine
e
immagine

installato i certificati:
SistemaInterscambioFatturaPATest.cer
CAEntratetest.cer

negli store: computer e utente locale (administrator)
ma chiamando il mio ws ottengo sempre 403 e nessuna richiesta di certificato.
Puoi verificare le tue impostazioni
Grazie

Salve Giulio,
Anche noi riscontrammo lo stesso errore; se non ricordo male il problema dipendeva dal fatto che alcune notifiche SdI sono in formato MTOM;
Assicurati che il SoapServer che elabora i messaggi supporti MTOM;
Se vedi i flussi arrivare dall’IP SOGEI, probabilmente sei in grado di analizzare i dati di flusso e vedere dove intervenire per modificare il SoapServer.

Buongiorno Antonello,
si vedo le chiamate da ip sogei, ho provato a verificare con wireshark ma non ci capisco molto, come posso vedere se sono a posto con MTOM?
In ogni caso credo di avere qualche problema ancora a monte, se chiamo il mio web service da browser non mi chiede il certificato, cosa che dovrebbe fare.
Tu hai risolto su IIS o altro web server?

Ciao Antonello sono Antonio Pellegrino sto provando ad impostare i certificati per una richiesta SOAP con PHP ma risponde sempre con errore 403. ti potrei contattare per avere dei chiarimenti?
Grazie

Pure a noi tramite browser risulta sempre Error 403: AuthenticationFailed quando ci colleghiamo a https://testservizi.fatturapa.it/ricevi_file?wsdl mentre mostra “Webserver is running” quando apriamo la pagina https://testservizi.fatturapa.it/

Leggendo i commenti precedenti abbiamo segnalato la cosa al numero verde ma da mercoledì non abbiamo avuto alcuna notizia.
I vari operatori che abbiamo trovato si sono limitati a prendere nota di quello che dicevamo e ad aprire un ticket.

non capisco se i certificati sono installati male, errati o se è un problema di autenticazione da parte di sogei.

Ciao a tutti,
confermo in pieno l’analoga situazione di Daniele. Noi lavoriamo in ambiente Java.
Errore 403, anche con il browser; ticket senza risposta dopo 4 giorni. Ovviamente il dubbio su una configurazione non corretta da parte nostra rimane, ma se in tanti abbiamo lo stesso problema …
Un saluto
Riccardo

Ciao Daniele e Riccardo,
come altri ero anche io nella vostra situazione, se da browser non riuscite ad accedere, riprovare con l’assistenza è un problema dal loro lato devono in qualche modo abilitarvi.

Al momento, riesco ad inviare i file al ws ricevi_file sono bloccato sulla ricezione delle notifiche, sempre per problemi di certificato ma qui l’assistenza può fare poco

Ciao Giulio,

visto che hai risolto puoi dare un’occhiata alla mia procedura?

da browser ottengo il messaggio: Hello! This is an Axis2 Web Service!
da codice: Impossibile stabilire un canale sicuro per SSL/TLS con l’autorità ‘testservizi.fatturapa.it’.

private void button4_Click(object sender, EventArgs e)
    {
        FatturaPA_SdIRiceviFile.SdIRiceviFileClient srv = new FatturaPA_SdIRiceviFile.SdIRiceviFileClient();
        FatturaPA_SdIRiceviFile.RiceviFileRequest srvReq = new FatturaPA_SdIRiceviFile.RiceviFileRequest();
        FatturaPA_SdIRiceviFile.RiceviFileResponse srvResp = new FatturaPA_SdIRiceviFile.RiceviFileResponse();

    var binding = CreateMultiFactorAuthenticationBinding();


    ServicePointManager.ServerCertificateValidationCallback = ValidationCallBack;

    var certificate = new X509Certificate2("C:\\Users\\fabio\\Desktop\\client_SDI-[PIVA].pfx");
    var address = new EndpointAddress(new Uri("https://testservizi.fatturapa.it/ricevi_file")); 

    var factory = new ChannelFactory<FatturaPA_SdIRiceviFile.SdIRiceviFileChannel>(binding, address);
    factory.Credentials.ClientCertificate.Certificate = certificate;
    factory.Endpoint.Contract.ProtectionLevel = ProtectionLevel.Sign;
    factory.Credentials.ServiceCertificate.DefaultCertificate = new X509Certificate2("C:\\Users\\fabio\\Desktop\\testservizi.fatturapa.it.cer");
    factory.Credentials.ServiceCertificate.SslCertificateAuthentication = new X509ServiceCertificateAuthentication
    {
        CertificateValidationMode = X509CertificateValidationMode.None,
        RevocationMode = X509RevocationMode.NoCheck
    };

    var channel = factory.CreateChannel();
    try
    {
        srvReq.fileSdIAccoglienza = new FatturaPA_SdIRiceviFile.fileSdIBase_Type();

        byte[] f = System.IO.File.ReadAllBytes("C:\\Users\\fabio\\Desktop\\IT[piva]_00895.zip");
        byte[] x = Convert.FromBase64String(Convert.ToBase64String(f, 0, f.Length));
        srvReq.fileSdIAccoglienza.File = x;
        srvReq.fileSdIAccoglienza.NomeFile = "IT[piva]_00895.zip";

        srvResp = channel.RiceviFile(srvReq);
    }
    catch (Exception exc)
    {
        Console.WriteLine(exc.ToString());
    }


    Console.ReadLine();
}


public static System.ServiceModel.Channels.Binding CreateMultiFactorAuthenticationBinding()
{
    System.ServiceModel.Channels.AsymmetricSecurityBindingElement asbe = new AsymmetricSecurityBindingElement();

    asbe.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
    asbe.InitiatorTokenParameters = new X509SecurityTokenParameters();
    asbe.RecipientTokenParameters = new X509SecurityTokenParameters();
    asbe.ProtectTokens = true;
    asbe.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt;

    asbe.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
    asbe.EnableUnsecuredResponse = true;
    asbe.IncludeTimestamp = false;
    asbe.SetKeyDerivation(false);
    asbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128Rsa15;

    CustomBinding myBinding = new CustomBinding();
    myBinding.Elements.Add(asbe);
    myBinding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap12, Encoding.UTF8));

    HttpsTransportBindingElement httpsBindingElement = new HttpsTransportBindingElement();
    httpsBindingElement.RequireClientCertificate = true;
    myBinding.Elements.Add(httpsBindingElement);
    

    return myBinding;
}

dove sta l’errore?

Grazie.
Fabio.

Ciao Fabio,
scusa per il ritardo, ero fuori ufficio la settimana scorsa.
Sei riuscito a risolvere? il codice mi sembra ok a parte che mandi un file .zip
a me funziona solo se mando un file firmato .xml.p7m

Ciao Giulio,

il problema dell’autenticazione credo di averlo superato, adesso all’invio del file
il server mi risponde con questo errore (SOGEI sostiene che si tratta di un problema lato client e di non potermi aiutare):

500 Internal Server Error

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Body>
      <soapenv:Fault xmlns:axis2ns1="http://schemas.xmlsoap.org/soap/envelope/">
         <faultcode>axis2ns1:Server</faultcode>
         <faultstring>Internal Error</faultstring>
         <detail/>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

per quanto riguarda il tipo di file sono ammessi sia p7m che zip, infatti anche cambiando file non cambia l'errore.

Ciao Fabio,

ma il file pfx che richiami nel tuo codice, come l’hai ottenuto?

Grazie, Domenico.

Ciao,

  1. converto il certificato client ricevuto in .pem
    openssl x509 -inform der -in client_SDI-[piva].cer -out client_SDI-[piva].pem

  2. converto il certificato di test esposto dal server in .pem
    openssl x509 -inform der -in testservizi.fatturapa.it.cer -out testservizi.fatturapa.it.pem

  3. unisco quest’ultimo ai certificadi di CA
    copy /b caentrate.der+CAEntratetest.cer+testservizi.fatturapa.it.pem morecert.pem

  4. creo il pfx unendo certificato client + morecert.pem + la chiave privata inviata a sogei per la creazione del certificato client
    openssl pkcs12 -export -out client_SDI-[piva].pfx -inkey clientfatturapa.key -in client_SDI-[piva].pem -certfile morecert.pem

Fabio.

Grazie Fabio, ma io sono bloccato ancora alla chiamata al servizio RiceviFile. In questo caso, quale certificato devo usare?

un paio di post fa (più sopra) trovi la procedura che uso io scritta in c#,
puoi vedere come uso i certificati (ma la comunicazione con sogei ancora non mi funziona)