Collegamento ai WS e certificati

Buongiorno a tutti,
Qualcuno utilizzando .NET e client WCF per connettersi all’SDI, chiamando il Web-Service “RiceviFile” ha avuto a che fare con questo errore?:
“MTOM messages must have type 'application/xop+xml”

Ho già impostato il messageEncoding=“Mtom” non capisco dosa faccia fallire la chiamata

Buongiorno Riccardo, ho provato anche l’invio delle fatture in formato xml => xml.p7m però mi da ancora lo stesso errore generico.

Scusate la domanda, ma se accridito un canale sdiCoop , poi per far inviare le fatture dai miei clienti dovrò comunque farle firmare(o firmarle io)?

buongiorno,
sto cercando di accreditarmi sul canale SDI tramite un programma sviluppato in vb.net, ho ricevuto i certificati, li ho installati e da questo punto di vista sembra tutto OK.
ho creato un collegamento tramite “servizio WEB” al WS di SDI “RiceviFile” mi ha scaricato il wsdl e generato il codice vb.
passo tutti i parametri richiesti: Url, certificato, file, etc… ma al momento della chiamata del metodo “Ricevifile” ottengo un errore Soap “internal error”.
ho provato a scrivere il tuo codice ma all’istruzione (… sdiws = new sdi.ricevifile.sdiricevifileclient(newbind,endpoint) mi dice che devo indicare una interfaccia (che non saprei come creare per questo uso).
spero tanto in un aiuto perchè ho trovato tanto materiale ma molto frammentato e questo non mi ha fatto capire dove potrei sbagliare.
grazie
saluti

Ciao Giulio, mi trovo dopo qualche mese nella tua identica situazione. Dopo aver configurato i certificati (così: Accreditamento SDICoop: configurazione SSL su Apache - n°2 da stefanotravelli ), non mi da più l’errore

javax.net.ssl.SSLHandshakeException: General SSLEngine problem

ma mi dà l’errore

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

Francamente non capisco se è ancora un problema di certificati (ma diverso) o se è un problema di come ho programmato i web service. Il mio ambiente è lamp. Tu come avevi risolto?

Mi auto-rispondo perchè può essere utile a tutti. Era un problema del mio file php “server”: stavo usando una versione modificata della prima versione del file trasmissione-fatture.php della Simevo. L’ho sostituito con questo file:

E ho finalmente visto la mia prima spunta verde :star_struck:

Mi accodo alla lunga serie di colleghi che mormorano “senza questo forum ci riuscivo fra mille anni” :grin: anche se ho un po’ di lavoro ancora da fare…

Ciao Riccardo,

io ho installato correttamente i certificati e comunico correttamente con lo SDI. Il mio problema è al momento della risposta .
Visualizzando il tuo codice ho notato che hai “SdITrasmissioneFileClient”.
Potresti dirmi come hai fatto creare questo client, poichè generando la referenza al servizio dal file asmx dato da loro non riesco a generarlo.

Grazie

Ciao a tutti, ho iniziato a fare i test di interoperabilità con codice .net con ws wcf (vb.net per l’esattezza) e sono fermo al dannato messaggio “Internal Error” tra l’altro dato da una FaultException con nel FaultCode l’indicazione che l’errore sarebbe lato loro:
Code.IsPredefinedFault=True
Code.IsReceiverFault=True
Code.IsSenderFault=False

Ho provato sia con il binding standard (con il codice di @G1zm0) sia con il codice consigliato da @davidehow.

Scrivo qui di seguito la conversione in vb.net

Private Function GetSdiRiceviNotificaClient() As SDIRiceviNotificaService.SdIRiceviNotifica
    Dim myAddress = New EndpointAddress(If(IsTest, "https://testservizi.fatturapa.it/ricevi_notifica", "https://servizi.fatturapa.it/ricevi_notifica"))
    Dim myBinding = CreateMultiFactorAuthenticationBinding()

    Dim myFactory = New ChannelFactory(Of SDIRiceviNotificaService.SdIRiceviNotifica)(myBinding, myAddress)

    myFactory.Credentials.ClientCertificate.Certificate = New X509Certificate2(Commons.ClientCertPath, Commons.ClientCertPassword)
    'myFactory.Credentials.ClientCertificate.SetCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindByThumbprint, Commons.SDIClientThumbprint)

    myFactory.Endpoint.Contract.ProtectionLevel = Security.ProtectionLevel.Sign
    myFactory.Credentials.ServiceCertificate.SetDefaultCertificate(StoreLocation.LocalMachine, StoreName.Root, X509FindType.FindByThumbprint, If(IsTest, Commons.SDITestServiziFatturaIt, Commons.SDIServiziFatturaIt))
    myFactory.Credentials.ServiceCertificate.SslCertificateAuthentication = New X509ServiceCertificateAuthentication()
    myFactory.Credentials.ServiceCertificate.SslCertificateAuthentication.CertificateValidationMode = X509CertificateValidationMode.None
    myFactory.Credentials.ServiceCertificate.SslCertificateAuthentication.RevocationMode = X509RevocationMode.NoCheck

    Dim myChannel = myFactory.CreateChannel

    System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
    System.Net.ServicePointManager.ServerCertificateValidationCallback = AddressOf AcceptAllCertifications

    Return myChannel
End Function
Private Function CreateMultiFactorAuthenticationBinding() As Binding
    Dim asbe = New AsymmetricSecurityBindingElement
    asbe.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10

    asbe.InitiatorTokenParameters = New X509SecurityTokenParameters
    asbe.RecipientTokenParameters = New X509SecurityTokenParameters
    asbe.ProtectTokens = True
    asbe.MessageProtectionOrder = ServiceModel.Security.MessageProtectionOrder.SignBeforeEncrypt

    asbe.SecurityHeaderLayout = SecurityHeaderLayout.Strict
    asbe.EnableUnsecuredResponse = True
    asbe.IncludeTimestamp = False
    asbe.SetKeyDerivation(False)
    asbe.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128Rsa15

    Dim myBinding = New CustomBinding
    myBinding.Elements.Add(asbe)
    myBinding.Elements.Add(New MtomMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8))
    'myBinding.Elements.Add(New TextMessageEncodingBindingElement(MessageVersion.Soap12, Encoding.UTF8))

    Dim httpsBindingElement = New HttpsTransportBindingElement()
    httpsBindingElement.RequireClientCertificate = True
    myBinding.Elements.Add(httpsBindingElement)

    Return myBinding
End Function
Private Function AcceptAllCertifications(ByVal sender As Object, ByVal certification As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal chain As System.Security.Cryptography.X509Certificates.X509Chain, ByVal sslPolicyErrors As System.Net.Security.SslPolicyErrors) As Boolean
    Return True
End Function 

Ho solo modificato il TextMessageEncoding con il MtomMessageEncoding visto che dovrebbe essere il sistema da utilizzare.

A questo punto non so più come fare, può essere qualche problema lato loro? Come mi posso muovere?

Buongiorno a tutti.
Mi unisco alla conversazione. Stiamo cercando di completare l’accreditamento.
Siamo in fase di test. Inviamo le fatture regolarmente in ambiante ASP.NET IIS. Il nostro endpoint di ricezione notifiche è un ws asmx.

Il problema è nella ricezione delle notifiche.:

  • Ho installato i certificati, richiamando il certificando nel binding su IIS
  • Ho attivato il require SSL su Accept ma ho provato anche le altre opzioni
  • Ho configurato il registro su manyToOne
  • Nei vari trace sul server vedo le chiamate dello SDI sul mio endpoint
  • Da browser il mio endpoint mi richiede il certificato

Purtroppo però ricevo sempre l’errore:
org.apache.axis2.AxisFault: HTTP ( 500 ) Internal Server Error address : https://26.2.162.231:80

Sapete se dalla dinamica descritta il problema è sui certificati o sul webservice che espongo? Ho letto vari post sul webservice e su MTOM. Ma non sono sicuro ancora di aver superato il problema certificati.

Ringrazio in anticipo per la collaborazione. Sono anche a disposizione per condividere le procedure che ho superato con successo se a qualcuno possono server.

Ciao Fabio,
Volevo chiederti come fai a crearti il client "SdIRiceviFileClient ". Ho provato con svcutil come ad esempio

svcutil SdIRiceviFile_v1.0.wsdl TrasmissioneTypes_v1.0.xsd /language:C# /serviceContract /out:IRiceviFile.cs

ma non mi crea mai il client.

Puoi darmi una dritta?
Grazie

Se dalla soluzione fai Aggiungi - Riferimento al servizio e nel link indichi direttamente il percorso online del wsdl ti crea già tutto lui.
Ti scrivo qui il link per comodità

https://www.fatturapa.gov.it/export/fatturazione/sdi/ws/trasmissione/v1.0/SdIRiceviFile_v1.0.wsdl

Ciao,

mi dispiace ma io ho rinunciato, ho deciso di appoggiarmi ad Aruba.

i tempi di attesa sull’assistenza erano troppo lunghi.

Grazie,

funziona… io importavo in modo diverso!!!
ora però mi da errore EI01. Ho verificato ma il file di test xml firmato viene allegato, inserito nel oggetto che invio, ma sembra non funzionare.

Posso chiederti con che linguaggio fai la chiamata e che istruzioni lanci? io sto provando di tutto e non ne vuole sapere… sempre Internal Error…

Ciao,

sto utilizzando c#

e come hai fatto la chiamata con successo al servizio di test?

Ecco il mio codice

Evidentemente sbagliavo qualcosa in passato, ora funziona.
Mi da però eccezione di notifica di scarto

javax.net.ssl.SSLHandshakeException: General SSLEngine problem

Sarà un problema di permessi del mio servizio in ascolto. Qualcuno ha avuto già questo problema?

Abilita il trace di iis per verificare il problema

non mi pare un problema di autenticazione, mi sembra proprio che l’SSL sull’IIS non stia funzionando a priori rispetto all’autenticazione…