Skip to content

GovWay v3.4.4

Latest

Choose a tag to compare

@andreapoli andreapoli released this 26 Oct 08:51
· 14 commits to 3.4.x since this release

Miglioramenti all'integrazione con la PDND

Scambi asincroni

Aggiunto il supporto agli Scambi di dati asincroni (risposta differita tramite callback): un'API può essere configurata come 'Erogazione dati' o come 'Callback', associando le risorse alle fasi previste (start_interaction, callback_invocation, get_resource, confirmation). Il gateway negozia i voucher PDND con i claim di ciascuna fase, verifica la URL di callback e lo stato dell'interazione; le interazioni sono consultabili in console e la configurazione è gestibile anche tramite le API di configurazione.

Signal Hub

La funzionalità di Signal Hub è stata rivista nei seguenti aspetti:

  • l'applicativo pubblicatore dei segnali viene adesso riconosciuto anche tramite l'autenticazione token, oltre che tramite l'autenticazione di trasporto;

  • nella console, alla voce 'Configurazione > Cache PDND > Semi Signal Hub', è possibile consultare i semi di pseudoanonimizzazione delle erogazioni e forzarne la rotazione.

Miglioramenti alla funzionalità dei Connettori

  • Il connettore JMS può adesso essere utilizzato anche per le API REST e per le azioni SOAP con profilo diverso da oneway: in precedenza la transazione terminava con l'errore "risposta applicativa attesa ma non ricevuta". Completata la pubblicazione viene restituita una risposta senza contenuto: per REST con codice HTTP 204, per SOAP con un SOAP Envelope dal Body vuoto oppure contenente l'elemento vuoto 'Response', secondo le convenzioni degli stili RPC e document/literal wrapped. Una risposta con un contenuto differente può essere prodotta tramite una trasformazione della risposta.

  • Le proprietà del connettore JMS prive di un campo dedicato (es. 'context-*', 'pool-*', 'locations-cache') sono adesso gestibili sia dalla console che dalle API di configurazione.

  • Il nome della coda, le credenziali e le proprietà del connettore JMS possono contenere valori dinamici risolti a runtime (es. ${header:NAME}), consentendo di pubblicare su code differenti in funzione della richiesta.

  • Il contenuto delle richieste viene inoltrato al backend in funzione del metodo HTTP (RFC 9110): per OPTIONS solo se presente l'header 'Content-Type', per GET, HEAD e DELETE solo se abilitato tramite la proprietà 'connettori.request.forceSendContent.enabled'.

  • Sono configurabili i limiti applicati alla lettura degli header HTTP della risposta del backend (dimensione del singolo header e numero massimo di header su HTTP/1.1, dimensione complessiva su HTTP/2); gli stessi limiti si applicano al client HTTP utilizzato internamente per il recupero di keystore, JWKS, risposte OCSP e token.

Miglioramenti al supporto per l'integrazione con i servizi SUAP

Realizzate le GovLet SUAP in versione 2, allineate alla versione approved02 delle specifiche tecniche del DPR 160/2010, comprensive del nuovo e-service 'ET-to-ET' per il coinvolgimento ricorsivo tra Enti Terzi. Le GovLet della versione 'approved01' rimangono disponibili come versione 1.

Miglioramenti alle funzionalità di Attribute Authority e Gestione Token

Cache di Introspection e UserInfo

L'esito di Introspection e UserInfo non resta più in cache per l'intera durata della cache dei token, che consentiva di accettare un token revocato fino alla sua scadenza: i servizi vengono adesso reinvocati trascorso un intervallo configurabile (default 60 secondi), ridefinibile nella token policy di validazione.

Dati Richiesta delle Attribute Authority

Nella configurazione di una Attribute Authority è possibile indicare, nella nuova sottosezione 'Dati Richiesta', ulteriori parametri della url e header HTTP, anche con valori dinamici (es. '${header:NOME}'), come già previsto per le token policy di negoziazione. L'header 'Authorization' può inoltre essere definito manualmente, sia nelle Attribute Authority che nelle token policy di negoziazione, quando non è attiva alcuna autenticazione client.

Migliore esperienza utente nella console

Nella console di gestione, all'interno delle erogazioni e delle fruizioni, sono disponibili nuove icone che aprono direttamente, in un nuovo tab del browser, la configurazione della token policy (di negoziazione o di validazione) o dell'Attribute Authority utilizzata, senza doverla cercare nella sezione di configurazione del prodotto.

Introduzione metriche Prometheus/OpenTelemetry

Il gateway può adesso esporre metriche operative (richieste, latenze, dimensioni dei messaggi, stato interno, risorse JVM) in formato Prometheus o verso un collector OpenTelemetry. Le metriche sono disabilitate per default; per i servizi critici è possibile abilitare metriche di dettaglio per erogazione, fruizione e operazione.

Bug Fix

Sono state risolte le seguenti vulnerabilità relative alle librerie di terze parti:

Sono state inoltre corrette le segnalazioni di vulnerabilità rilevate da SonarQube v26.6.0.123539.

Sono stati risolti i seguenti bug per la componente runtime del gateway:

  • Il provider 'BouncyCastle' impediva la lettura dei keystore PKCS12 cifrati con algoritmi moderni (PBES2/AES-256, default di OpenSSL 3 e di keytool dal JDK 16), segnalando l'errore fuorviante 'keystore password was incorrect'. Il provider viene inoltre registrato dopo quelli del JDK, più performanti sugli algoritmi di uso comune.

  • Profilo ModI: le richieste con Content-Type 'application/problem+json', 'application/problem+xml' o contenenti un SOAPFault venivano trattate come messaggi di errore e la sicurezza messaggio non veniva applicata in fruizione né verificata in erogazione.

  • Corrette le seguenti anomalie relative alle trasformazioni:

    • sulle API REST le operazioni sull'header 'Content-Type' non venivano applicate in assenza di una conversione del contenuto;
    • sulle API REST una regola che ridefiniva HTTP Method o Path e trasformava la risposta faceva fallire ogni invocazione con errore 502.
  • Corrette le seguenti anomalie relative ai connettori HTTP:

    • il connettore 'httpcore5' BIO non consentiva di invocare endpoint con host non conforme a RFC 2396 (es. contenente '_'), fallendo con l'errore 'NullPointerException: Host name';
    • il connettore 'httpcore5' non registrava, per le richieste con body, la data di uscita della richiesta, visibile nei tempi di dettaglio della transazione;
    • una risposta Problem Details compressa dal backend (es. 'Content-Encoding: gzip') veniva interpretata senza decompressione e inoltrata al client corrotta;
    • l'override della configurazione HTTPS della JVM attivato su un connettore veniva applicato anche alle connessioni verso Token Endpoint e Attribute Authority, causandone il fallimento;
    • il connettore 'Status' con verifica statistica poteva contare due volte le transazioni;
    • il connettore 'httpcore5' (BIO e NIO) continuava a usare il contenuto di truststore, keystore e CRL letto alla creazione del pool di connessioni, ignorando gli aggiornamenti dei file anche dopo il reset della cache: un certificato aggiunto non veniva considerato e uno rimosso restava attendibile fino al riavvio.
  • Correlazione Applicativa: un messaggio privo di contenuto (es. risposta con codice HTTP 204) faceva terminare la transazione con errore anche quando l'impostazione 'Identificazione fallita' della regola era 'accetta'. È adesso possibile trattare l'assenza del contenuto come una normale identificazione non riuscita: la transazione termina con errore solo se la regola prevede 'blocca', mentre con 'accetta' prosegue senza registrare l'identificativo di correlazione. Il nuovo comportamento è disabilitato per default, per retrocompatibilità, ed è attivabile separatamente per richiesta e risposta nella configurazione globale.

  • Claim, parametri e header definiti con la forma opzionale '?{..}' e non risolvibili a runtime venivano inviati con un valore vuoto anziché essere omessi, causando ad esempio il fallimento della negoziazione di un token PDND.

  • La validazione dei contenuti di una API REST rifiutava con errore 502 documenti XML validi, in funzione della sola formattazione (es. elemento radice su più righe o attributi con apici singoli).

  • I file temporanei creati nella directory 'dumpBinario' per i messaggi di grandi dimensioni non venivano sempre eliminati al termine della transazione, accumulandosi fino a saturare il volume dei log (caso tipico: API REST con validazione dei contenuti e messaggi binari o multipart). L'eliminazione è adesso garantita ed è stata aggiunta una pulizia periodica della directory.

  • WS-Security: con la nuova versione di 'wss4j' non venivano più accettati gli attachment cifrati in modalità 'Element' privi del Content-Type tra gli header cifrati. Il Content-Type viene adesso sempre cifrato; per accettare i messaggi prodotti dalle versioni precedenti è possibile abilitare in ricezione l'opzione 'decryptAttachmentMimeTypeFallback'.

  • Con il 'Multipart Parsing' abilitato, un allegato SOAP 'text/xml' con contenuto non valido faceva fallire la registrazione del messaggio; viene adesso registrato come binario.

  • Gli eventi di violazione del controllo del traffico potevano non essere registrati quando più raggruppamenti di una stessa policy venivano violati contemporaneamente.

  • Con il forward proxy (govway-proxy) attivo, il claim 'htu' del DPoP proof generato verso il backend riportava l'URL del proxy anziché quello del backend.

  • Nel passaggio all'ora solare, i messaggi presi in carico tra le 02:00 e le 02:05 venivano riconsegnati continuamente e alcuni identificativi Integration Manager risultavano non trovati.

  • Su Apache Tomcat l'arresto tramite lo script 'shutdown.sh' non terminava e il processo restava bloccato.

Per la console di gestione sono stati risolti i seguenti bug:

  • I campi che contengono identificativi esterni o elenchi di valori (es. Client ID, Audience, Scope, Kid, CRL) rifiutavano caratteri ammessi come '|', '[', ']', '"' e ','.

  • I caratteri speciali (es. doppi apici) dei template di Correlazione Applicativa venivano visualizzati come entità HTML e alterati a un successivo salvataggio.

  • Nella gestione CORS di una fruizione, l'abilitazione dell'opzione 'Max Age' impediva il salvataggio della configurazione.

  • Nelle maschere con caricamento di file, il salvataggio poteva fallire con l'errore "Dati incompleti" (es. una regola di trasformazione REST con conversione tramite template perdeva HTTP Method e Path). Corretti inoltre la validazione della password dei keystore caricati come credenziali, i ritorni a capo del WSDL modificato e gli spazi iniziali e finali delle interfacce YAML caricate tramite le API di configurazione.

  • Negli elenchi il numero di elementi per pagina veniva perso tornando all'elenco; l'export di molti oggetti poteva fallire con l'errore "414 URI Too Long". Aggiunto inoltre un indicatore di operazione in corso durante la preparazione dell'export.

  • Lo spostamento tramite frecce delle regole di proxy pass e degli archivi dei plugin falliva dopo la cancellazione di elementi. In tutte le liste ordinabili (regole di proxy pass, policy di rate limiting, regole di trasformazione e relative risposte, archivi dei plugin, handler) lo spostamento è adesso possibile anche oltre il confine di pagina, mentre con un filtro di ricerca attivo la colonna 'Ordine' non viene visualizzata. Corretti inoltre i tooltip con lettere accentate, mostrati come entità HTML, e il titolo delle liste annidate dopo una ricerca.

  • Aggiunto un limite alla dimensione dei file caricati, configurabile tramite la property 'console.security.request.multipart.maxSize' (default 250M).

  • Le API REST con interfaccia WADL, provenienti da un aggiornamento dalla 3.3, rendevano inaccessibile l'elenco delle API; sono adesso presentate come 'WADL (deprecato, non supportato)'.

  • Le proprietà di un connettore di tipo plugin di una fruizione, ridefinito in un gruppo, venivano lette e modificate sul connettore di default.

  • Nella sezione 'Runtime', in modalità cluster dinamica, vengono adesso nascoste anche le informazioni riferite al singolo nodo ('HTTP Client - BIO', 'HTTP Client - NIO', 'Threads Pool' della 'Consegna Notifiche').

  • Documentate, nella token policy di negoziazione PDND e nel manuale, le keyword per la configurazione del purposeId riferite all'applicativo identificato tramite token.

  • Il controllo anti SQL injection rifiutava i valori contenenti una parola chiave SQL (es. un'azione 'insert' o 'delete-user'), segnalando l'errore fuorviante 'Dati incompleti'; la correzione riguarda anche la console di monitoraggio e le API di configurazione e monitoraggio.

  • La sanificazione degli attributi 'style' nei parametri ricevuti non filtrava alcuna proprietà CSS.

  • Adeguamento alle WCAG 2.1 AA: rimosse le barriere di accessibilità rilevate, con particolare riferimento all'operabilità da tastiera, ai nomi accessibili dei controlli e al contrasto.

Per la console di monitoraggio sono stati risolti i seguenti bug:

  • La lettura dei CSV del Tracciamento PDND non rilasciava la connessione al database, esaurendo le connessioni del datasource; il problema riguardava l'export e il download dei tracciati e la pubblicazione verso la PDND del timer statistiche in modalità applicazione web.

  • Nel caricamento di file sono stati aggiunti il limite di dimensione e la verifica del token CSRF; corretti inoltre l'indicatore di caricamento, il messaggio di errore, la cancellazione dei file in 'Esamina archivio' e il conteggio dell'elenco delle ricerche salvate.

  • Il diagnostico 'DPoP backend proof generato (in cache)' veniva classificato erroneamente come warning.

  • Su Tomcat, in presenza di molti soggetti operativi, il cambio del profilo di interoperabilità e la navigazione tra le sezioni visualizzavano l'errore "Illegal Syntax for Set Operation".

  • Il titolo della console si configura adesso con la proprietà 'console.nome.esteso', come per la console di gestione.

  • Adeguamento alle WCAG 2.1 AA: rimosse le barriere di accessibilità rilevate, con particolare riferimento all'operabilità da tastiera, ai nomi accessibili dei controlli e al contrasto.

Per le API di configurazione sono stati risolti i seguenti bug:

  • La creazione o modifica di risorse, azioni o servizi, e l'aggiornamento della gestione token o del caching della risposta, terminavano con errore 500 in assenza di alcuni campi opzionali; i campi assumono adesso il valore di default.

  • La configurazione ModI di una fruizione non veniva validata secondo le regole del profilo, consentendo configurazioni non ammesse dalla console.

  • Una fruizione ModI 'oauth' creata senza identificativo, kid e keystore non era più leggibile (errore 500).

  • Nella creazione di un'API SOAP, la validazione del profilo ModI la trattava come REST.

Per le API di monitoraggio sono stati risolti i seguenti bug:

  • I report di Analisi Statistica non coincidevano con quelli della console: senza filtro sull'esito venivano riportate le sole transazioni con successo, gli estremi dell'intervallo non venivano allineati all'unità di campionamento e l'unità temporale, se non indicata, veniva assunta giornaliera.

  • Le richieste scartate venivano escluse per default da tutte le ricerche, in contrasto con la console e con l'interfaccia OpenAPI.

  • L'API che restituisce il CSV di un tracciato PDND risponde adesso con codice HTTP 404, anziché 500, quando il CSV non è disponibile.

Miglioramenti all'Installer

Sono stati apportati i seguenti miglioramenti all'installer binario:

  • Aggiunto il supporto per WildFly 41.

  • MySQL: i datasource generati utilizzano la classe driver 'com.mysql.cj.jdbc.Driver' al posto di quella deprecata 'com.mysql.jdbc.Driver'.

  • MySQL 8.4.9 e successive: corretto il fallimento dell'installazione dello schema con l'errore 1118 'Row size too large'.

  • SQL Server: eliminate le segnalazioni di superamento della dimensione massima delle chiavi di indice e di chiave primaria, ridimensionando alcune colonne e rivedendo gli indici. Sono stati inoltre rimossi, su MySQL, HyperSQL, SQL Server e DB2, gli indici che duplicavano un vincolo UNIQUE.

  • SQL Server: negli script di aggiornamento le istruzioni 'ALTER DATABASE' riportavano il segnaposto '@database@' al posto del nome del database, impedendo l'esecuzione dello script.

  • HyperSQL: ripristinata l'inizializzazione delle tabelle 'users_*_init_seq', commentata negli script generati.

  • Negli script SQL completi prodotti in modalità aggiornamento, le utenze delle console, prima riportate con username e password vuoti, sono adesso proposte come INSERT commentate con segnaposto da valorizzare.