Accreditamento SDICoop: configurazione SSL su Apache

dopo le modifiche fatte ieri dopo il post, ha iniziato a funzionare correttamente.
per l’invio usiamo il comando soapClient esteso per gestire MTOM e con opzione local_cert dove passiamo il pfx convertito pem.

per quanto riguarda il file, attualmente lo passiamo non firmato e risulta ricevuto con successo da SDI.
il problema dell’errore 200 era dovuto dal fatto che eseguivamo l’encode base64 del file prima di inoltrarlo…ma dato che l’encode avviene in automatico, avveniva un doppio encode.

attualmente ci rimane il problema javax.net.ssl.SSLHandshakeException: General SSLEngine problem che se non ho capito male, è l’errore generato quando SDI non riesce ad inoltrare la notifica di ritorno a causa di un errore nei certificati (probabilmente il nostro server non chiede i certificati o chiede quelli corretti)

una curiosità.
Come apponi la firma sul file?
-firmi il file in esterno e poi lo inoltri as SDI
-firmi in maniera programmatica con una libreria (se usi php, quale consigli ?) e poi giri il tutto a sdi

Grazie.

Al momento firmiamo in esterno con chiavetta cns.
Stiamo cercando come poter fare firma massiva da codice ma non abbiamo ancora una soluzione, però non usiamo php ma lavoriamo con .net e server iis.

Ciao Giulio, anche noi lavoriamo con .net e dobbiamo attrezzare un server iis per inviare e ricevere le fatture elettroniche. Come hai proceduto per l’installazione dei certificati sul server IIS? Puoi condividere uno stralcio di codice da usare come punto di partenza per la trasmissione di una fattura con codice .net? Un post del genere sono sicuro che sarebbe utile a moltissimi utenti.

Intanto posto il codice .net che sta usando BrightSoul per la connessione ad un WS PA:

Ciao Luca,
come codice guarda qui, avevo già scritto in proposito:

Per quanto riguarda i certificati sul server non mi esprimo in quanto non siamo ancora riusciti a ricevere correttamente le notifiche quindi darei informazioni sbagliate, siamo attualmente bloccati su questo punto, le chiamate al nostro ws trasmissionefatture non funzionano.
Adesso iniziamo ad essere in tanti qui che usano .net e iis, dai che forse riusciamo ad arrivare in fondo

Salve a tutti,
io sto implementando una APP mobile IONIC3 una webapp con Angular 5 che consuma API da un webservice in Laravel 5.6. Non so se può essere utile a qualcuno ma per ovviare al problema della gestione MTOM su SoapClient, uso questo pacchetto composer…

Io mi ero informato per firma digitale massiva con Aruba, che ha un prodotto apposito che si chiama Aruba Secure Box, ma i costi sono abbastanza elevati.

Ciao, Anch’io ho utilizzato quella classe ma da qualche errore quando SDI ti inoltra la response negativa per l’invio della notifica di accettazione/scarto della fattura ricevuta.

SOAP-ERROR: Encoding: Violation of encoding rules

in pratica anche se c’è il tag xop non c’è la stringa di chiusura --uuid. questo comporta che la classe non riesce ad individuare la parte binaria dell’allegato, lasciando l’xml “sporco”

Scusami, ti posso chiedere se posti una esempio di soapclient con i certificati che hai usato in php e la una config di apache sempre per favore?

quello che uso attualmente è riportato poco sopra alla data del 19 giungo.
per la spiegazione dei certificati da usare ho usato il certificato pfx convertito in pem
la spiegazione la trovi a questo link Installazione certificati canale SDICOOP

questo mi ha permesso di inoltrare i file a SDI ma la response veniva troncata.
quindi ho modificato la classe soapClient con la classe postata da da Paolo_pedrazzi_digit il 29 giugno

Scusami ancora ma il certificato che hai converito in pem da pfx lo passi nella chiamata soapclient nelle option con la dicitura “local_cert”?

si esatto

$certspath=“./cartella-certificati/”; //CA file
$clientCertFile = “SDI-xxxxxxxxxxxxxxxxxx-clientpfx.pem”;
$wsdl=“https://testservizi.fatturapa.it/SdI2AccoglienzaWeb/SdIRiceviFile_service/WEB-INF/wsdl/SdIRiceviFile_v1.0.wsdl”;
$url = ‘https://testservizi.fatturapa.it/ricevi_file’;
$options = array(
“location”=>$url,
‘local_cert’=>$certspath.$clientCertFile,
//‘style’=>SOAP_LITERAL,
//‘use’=>SOAP_ENCODED,
//‘soap_version’=>SOAP_1_1,
‘cache_wsdl’=>WSDL_CACHE_NONE,
‘connection_timeout’=>15,
//‘trace’=>true,
//‘encoding’=>‘UTF-8’,
//‘exceptions’=>true,
);
$client = new MTOMSoapClient($wsdl ,$options );

grazie… ma siccome sto impazzendo un po il tuo apache come lo hai fatto? perchè io sto mettendo
SSLEngine on
SSLCertificateFile /pathto/SDI-xxxxx-server.pem
SSLCertificateKeyFile /pathto/mykeya.key
SSLCertificateChainFile /pathto/caentrate.der
SSLVerifyClient optional
SSLVerifyDepth 5
SSLCACertificateFile /pathto/caentrate.der
SSLStrictSNIVHostCheck off

purtroppo li non posso aiutarti.
attualmente inoltriamo la fattura (non firmata) e riceviamo la response di presa in carico.
a causa dei conflitti nei certificati (il nostro con quello fornito da f.pa) non riusciamo ancora ad ottenere una ricezione della notifica positiva.

In pratica verificando il flusso dal portale FatturaPa vedo che l’invio avviene con successo ma poi quando loro mi inoltrano la notifica o una fattura, non la ricevo per General SSLEngine problem

Ciao a tutti ho eseguito alla lettera il tuo codice ma niente ecco il mio risultato

Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://testservizi.fatturapa.it/SdI2AccoglienzaWeb/SdIRiceviFile_service/WEB-INF/wsdl/SdIRiceviFile_v1.0.wsdl' : failed to load external entity "https://testservizi.fatturapa.it/SdI2AccoglienzaWeb/SdIRiceviFile_service/WEB-INF/wsdl/SdIRiceviFile_v1.0.wsdl" in /hthost/chiamata.php:51 Stack trace: #0 /hthost/chiamata.php(51): SoapClient->SoapClient('https://testser...', Array) #1 {main} thrown in /hthost/chiamata.php on line 51
io ho creato il convertito il certificato pfx in pem con il seguente comando

openssl pkcs12 -in SDI-xxxxx-client.pfx -out cert.pem

Dove sbaglio?

ti consiglio di verificare se
https://testservizi.fatturapa.it/SdI2AccoglienzaWeb/SdIRiceviFile_service/WEB-INF/wsdl/SdIRiceviFile_v1.0.wsdl
è accessibile per te tramite browser.
installando il certificato PFX dovresti riuscire a visualizzare il wsdl.
se ti restituisce l’errore “Forbidden” verifica nuovamente i certificati installati o contatta l’assistenza perchè potrebbe essere che non siete ancora stati abilitati

per conto nostro, continuiamo a ricevere errore di comunicazione nella ricezione delle notifiche e delle fatture. restituisce sempre l’errore “Protocol Version”
per caso qualcuno di voi è capitato lo stesso problema?

Grazie.

no mai avuto questo problema, sono arrivato a fare “ricevi fattura” ma non capisco come fare questi altri passarri

che tipo di configurazione avete impostato sul server per poter ricevere correttamente?
e che versione/distribuzione usate ?
avete un singolo certificato oppure usate il vostro certificato assieme al certificato dell’agenzia?

grazie.

Ormai le stiamo provando un po’ tutte.
da quello che mi dicono hanno provato a rimuovere i nostri certificati, usare solo quelli dell’agenzia, usare entrambi, usare una versione con entrambi i certificati concatenati, abilitare tutti i protocolli ssl (sslv3, tls) abilitare solo il tls1.2, mandare ticket…
ma nulla.

sembra che nulla funzioni correttamente.
in fase di ricezione della notifica il server non viene raggiunto perchè il protocollo non è compatibile o Server chose SSLv3, but that protocol version is not enabled or not supported by the client.

inizio a domandarmi se per caso, come per l’invio, non debbano abilitare loro qualcosa. o che stiano inviando le notifiche senza il nostro certificato.

Buongiorno Francesco,
anche io mi trovo esattamente nella tua condizione:

$certspath=“./cartella-certificati/”; //CA file
$clientCertFile = “SDI-xxxxxxxxxxxxxxxxxx-clientpfx.pem”;
$wsdl=“https://testservizi.fatturapa.it/SdI2AccoglienzaWeb/SdIRiceviFile_service/WEB-INF/wsdl/SdIRiceviFile_v1.0.wsdl 3”;
$url = ‘https://testservizi.fatturapa.it/ricevi_file’;
$options = array(
“location”=>$url,
‘local_cert’=>$certspath.$clientCertFile,
//‘style’=>SOAP_LITERAL,
//‘use’=>SOAP_ENCODED,
//‘soap_version’=>SOAP_1_1,
‘cache_wsdl’=>WSDL_CACHE_NONE,
‘connection_timeout’=>15,
//‘trace’=>true,
//‘encoding’=>‘UTF-8’,
//‘exceptions’=>true,
);
$client = new MTOMSoapClient($wsdl ,$options );

Tuttavia, nel mio test in php continuo sempre ad ottenere l’eccezione SOAP
SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://testservizi.fatturapa.it/SdI2AccoglienzaWeb/SdIRiceviFile_service/WEB-INF/wsdl/SdIRiceviFile_v1.0.wsdl' : failed to load external entity

Tu sei riuscito a risolvere il problema?

Grazie.