UNIVERSITA’ DEGLI STUDI DI MESSINA FACOLTA’ DI SCIENZE MM.FF.NN. CORSO DI LAUREA IN INFORMATICA ____________________________________________________________________ IL PROCESSO TELEMATICO: REALIZZAZIONE CON J2EE ____________________________________________________________________ Tesi di Laurea Universitaria di: Alessandro Grosso Relatore: Prof. Francesco Pagano Correlatore: Prof. Aristotele Malatino ____________________________________________________________________ Anno Accademico 2004 - 2005 INDICE 1. Introduzione Tesi............................................................................................... 2 2. Analisi del problema.............................................................................................3 2.1 Descrizione problema…………………………………………………………. ..3 2.1.2 Contesto…………………………………………………………………….. ..3 2.1.3 Architettura……………………………………………………………...........3 2.2 Flusso informativo……………………………………………………………....8 2.3 Casi d’uso……………………………………………………………….…….. 10 3. Contesto applicativo........................................................................................... 13 3.1 Tecnologie.......................................................................................................... 13 3.1.1 J2EE............................................................................................................... 13 3.1.2 Sicurezza........................................................................................................ 18 3.1.3 Firma digitale................................................................................................. 27 3.2 Strumenti............................................................................................................ 35 3.2.1 WSAD (IDE di sviluppo) .............................................................................. 35 3.2.2 WAS (application server) .............................................................................. 36 3.2.3 Oracle DB e repository (database) ................................................................ 37 3.2.4 OID (directory service) ................................................................................. 37 4. Implementazione Progetto................................................................................ 38 4.1 La web application............................................................................................. 38 4.2 Strutture dati....................................................................................................... 41 4.2.1 l’atto.............................................................................................................. 41 4.2.2 la busta.......................................................................................................... 46 4.2.3 le basi di dati................................................................................................. 49 4.3 Trasmissione busta............................................................................................. 59 4.3.1 upload al PdA................................................................................................ 59 4.3.2 inoltro GC..................................................................................................... 62 4.3.3 inoltro UG..................................................................................................... 65 4.4 Autenticazione.................................................................................................... 67 4.5 Sicurezza............................................................................................................. 73 4.5.1 Architettura.................................................................................................... 73 4.5.2 Smart card..................................................................................................... 74 Riferimenti.............................................................................................................. 79 - bibliografia............................................................................................................. 79 - leggi....................................................................................................................... 81 - risorse web............................................................................................................. 82 -1- 1. INTRODUZIONE Un ambiente professionale della nostra società che sta attualmente attraversando una progressiva ma lenta fase di rinnovo degli strumenti adoperati si trova nel contesto della giustizia italiana. Più precisamente, il processo civile. L’applicazione delle attuali tecnologie informatiche come la telematica e la crittografia stanno permettendo di cambiare il modo di operare e lavorare in molti settori. Si ha qui un passaggio dal processo civile al processo telematico. Il cambiamento non riguarda le caratteristiche intrinseche o il significato e ruolo di tale strumento giuridico a disposizione del cittadino, bensì l’innovazione riguarda gli strumenti e il sistema informativo che sta alla base dello scambio di dati e della comunicazione tra avvocati e uffici giudiziari. Questo libro è il risultato finale di un lavoro iniziato quasi un anno fa sul Processo Civile Telematico. Partendo dalle basi ho attraversato varie fasi per sviluppare un progetto e arrivare così a questo libro. Infatti, il mio lavoro, dopo uno studio di base mi ha portato all’approfondimento dell’argomento sotto i vari profili giuridici ma soprattutto informatici. Partendo da una cultura personale pressoché inesistente sul processo civile e da una brevissima esperienza di programmazione lato server ho affrontato man mano i vari scenari che hanno imposto il problema. Il libro contiene la teoria studiata e l’applicazione della teoria studiata concretizzata nella web application sviluppata. I vari strumenti usati e le tecnologie adoperate per sviluppare il progetto vengono descritte e commentate in modo soggettivo nell’ambito del sistema. I principi e i concetti che fanno parte del progetto sono a loro volta definiti e spiegati nelle varie sezioni di questo libro. E stata osservata particolare attenzione agli aspetti prettamente implementativi del progetto. Il lavoro che ha implicato questo progetto mi ha permesso di sviluppare conoscenze sul processo civile come strumento giuridico, ma soprattutto di approfondire gli studi sulle tecnologie offerte dalla piattaforma J2EE. -2- 2. ANALISI DEL PROBLEMA • 2.1 – DESCRIZIONE PROBLEMA 2.1.1 CONTESTO Il progetto Processo Telematico ha per oggetto la realizzazione di un sistema informativo integrato dell’ufficio giudiziario civile incentrato sulla creazione e gestione di un fascicolo elettronico, in grado di supportare in modo completo un processo civile telematico, fondato sul concetto di documento elettronico. L’archiettettura generale del Processo telematico viene proposta dal Ministero della Giustizia. Esso è effettivamente un progetto in cui sono coinvolti molti soggetti. Per la realizzazione di tale progetto, esso riunisce e crea una collaborazione tra figure professionali quali l’informatico e l’avvocato e chiunque altro sia direttamente o indirettamente fruitore del futuro servizio. 2.1.2 ARCHITETTURA Ciò che segue è la descrizione dell’architettura di base prevista dal Ministero della giustizia, dentro la quale trova posto il progetto sviluppato. Il progetto globale del Ministero è attualmente in fase di realizzazione. Il Processo telematico prevede il seguente scenario operativo: -3- -4- Dove: • PdA = Punto di accesso • GC = Gestore centrale • UG = Ufficio Giudiziario Nella prima fase di sperimentazione, il contesto applicativo, oggetto di analisi e realizzazione, è limitato al solo Sistema Informativo del Contenzioso Civile (SICC) presso i Tribunali Ordinari e i Soggetti Abilitati Esterni saranno limitati ai soli Avvocati. L’Avvocato può, già a partire dalla prima fase sperimentale: • redigere e firmare l’atto di parte: a tal fine si avvale di uno strumento di redazione (Redattore Atti) integrato con strumenti software per la firma, cifratura e imbustamento; • depositare l’atto di parte (ricevendo la relativa attestazione temporale e successivamente la ricevuta elettronica di avvenuta presa in carico da parte dell’Ufficio Giudiziario); • ricevere comunicazioni da parte dell’Ufficio Giudiziario nella propria “Casella di Posta Elettronica del Processo Telematico” (CPEPT); • effettuare consultazioni dei fascicoli di propria pertinenza tramite l’evoluzione del PolisWeb. L’Avvocato interagisce con il S.I.C. necessariamente per il tramite di un Punto di Accesso Esterno (PdA), presso cui è registrato come utente nel Registro Locale degli Indirizzi Elettronici (ReLIndE). Il PdA è quindi l’unico fornitore dei servizi di interfacciamento del “dominio giustizia” per gli Avvocati, autorizzato ad operare su provvedimento dell’Amministrazione. Questo in quanto offre ai propri Utenti una schermatura dei protocolli e dei formati di interfaccia previsti dal PCT per il colloquio con gli Uffici Giudiziari (UG), salvaguardando i principi di sicurezza e di riservatezza (tramite autenticazione forte) alla base della specifica problematica applicativa. -5- Si precisa che il Punto di accesso è un’entità esterna al S.I.C. (Sistema Informativo Civile) e non è pertanto fornito dal Ministero della Giustizia, che renderà invece pubbliche (nelle Regole Tecniche) le relative specifiche. Pertanto il PdA non è oggetto di fornitura da parte del RTI: il Consiglio dell’Ordine presso ogni sede pilota indicherà la disponibilità di un PdA per la fase di sperimentazione; in caso non vi sia questa disponibilità, il RTI renderà comunque disponibile una versione prototipale in modo da non bloccare la sperimentazione. Presso il PdA è attivo un Registro Locale degli Indirizzi Elettronici (ReLIndE), che viene acceduto in fase di autenticazione, in fase di prelievo o consultazione dei messaggi provenienti dal SIC e in fase di deposito degli atti, per eseguire, se in possesso dell’albo elettronico del Consiglio dell’Ordine di appartenenza dell’Avvocato, la certificazione dello status del professionista. Per quanto attiene alla ricezione di comunicazioni di cancelleria, il PdA fornirà all’avvocato una casella di posta elettronica certificata in aderenza alle specifiche dettate dal Centro Tecnico della RUPA, opportunamente adattate per il Processo Telematico. Il Gestore Centrale (GC) svolge servizi di cooperazione allo scambio di dati che, pur non entrando nel merito delle richieste ricevute, consentono di assicurare la correttezza della composizione delle buste prodotte e di tracciare tutti i flussi applicativi, verificando il completamento dei relativi cicli logici. Provvede cioè ad indirizzare le richieste inoltrate dai PdA, e originate dagli Avvocati, verso gli UG destinatari e viceversa a smistare ai relativi PdA le risposte o le comunicazioni provenienti dagli UG, sopperendo, grazie ad una architettura logica e fisica particolarmente robusta, alla eventuale indisponibilità temporanea dei relativi sistemi di colloquio. Il GC assolve alla funzione di attestare temporalmente l’evento di ricezione di una richiesta di deposito di un atto, fornendo in un messaggio di risposta indirizzato alla CPEPT dell’Avvocato: questa è pertanto da considerarsi la data e l’ora di deposito dell’atto. Il GC esegue inoltre, in fase di deposito di un atto, la certificazione sostitutiva del difensore, nei casi in cui il PdA mittente non sia tenuto, o non sia stato delegato, alla -6- gestione dell’albo dell’Ordine professionale di appartenenza dell’Avvocato mittente. A tal fine è previsto che ciascun Consiglio dell’Ordine inoltri al GC l’elenco aggiornato dei propri iscritti all’albo. L’entità rappresentata come Ufficio Giudiziario coincide tecnicamente con il cosiddetto Gestore Locale, ossia l’insieme di tutti i servizi applicativi del Processo Telematico esposti sia verso il Gestore Centrale sia verso i soggetti abilitati ed i sistemi interni. In particolare all’interno di questa componente vengono realizzati tutti i sottosistemi per: • la gestione delle fasi di controllo e accettazione dell’atto di parte; • l’invio di eventuali eccezioni al mittente; • la gestione dei diritti di visibilità sui dati; • l’invio dei biglietti di cancelleria. Il Gestore Locale gestisce, infine, l’interfacciamento tra il Repository Documentale (la base dati documentale, contenente tra l’altro il fascicolo informatico) e il SICC (gestione registri del Contenzioso Civile) per tutto ciò che concerne le operazioni a disposizione dei soggetti abilitati interni. L’operatore di cancelleria e il Magistrato si interfacciano alle funzionalità del Processo Telematico attraverso l’applicativo SICC. Le evoluzioni del SICC permetteranno infatti l’accesso al fascicolo informatico non più solo come storico degli eventi, ma anche nel merito del contenuto degli atti di parte. Il Cancelliere in particolare, potrà intervenire, attraverso componenti specifiche previste dalle evoluzioni del SICC, per gestire le eventuali situazioni di eccezione che si possono verificare in fase di ricezione, controllo e accettazione degli atti di parte. -7- • 2.2 – FLUSSO INFORMATIVO Il presente paragrafo descrive i principali flussi del sistema, rappresentando le interazioni tra le principali componenti di ciascun sottosistema, seguendo l’iter logico della redazione e del deposito di un atto. Tengo a sottolineare che questa è la struttura e il workflow secondo quanto previsto dal Ministero per l’architettura generale, Il flusso informativo del progettino realizzato viene descritto nel capitolo quattro dedicato all’implementazione. I flussi del Processo Telematico possono essere classificati per tipologia in invii documentali e consultazioni. Dal punto di vista applicativo, la loro principale differenza è legata all’utilizzo di un differente protocollo di trasporto nella tratta tra PdA e GC. In particolare, per gli invii documentali, è previsto l’utilizzo di un meccanismo asincrono, basato sul protocollo SMTP, mentre per le consultazioni, si prevede l’utilizzo di soli meccanismi sincroni, basati su HTTPS. Gli avvocati che sono gli attori principali nella generazione del flusso di dati devono essere muniti di smart card contenente: • il certificato per la firma elettronica, -8- • il certificato di autenticazione, per la connessione al Punto di Accesso, entrambi rilasciati da un certificatore accreditato, in modo da garantire che quelle determinate credenziali siano riferite ad una persona fisica la cui identità è garantita dall’insieme dei processi di identificazione attuati dal certificatore stesso. Allo scopo di mantenere distinte le due funzioni di firma e di autenticazione (quest’ultima in sostanza necessaria per accedere al Punto di Accesso ed effettuare operazioni di deposito e consultazione), si è scelto di imporre che ciascun certificato abbia un PIN di sblocco distinto; pertanto, in pratica, le opzioni sono due: • utilizzo di due diverse smart card (una per la firma e l’altra per l’autenticazione); • unica smart card purché dotata di due diversi PIN di accesso ai due certificati di firma e autenticazione. È opportuno far presente che al momento sul mercato non è ancora disponibile la seconda possibilità, anche se qualche produttore di smart-card dichiara che la stanno sperimentando. Dal punto di vista pratico, dunque, gli Avvocati opereranno su client dotati di dispositivo di lettura della smart card e, nel momento di connessione al PdA, per il deposito o la consultazione, inseriranno il proprio PIN (relativo al certificato di autenticazione) e presenteranno le proprie credenziali con cui verranno autenticati dal servizio, creando così un canale sicuro basato su protocollo SSLv3. Gli UG saranno inoltre dotati di chiave e certificati di cifratura1 per consentire che gli atti depositati vengano cifrati sul client dell’avvocato, con il certificato pubblico dell’UG destinatario, e che solo quest’ultimo possa procedere a decifrare e leggere gli atti stessi. I PdA e il GC sono attestati su rete pubblica (SPC) e specificatamente su Interdominio RUPA; pertanto l’interazione tra le due entità, tanto in caso di utilizzo del protocollo sincrono (per le consultazioni dei procedimenti giudiziari) che asincrono (per gli di invii documentali), fruisce delle garanzie di sicurezza offerta da tale rete. La tratta GC - UG sfrutta la Rete Unitaria della Giustizia (RUG). In entrambi i casi si ipotizza comunque di instaurare sui protocolli sincroni una connessione sicura (SSLv3) mediante mutua autenticazione dei server. -9- • 2.3 – CASI D’USO I diagrammi illustrati in questa sezione definiscono alcune dei contesti applicativi del sistema. I diagrammi sono basati sul linguaggio standard UML (Unified Modeling Language), che è una notazione per analizzare, specificare, visualizzare e documentare lo sviluppo delle fasi di un progetto sviluppato segendo il paradigma ad oggetti. In particolare i diagrammi che seguono sono relativi all’architettura di base proposta dal Ministero della Giustizia e sono estratti da documenti già esistenti. La figura che segue è un diagramma di sequenza che evidenzia le varie fasi di creazione della busta MIME, che contiene l’atto che deve essere trasmesso attraverso il sistema. - 10 - - 11 - La figura successiva è un diagramma di sequenza che illustra le procedure che vengono eseguite durante l’inoltro della busta dal Gestore Centrale all’Ufficio Giudiziario. - 12 - 3. CONTESTO APPLICATIVO • 3.1 - TECNOLOGIE 3.1.1 J2EE La piattaforma di riferimento per la progettazione e lo sviluppo dell’applicazione è quella offerta dalla SUN, J2EE (Java 2 Enterprise Edition). J2EE non è un framework, bensi un insieme di specifiche che definiscono un’intera architettura standard per la progettazione, l’implementazione, il deploy e l’esecuzione di applicazioni distribuite lato server. L’implementazione di tali specifiche viene fatta dai vari produttori di piattaforme J2EE. L’architettura generale della programmazione lato server definita nelle specifiche si compone di vari elementi strutturali definiti sottostanti ed illustrati nella figura seguente. Figura 3.1 Archittetura J2EE - 13 - Un application server è un software che, come dice il nome stesso, fornisce l’uso di applicazioni. Più correttamente è un software atto ad ospitare e quindi ad offrire un ambiente di esecuzione per programmi sviluppati per il web. In effetti un application server permette l’installazione (deploy) e la gestione al suo interno di applicazioni di terzi. Esso è solito essere un back-end per un web server, dal quale vengono inoltrate le richieste dei client per l’esecuzione di un particolare programma contenuto in un application server. In quanto un ambiente di runtime per web applications offre una varietà di servizi generali di cui possono fare uso le applicazioni ospitate come la gestione sicurezza (es: autenticazione), connessioni a database, messaging asincrono, servizio di naming, gestione transazione, ecc… Mentre per il deployer dell’application, offre tools di deployment, di configurazione e monitoraggio dell’applicazione installata. Un container è un ambiente d’esecuzione standardizzato per specifici tipi di componenti come le servlet o gli ejb. Specificatamente si parla di web container per quelli contenenti servlet e jsp, mentre si parla di ejb container per quelli che ospitano gli ejb. Uno o più container solitamente si trovano all’interno degli application server. Il container fornisce vari servizi direttamente ai componenti che vengono eseguiti e gestiti al suo interno come la gestione del ciclo di vita, sicurezza e multithreading. I vari container sono standard, descritti quindi nelle specifiche. Un componente è del codice costruito, strutturato e compilato dallo sviluppatore in base ad un modello standard definito da una specifica (es: ejb). Esso segue ed applica i principi della programmazione ad oggetti, in effetti un container è costruito per funzionare ed eseguire oggetti appartenenti solo ad una super classe, quindi tutti i componenti per quel specifico container vengono costruiti seguendo uno specifico modello (da qui il modello a componenti). Ogni oggetto (componente) nel container deriva dalla super classe per cui è stato realizzato il container. I vari modelli di componenti sono definiti dalle specifiche. - 14 - Un modulo è un raggruppamento di componenti e altre risorse destinati allo stesso container. Questo raggruppamento rappresenta un’applicazione o parte di essa. Esso, concretamente, è un archivio compresso (jar) che racchiude al suo interno oggetti compilati (i componenti), risorse (pagine html, immagini,ecc..) e un descrittore di deployment. Vi sono definiti tre tipi di moduli nella specifica J2EE, questi sono: modulo web (.war), modulo ejb (.jar) e modulo client (.jar). Grazie all’atomicità che si ha con il modulo, si può facilmente trasportarlo, una volta creato, dall’ambiente di sviluppo all’application server. Ogni modulo può essere usato come applicazione enterprise stand alone oppure essere aggregato con altri moduli per formare un applicazione enterprise assemblata da più moduli. Una applicazione enterprise è un applicazione appunto formata da uno o più moduli configurati. Essa,a sua volta, ha un suo proprio descrittore di deployment. L’applicazione enterprise quindi è un altro archivio compresso (.ear) che ingloba i vari moduli costituenti ed il suo descrittore. La figura 3.2 illustra la struttura di un’applicazione enterprise J2EE. Un descrittore di deployment (DD) non è niente altro che un file xml. Il suo contenuto rappresenta la configurazione per l’installazione in ambiente di runtime del modulo o dell’applicazione enterprise cui appartiene. Il deployment descriptor, configurandolo opportunamente, permette di definire il comportamento dell’applicazione o modulo in fase di runtime. La configurazione riguarda vari aspetti del deployment come la struttura dell’applicazione, la sicurezza, ecc.. Ad esempio per quanto riguarda la sicurezza è possibile definire il tipo di autenticazione richiesta oppure definire quali gruppi di utenti può accedere alle varie parti dell’applicazioni,ecc.. Le specifiche definiscono la struttura dei deployment descriptor standard obbligatori con i relativi dtd. Essi sono i seguenti: application.xml per l’applicazione enterprise, web.xml per un modulo web e ejbjar.xml per un modulo ejb. - 15 - Figura 3.2 struttura di un’applicazione J2EE J2EE delinea anche alcuni ruoli che si trovano coinvolti nell’intera fase di progettazione, sviluppo e messa in produzione di un’applicazione. Essi sono i seguenti: Application Component Provider, Application Assembler, Deployer, Server Provider, Container Provider, System Administrator. E da osservare comunque che questi ruoli non vengono per forza tutti assegnati a persone distinte ma alcuni ruoli, specie nelle piccole aziende di sviluppo, possono essere assegnati ad un’unica persona. Di seguito viene data una breve descrizione del compito di ciascuna di queste figure. L’application component provider produce il codice di base all’interno di un’applicazione J2EE. Esso progetta e scrive il codice dei componenti riusabili all’interno di diverse applicazioni, solitamente si tratta di uno sviluppatore di EJB e altri componenti lato server. L’application Assembler ha il compito di mettere insieme dei componenti ottenendo così un’applicazione J2EE completa. Egli utilizza dei descrittore dichiarativi per costruire l’applicazione (i deployment descriptor). Di solito è un - 16 - esperto in un determinato dominio applicativo, in maniera tale da fornire soluzioni per problemi specifici. Il deployer è colui che si occupa dell’installazione dell’applicazione in uno specifico ambiente operativo (application server J2EE) del quale è esperto. Il J2EE Server/Container Provider è il/i venditore/i del database, dell’application server e del web server. Essi implementano un prodotto J2EE (le specifiche) fornendo i container dei componenti, le API della piattaforma J2EE e eventuali interfaccie non definite dalla specifica J2EE. Inoltre fornisce appositi strumenti per il deployment e la gestione dell’applicazione. Il System Administrator è il responsabile della configurazione e amministrazione dell’infrastruttura di rete e di calcolo dell’azienda proprietaria. Egli supervisiona l’esecuzione delle applicazioni controllandone il comportamento usando strumenti di supporto. Lo sviluppo di applicazioni enterprise con la piattaforma J2EE usa il linguaggio Java come linguaggio di programmazione. Questo permette di sfruttare al massimo le caratteristiche proprie del linguaggio orientato ad oggetti per sviluppare applicazioni estendibili e con codice facilmente riusabile. Java è indipendente dalla macchina su cui viene eseguito, questo perché il codice java viene compilato (bytecode) per una virtual machine (processore virtuale) che è disponibile per la quasi totalità dei sistemi operativi. Tutto ciò ha permesso che si sviluppassero application server uniformi sulle varie architetture di calcolatori il cui sistema operativo avesse una virtual machine adeguata per Java. Il risultato è il panorama di oggi, cioè l’esistenza di application server J2EE su Linux, come su Solaris, come su Windows, ecc.. . Attenzione però, ogni application server non implementa per forza l’intera specifica J2EE, questo lascia avvolte dei vuoti che fanno la differenza tra un application server e l’altro. Un altro punto a fare la differenza è l’implementazione di servizi non definiti nelle specifiche (estensioni proprietarie oppure di standard di - 17 - pubblico dominio) ma non per questo non utili. Quest’ultimo fattore è comunque compromettente al fine della trasportabilità di un applicazione enterprise che ne faccia uso. 3.1.2 SICUREZZA La sicurezza ha svolto un ruolo fondamentale nello sviluppo delle soluzioni al problema. Infatti gran parte del lavoro è stato dedicato alla sicurezza nel contesto applicativo. In questo luogo la sicurezza non viene affrontata tanto nella sua componente fisica come architettura dell’intero sistema Processo Telematico, bensì nelle caratteristiche di alcuni elementi prettamente software oggetto di sviluppo e gestione. Infatti la sicurezza nell’ambito del mio progetto ha riguardato sia l’utilizzo, da parte dell’utente, del sistema, quindi una sicurezza prettamente di interfaccia, sia quella relativa alla protezione dei dati all’interno dei vari componenti del sistema. Per quanto riguarda la sicurezza che rappresenta la firma digitale ho preferito dedicare un paragrafo intero più avanti nel libro. In queste righe vengono affrontati in particolare modo i concetti di sicurezza in una web application e vengono illustrati quale è la logica di gestione della sicurezza che le specifiche J2EE impongono. La piattaforma J2EE definisce meccanismi di sicurezza per i vari oggetti che la compongono. Si parla di sicurezza in particolare riferita a due aspetti fondamentali della programmazione web. Si tratta del controllo degli accessi alle applicazioni e risorse varie, e della protezione dei dati durante il loro trasporto. Questi due aspetti globalmente possono essere entrambi affrontati sotto due ottiche: programmatico e dichiarativo. Programmatico vuol dire che la sicurezza viene gestita direttamente dallo sviluppatore a livello di codice ed è parte integrante stessa del codice dell’applicazione. Dichiarativa vuol dire che la politica di sicurezza adottata viene realizzata al di fuori del codice, più esattamente nei deployment descriptor dove - 18 - vengono specificati i requisiti di sicurezza che devono avere i componenti per essere eseguiti. Nella filosofia dichiarativa i requisiti dichiarati nel deployment descriptor devono essere soddisfatti dall’application server. Le due tecniche presentano vantaggi e svantaggi. Il programmatico offre maggior flessibilità di implementazione dei meccanismi di sicurezza contro una più elevata complessità per il programmatore nello sviluppo dell’applicazione che deve tener conto di questo aspetto dato che è lui stesso a dover codificare gli aspetti di sicurezza dell’applicazione. Il dichiarativo, al contrario presenta una semplificazione per lo sviluppatore nella scrittura del codice in quanto egli non deve preoccuparsi dell’aspetto sicurezza che viene definito configurando appunto i file esterni. In ogni caso il dichiarativo si affida ai meccanismi di sicurezza implementati sul application server, quindi la responsabilità della sicurezza viene trasferita al deployer. Le due filosofie comunque vengono applicate ai componenti in modo leggermente diverso in base proprio al tipo di componente trattato. Questo perché ogni modello di componente ha un ciclo di vita ed una logica di base diversa rispetto ad un altro (es:una servlet e un ejb). Una cosa molto importante da sottolineare, nella filosofia dichiarativa, è che i servizi di sicurezza e protezione vengono si implementati e offerti dai vari application server in modo più vario e diversificato a seconda del produttore, ma hanno comunque un interfaccia di accesso standard descritta dalle specifiche. Questo permette a qualsiasi applicazione J2EE di usufruire dei servizi standard di un application server in modo del tutto trasparente alla loro implementazione e quindi facilita il porting dell’applicazione tra due application server J2EE compliant. La web application realizzata è basata su servlet e pagine JSP, quindi qui di seguito vengono descritti le possibilità esistenti per garantire un opportuno livello di sicurezza a questi componenti seguendo la filosofica dichiarativa. - 19 - I domini di sicurezza si basano su tre direttive: l'autenticazione dell'utente remoto, la cifratura dei dati e l'autorizzazione dell’utente all'accesso ai vari servizi. AUTENTICAZIONE La specifica SUN prevede, per i servizi a disposizione sull'Application Server, di poter impostare diversi criteri di sicurezza. Tali criteri sono impostabili nei vari deployment descriptor che accompagnano le Web Applications o gli Enterprise Java Beans, oppure in apposite Access Control Lists (ACL) che regolamentano l'accesso agli altri servizi (ad esempio: uso di un datasource, accesso in lettura o modifica all'albero JNDI...). Le modalità a disposizione degli application servers per accertare l'autenticità dell'utente collegato sono definite nella specifica e si riassumono nelle seguenti 4 parole chiavi definite nel Document Type Descriptor (DTD) della generica Web Application: · BASIC Il server invia una richiesta di autenticazione che viene interpretata dal Browser. Quest'ultimo presenta all'utente una finestra di popup nella quale inserire username e password che vengono spediti al server e quest'ultimo può verficarne la rispondenza con la coppia username/password definita nel proprio registro utenti. · DIGEST Questa modalità prevede l'invio della coppia username/password successivamente ad un procedimento di "Hashing". Questo procedimento consiste nell'applicare un algoritmo crittografico "one-way" che renda virtualmente impossibile la decodifica. In questa modalità, simile alla BASIC, si ha il vantaggio di proteggere l'invio della password. - 20 - · FORM In questo caso il server invia una pagina HTML configurabile contenente una Form Web dove vengono richieste username e password, la quale va a richiamare, una volta inviate le informazioni, una servlet di autenticazione fornita dall’application server e dipendente dal registro utenti configurato sul application server. Questo metodo è usato quando si vuole presentare all'utente una finestra curata graficamente realizzata in HTML piuttosto della banale finestrella popup del browser prevista dalla modalità BASIC · CLIENT-CERT In questo caso il server richiede al Browser client l'invio di un certificato digitale che sarà sottoposto ad opportuno riconoscimento. Il certificato digitale è sostanzialmente un documento contente la chiave pubblica del client ed i suoi dati di identificazione (nome,cognome,codice fiscale,ecc..). Esso viene firmato digitalmente da una Certification Authority riconosciuta e ritenuta fidata dall’application server cosi essa garantisce che la chiave pubblica corrisponde ai dati del proprietario dichiarato sul certificato. La certification Authority è un ente riconosciuto da entrambe le parti come fonte autorevole di validazione della chiave pubblica; una sorta di "notaio" che certifica (da cui il nome certificato) la validità della chiave pubblica. CIFRATURA Tramite il parametro "transport-guarantee" è possibile impostare il livello di sicurezza desiderato per la comunicazione tra il client e il server. I valori ammessi sono i seguenti: - 21 - · NONE: la comunicazione avviene in chiaro · INTEGRAL: viene garantita la non manomissione della comunicazione · CONFIDENTIAL: viene garantita la riservatezza del dato mediante cifratura In molti casi, un valore di INTEGRAL o CONFIDENTIAL implica una Trasmissione su Secure Socket Layer (SSL). Richiedendo un meccanismo di cifratura, a fronte dei benefici di sicurezza, si introduce un overhead (sovraccarico) necessario per l'applicazione dell'algoritmo di cifratura. Questo si traduce con un leggero decadimento delle prestazioni di comunicazione. AUTORIZZAZIONI Nelle Web Applications, i servizi, che siano pagine statiche o dinamiche, possono essere soggetti ad autorizzazione di accesso su base dichiarativa. Le regole di accesso vengono definite nel deployment descriptor del modulo che accompagna la Web Application, come definito dalla specifica Servlet e JSP della SUN. In tale file è possibile specificare quali "ruoli", possono accedere alla singola URL (indirizzo univoco di una risorsa). E' anche possibile utilizzare i caratteri jolly per definire criteri per gruppi di risorse. Prima di entrare nel dettaglio delle impostazioni di sicurezza relative all'autorizzazione è opportuno chiarire il concetto di "ruolo". Nella piattaforma J2EE sono identificati due categorie di servizi principali: JPS/Servlets e EJB. Tali servizi, sviluppati spesso da teams diversi e comunque in un arco temporale significativamente ampio, prevedono spesso la possibilità di accesso da parte di diverse categorie di utenti che prendono il nome di ruoli. I servizi di tipo JSP/Servlet o i vari metodi degli EJB possono quindi essere filtrati - 22 - dal sistema di gestione della sicurezza che bloccherebbe l'accesso da parte di utenti non appartenenti ai ruoli ammessi nel deployment descriptor generando una Security Exception. Oltre ad aver definito i ruoli autorizzati è però necessario configurare una equivalenza (mapping) dei ruoli con i relativi utenti o gruppi di utenti definiti (chiamati "principals") nella piattaforma di accoglienza del componente(gli utenti del application server). Questo "mapping" avviene nel "custom deployment descriptor", ovvero un file XML peculiare per l'ambiente J2EE scelto per il "deployment". La struttura di questo file non è definita secondo uno standard nelle specifiche e perciò ogni application server ne definisce uno. Il discorso si amplia nel caso degli Enterprise Java Beans che, essendo dei moduli software richiamabili remotamente, espongono i diversi metodi necessari all'implementazione della business logic a differenza delle servlet o delle JSP che devono unicamente gestire una HTTP Request. Per ciascuno di questi metodi, è pessibile definere, sempre nell'apposito deployment descriptor, che in questo caso è il file "META-INF/ejb-jar.xml", l'elenco dei "ruoli" che possono usarli. I servizi dell'application server che non sono JSP, servlets e EJB, sono invece generalmente resi disponibili previo controllo da parte dell'application server stesso tramite delle Access Control Lists (ACL). Si tratta di liste di utenti o gruppi di utenti che dispongono di determinati permessi sulle risorse detti "privilegi". Riassumendo per capire i principi di sicurezza in un application server nei confronti di una web application bisogna aver ben capito i concetti che vengono usati nel deployment descriptor dell’applicazione stessa. Essi sono elencati di seguita con una breve descrizione. - 23 - Web resource: componente di un modulo (es: pagina HTML, pagina JSP, immagine GIF, ecc..) Web resource collection: insieme di web resource identificate in base ad uno o più URL pattern (es: /* oppure /index.html) ed uno o più http-method, tipi di accesso (es: GET, PUT, POST, ecc..) che devono essere protetti. Security-role: ruolo definito nel deployment descriptor che rappresenta un insieme di utenti che hanno determinati poteri d’accesso in comune nella web application Security-constraint: determina quali security-role possono accedere ad una determinata web resource collection. Viene specificato nel deployment descriptor del modulo User-data-constraint: determina come devono essere accedute le web resources legate ad un security-constraint: confidenzialità, integrità, nessuna protezione (le prime due indicano che sarà usato SSL o altro protocollo sicuro offerto dall’application server per la trasmissione delle risorse) Figura 3.3 utenti e sicurezza in J2EE - 24 - SSL Il protocollo usato per rendere sicuri i canali di comunicazione nell’ambito dell’intero progetto è l’SSL v3 (Secure Socket Layer versione 3). Mi sembra doveroso scrivere ciò che è stato appreso su questo protocollo al fine di rendere completa la descrizione delle tecnologie usate nel progetto. La descrizione si riferisce alle specifiche della versione 3.0 del SSL di Netscape Communication Corporation (Società ideatrice del protocollo). E un protocollo che garantisce la privacy delle comunicazioni su Internet, esso permette infatti alle applicazioni client/server di comunicare in modo da prevenire le intrusioni, le manomissioni e le falsificazioni dei messaggi. Il protocollo SSL provvede alla sicurezza del collegamento garantendo tre funzionalità fondamentali: • Privatezza del collegamento. La crittografia è usata dopo un handshake iniziale per definire una chiave segreta. Per crittografare i dati è usata la crittografia simmetrica (vedi paragrafo sulla Firma digitale). • Autenticazione. L'identità nelle connessioni può essere autenticata usando la crittografia asimmetrica, o a chiave pubblica (per es. RSA, DSS, etc.). Così i clients sono sicuri di comunicare con il corretto server, prevenendo ogni interposizione. E' possibile la certificazione sia del server che del client. • Affidabilità. Il livello di trasporto include un check dell'integrità del messaggio basato su un apposito MAC (Message Authentication Code) che utilizza funzioni hash sicure (es: SHA, MD5, etc.). In tal modo si verifica che i dati spediti tra client e server non siano stati alterati durante la trasmissione. SSL è un protocollo aperto e non proprietario, La versione 3 del protocollo è stato esaminato pubblicamente e pubblicato come Internet draft document. Successivamente, quando è stato raggiunto un ampio consenso per standardizzare il protocollo (come accade in Internet prima nasce lo "standard de facto" e poi quello effettivo), è stato formato nell’IETF, il TLS working group, che studia standard - 25 - comuni. La prima versione del TLS (1.0) viene vista essenzialmente come una SSLv3.1, ed è veramente vicino e quindi compatibile alla precedente SSLv3. Lo scopo primario del SSL Protocol è fornire riserbo ed affidabilità alle comunicazioni. Il protocollo è composto da due strati (vedi figura 3.4): a livello più basso, interfacciato su di un protocollo di trasporto affidabile come il TCP, c'è il protocollo SSL Record. Questo è usato per l'incapsulamento dei vari protocolli di livello superiore. Sul protocollo SSL Record si interfaccia l'SSL Handshake Protocol che permette al server ed al client di autenticarsi a vicenda e di negoziare una cipherSuite (insieme di algoritmi per rendere la comunicazione sicura composta da: key exchange, bulk encryption e hash) prima che il livello applicazione trasmetta o riceva il suo primo byte. Un vantaggio del SSL è la sua indipendenza dal protocollo di applicazione: un protocollo di livello più alto, come HTTP oppure LDAP può interfacciarsi sul protocollo SSL in modo trasparente. Figura 3.4 SSL è un protocollo a due strati Per sfruttare la protezione offerta da SSL è necessario che un sito web disponga di un server in cui sia integrata la tecnologia SSL. Anche il client deve supportare SSL per poter stabilire una connessione sicura con un server SSL. Tutti i moderni browser supportano SSLv3/TLSv1. Con questi mezzi è possibile usare, per esempio, HTTPS, cioè HTTP con SSL, e scambiare informazioni con un client per mezzo di HTTPS. Poichè HTTP+SSL e http sono differenti protocolli ed usano - 26 - porte diverse, lo stesso sistema server può far girare contemporaneamente sia il server HTTP+SSL che quello http. Ciò significa che un server può offrire alcune informazioni a tutti gli utenti senza sicurezza, ed altre solo in modo sicuro: ad esempio un catalogo può essere "non sicuro" mentre gli ordini ed i pagamenti devono essere protetti. Il browser può essere qualunque, purché supporti il protocollo SSL e, quindi, il nuovo metodo di accesso URL HTTPS per connessioni con un server che usa SSL. Https è il protocollo che si ottiene interfacciando http su SSL, si dovrà usare "https://" per gli URL HTTP con SSL, mentre si continuerà adusare "http://" per gli URL senza SSL. La porta di default per "https" è la numero 443, come stabilito dalla Internet Assigned Numbers Authority. 3.1.3 FIRMA DIGITALE In un sistema come quello oggetto di questo studio è fondamentale l’autenticità e l’integrità dei dati che vengono trasmessi. In altre parole è necessario essere certi dell’autore dei documenti e garantire che essi non vengano alterati per nessun motivo pena la non validità del documento. Queste due esigenze vengono soddisfatte dalla cosiddetta firma digitale. Prima di entrare nel dettaglio di come essa viene usata nell’ambito del progetto, vengono discussi i concetti generali su i quali essa si basa e il suo funzionamento, questo per comprendere meglio perché essa può essere ritenuta affidabile. La firma digitale è basata sui principi della crittografia, più precisamente della crittografia a chiave pubblica. CRITTOGRAFIA La crittografia è una tecnica attraverso la quale si rendono illeggibili i dati originali, permettendo al destinatario di recuperarli attraverso un procedimento noto solo a - 27 - lui. Si distinguono due forme fondamentali: la crittografia simmetrica, ovvero, a chiave segreta, e quella asimmetrica, nota meglio come crittografia a chiave pubblica. La crittografia simmetrica è quella più semplice da comprendere, e si basa su un algoritmo che modifica i dati in base a una chiave (di solito una stringa di qualche tipo), che permette il ripristino dei dati originali soltanto conoscendo la stessa chiave usata per la cifratura. Per utilizzare una cifratura simmetrica, due persone si devono accordare sull'algoritmo da utilizzare e sulla chiave. La forza, o la debolezza di questo sistema, si basa sulla difficoltà o meno che ci può essere nell'indovinare la chiave, tenendo conto anche della possibilità elaborative di cui può disporre chi intende spiare la comunicazione. Figura 3.4 crittografia simmetrica La crittografia asimmetrica o a chiave pubblica è un metodo molto più complesso, che però ha il vantaggio di essere più pratico quando riguarda la comunicazione con molte persone. Il principio di funzionamento si basa sul fatto che esistono due chiavi complementari, e un algoritmo in grado di cifrare con una chiave e di decifrare utilizzando l'altra. In pratica, la cifratura avviene a senso unico attraverso la chiave di cui dispone il mittente di un messaggio, mentre questo può essere decifrato solo con l'altra che possiede solo il destinatario. Le due chiavi vengono chiamate chiave pubblica e chiave privata, attribuendogli implicitamente un ruolo specifico. In pratica, chi vuole mettere in condizioni i propri interlocutori di inviare dei messaggi, o altri dati cifrati, che poi possano essere decifrati solo da lui o da lei, dovrà costruire una propria coppia di chiavi, e dovrà distribuire la chiave pubblica. Chi vuole inviare informazioni cifrate a questa persona, può usare la chiave - 28 - pubblica diffusa dal destinatario, e solo chi ha la chiave complementare, ovvero la chiave privata, può decifrarle. In questa situazione, evidentemente, la chiave privata deve rimanere segreta a tutti, tranne che al suo proprietario; se venisse trafugata permetterebbe di decifrare i messaggi che potrebbero essere intercettati. Figura 3.4 crittografia asimmetrica o a chiave pubblica La cifratura può anche essere ibrida, utilizzando in pratica entrambe le tecniche. Per attuarla, di solito si utilizza prima la cifratura simmetrica, utilizzando una chiave determinata in modo casuale ogni volta, e per questo definita chiave di sessione. Questa chiave viene allegata al messaggio, o ai dati trasmessi, e viene cifrata a sua volta (eventualmente assieme agli stessi dati già cifrati) attraverso il sistema della chiave pubblica, ovvero quello che si basa sulla coppia di chiavi complementari. Il destinatario di questi dati dovrà fare il percorso inverso, decifrando la chiave di sessione con la sua chiave privata, e quindi decifrando il documento utilizzando la chiave di sessione che ha ottenuto dopo il primo passaggio. FUNZIONAMENTO FIRMA A differenza della firma “tradizionale” la firma digitale è diversa per ogni documento. Essa ha lo scopo di certificare l'autenticità e l’integrità dei dati. Per ottenere questo risultato occorre garantire, in qualche modo, che l'origine di questi sia autentica, e che i dati non siano stati alterati dopo l’apposizione della firma. Qui vengono descritti i passi per firmare un documento. Essi sono due: • calcolo di un “riassunto” o “digest” del documento (hash) - 29 - • cifratura dell’hash con chiave privata (firma) Per dimostrare che un documento elettronico non è stato alterato, si utilizza la tecnica del codice di controllo (digest), che in pratica è un numero (o una stringa), che viene calcolata in base al contenuto del documento stesso. Gli algoritmi che effettuano questo calcolo vengono anche chiamati “funzioni di hash”. L'algoritmo che genera questo codice di controllo è tanto più buono quanto è minore la probabilità che due documenti diversi generino lo stesso codice di controllo. Questo valore è una sorta di “riassunto” matematico del documento elettronico originale, e può permettere al destinatario di verificare che il documento è giunto intatto, attraverso il ricalcolo del codice di controllo che deve risultare identico. La firma elettronica richiede qualcosa in più: si deve poter dimostrare che l'origine è autentica, e che il codice di controllo non è stato alterato. Evidentemente, per non creare un circolo vizioso, serve qualcosa in più. Per questo si utilizza di solito la cifratura del codice di controllo assieme ai dati, oppure solo del codice di controllo, lasciando i dati in chiaro. Per la precisione, si utilizza la crittografia a chiave pubblica, chi esegue la firma (cifratura del digest), deve usare la propria chiave privata (quella segreta), in maniera tale che tutti gli altri possano decifrare il digest unicamente attraverso la sua chiave pubblica. Di solito la chiave privata viene usata solo per cifrare il digest, soprattutto perché la crittografia a chiave pubblica è abbastanza pesante computazionalmente. Per cifrare, eventualmente, anche il messaggio e garantire così anche la riservatezza dei dati, si usa la crittografia simmetrica, la cui chiave usata viene comunicata al destinatario cifrandola con la chiave pubblica di quest’ultimo. La figura 3.5 descrive la firma di un documento. - 30 - Figura 3.5 funzionamento firma digitale applicata ad un documento trasmesso in chiaro Naturalmente, una firma elettronica di questo tipo può essere verificata solo se si può essere certi che la chiave pubblica attribuita al mittente che ha firmato il documento, appartenga effettivamente a quella persona. In altre parole, un impostore potrebbe diffondere una chiave pubblica corrispondente a una chiave privata di sua proprietà, indicandola come la chiave del signor Tizio, e così potrebbe inviare documenti falsi a nome di questo signor Tizio, che in realtà non ne è il responsabile. Per risolvere questo problema sono state create le PKI (Public Key Infrastructure). Prima di parlare di PKI è bene definire l’oggetto che associa e contiene le informazioni sul mittente (autore della firma) e la sua chiave pubblica e permette di pubblicare quest’ultima in un formato standard. Stiamo parlando del certificato digitale. Il certificato è il mezzo di cui dispone il destinatario per avere la garanzia sull’identità del suo interlocutore e per venire in possesso della chiave pubblica di - 31 - quest’ultimo. Concretamente esso è un file in uno dei formati standard (es: X.509) che contiene la chiave pubblica, informazioni sul proprietario (soggetto) della relativa chiave privata, informazioni sull’intervallo di validità del certificato, informazioni sull’autorità emittente e firma dell’autorità emittente, oltre ad altri dati. Il certificato in formato X.509, contiene in uno standard riconosciuto, una serie di campi per dati obbligatori ai quali possono essere aggiunte ulteriori estensioni per riportare informazioni aggiuntive. L’autorità emittente, anche chiamata Certification Authority (CA) è il garante per l’associazione chiave pubblicasoggetto del certificato. In altre parole prova (certifica) che il soggetto dichiarato nella certificato digitale è il proprietario della chiave pubblica dichiarata nel certificato, e quindi della relativa chiave privata in suo possesso usata per firmare i documenti. In termini pratici il certificato del soggetto viene firmato con la chiave privata dell’autorità di certificazione. Così per un eventuale persona che vuole verificare la validità e autenticità di una firma, gli è sufficiente verificare l’autorità emittente del certificato legato alla firma e in base alla fiducia che egli ripone in questa autorità considerare il certificato, e quindi anche la firma, attendibile oppure no. PKI (Publica Key Infrastructure) Il meccanismo di certificazione appena descritto è alla base di una infrastruttura a chiave pubblica (PKI). Quindi lo scopo di una PKI è di garantire l’associazione tra chiave pubblica e soggetto dichiarati nel certificato digitale. Una PKI è un insieme di apparati, regole di sicurezza, procedure operative e servizi che rendono possibile la gestione affidabile ed efficiente di applicazioni per la firma digitale, l’autenticazione, la protezione della riservatezza e la marcatura temporale dei documenti informatici. Come dice il nome stesso, si basa sulla crittografia asimmetrica a chiave pubblica e svolge le seguenti funzioni principali. • generazione e distribuzione di coppie di chiavi digitali; • verifica dell’identità dei richiedenti i certificati; • emissione e pubblicazione dei certificati; - 32 - • gestione del ciclo di vita dei certificati (sospensione, revoca, rinnovo) In ambito pubblico sono le Certification Authority ad implementare una PKI, ma essa può anche essere implementata per un uso locale come all’interno di una azienda. Ovviamente implementando una PKI ad uso locale, le operazioni basate su questa PKI hanno senso e validità solo all’interno dell’azienda stessa. Le CA pubbliche, in Italia, sono quelle inscritte e pubblicate nel albo dei certificatori tenuto dal CNIPA (Centro Nazionale per l’Informatica nella Pubblica Amministrazione). USO DELLA FIRMA DIGITALE La firma digitale, per essere apposta ad un file, richiede alcuni presupposti. Come è deducibile da quanto descritto in precedenza è necessario che l’utente sia in possesso di una coppia di chiave generate secondo un algoritmo di crittografia asimmetrica (RSA o DH-DSS). Un altro requisito obbligatorio è che l’utente disponga di un dispositivo hardware o software in grado di usare la chiave privata per cifrare dei dati con l’algoritmo appropriato. Altro requisito è che la chiave privata utilizzata per la firma dei documenti informatici venga conservata in maniera sicura e segreta dal titolare che ne è responsabile. Per ragioni di sicurezza, la chiave privata si trova nello stesso ambiente dove viene eseguito l’algoritmo di firma. Per dispositivo software di firma si intende una libreria che implementi direttamente gli algoritmi di cifratura e che faccia uso della chiave privata memorizzata, e possibilmente anche protetta da cifratura simmetrica con pwd, in un file (keystore). Il tutto avviene in un unico PC evitando che la chiave privata venga trasportata fuori. Per dispositivo hardware di firma si intende un dispositivo come ad esempio la smart card che contiene la chiave privata ed applica essa stessa l’algoritmo di cifratura per la firma grazie al suo chip integrato. Anche qui il tutto avviene in un unico dispositivo senza che sia compromessa la riservatezza della chiave. La diffusione della chiave pubblica, invece, consente a tutti i possibili destinatari dei documenti informatici di disporre della chiave necessaria per la verifica dei documenti. Per individuare in maniera sicura il sottoscrittore del documento, deve essere legata in maniera certa al titolare della corrispondente chiave privata. - 33 - SMART CARD Per la normativa italiana con dispositivo di firma si intende "un apparato elettronico programmabile solo all’origine, facente parte del sistema di validazione, in grado almeno di conservare in modo protetto la chiave privata e generare al suo interno le firme digitali". Uno degli strumenti che è possibile utilizzare come dispositivo di firma è la smart card crittografica. La smart card è simile, per forma e dimensioni, ad una tradizionale carta di credito. A differenza di quest’ultima, incorpora un processore in grado di memorizzare e elaborare dati ed informazioni, a cui è possibile accedere tramite un codice di sicurezza riservato e personale (PIN). Il processore della smart card permette appunto di eseguire gli algoritmi di firma digitale e crittografia usando la chiave privata memorizzata al suo interno. Inoltre è uno strumento di memorizzazione molto sicuro, oltre che facilmente portabile e legato al Titolare. La coppia di chiavi asimmetriche viene generata e memorizzata direttamente al suo interno nella fase di inizializzazione della carta. Per tutte le ragioni elencate sin qui le smart card crittografiche, opportunamente protette da PIN di accesso, sono state individuate come un valido supporto, in quanto oltre a permettere la generazione delle chiavi al loro interno e l’ applicazione della firma digitale, dispongono di sistemi di sicurezza che impediscono l’esportazione e la copia della chiave privata, fuori dalla smart card in cui è stata generata. La smart card si collega con il computer mediante un apposito lettore ed il relativo software di interfaccia che le permette di interagire con tutte le applicazioni realizzate per far uso della smart card. Una descrizione più dettagliata della smart card adoperata, del suo uso e dei suoi meccanismi di interfacciamento con sistema operativo e software viene fatta nel l’implementazione del progetto. - 34 - capitolo successivo riguardante • 3.2 STRUMENTI 3.2.1 WSAD (IDE di sviluppo) L’IDE (Integrated Development Environment) usato per sviluppare il progetto di tesi è il prodotto commerciale offerto dalla IBM, WebSphere Studio Application Developer v 5.1.2. WSAD (l’abbreviativo) è uno dei prodotti della famiglia WebSphere Studio che è stato sviluppato sopra il workbench Eclipse. Il workbenk eclipse è un ambiente di sviluppo progettato dalla IBM e rilasciato alla comunità degli opensource. E una piattaforma universale che fornisce frameworks, servizi e strumenti per costruire altri strumenti. WSAD è un ambiente integrato per lo sviluppo, testing, debugging e deployment delle applicazioni, infatti esso in unico prodotto fornisce supporto per ogni fasi dello sviluppo dell’applicazione. Esso è sviluppato in java ed offre tutti i tool e i servizi per sviluppare qualsiasi tipo di applicazione. I servizi e strumenti che esso mette a disposizione dello sviluppatore spaziano da quelli dedicati allo sviluppo di applet java allo sviluppo di intere applicazione J2EE, dalla creazione di file e schemi xml alla gestione di file di configurazione server, dalla creazione di comandi SQL alla interrogazione di database direttamente dall’IDE, ecc… Grazie alla possibilità di cambiare la prospettiva della GUI di WSAD è possibile facilmente passare da un tipo di sviluppo e prospettiva dati ad un altro. Esso offre molteplici wizard che facilitano e velocizzano la creazione di codice e permette lo sviluppo organizzato in team grazie al supporto per CVS (Concurrent Versions System). Inoltre è uno strumento completo per lo sviluppo di applicazioni web e applicazioni enterprise. Esso infatti, oltre al supporto per la creazione dei vari componenti come pagine JSP, servlet, EJB, mette a disposizione un intero ambiente di test comprendente vari application server tra i quali TomCat v 4.1 e WAS v5.1 (Websphere Application Server), server monitor delle richieste HTTP, strumento di debug della applicazione enterprise, editor di file di configurazione, strumenti per lo sviluppo dei web services, ecc… - 35 - Tra tutti questi aspetti positivi vi sono anche alcuni lati negativi che tengo a sottolineare. Essi riguardano la notevole quantità di RAM necessaria e un piuttosto intenso consumo della risorsa processore che appesantisce parecchio la macchina su cui è installato l’ambiente di sviluppo. Questi due lati negativi sono comunque diretta conseguenza che l’intero IDE è sviluppato in java. Un ultimo aspetto negativo è che nonostante sia un ambiente nato per rendere più veloce e semplice lo sviluppo di un’applicazione, l’apprendimento iniziale per usare tale strumento non è così intuitivo e veloce, questo dipende anche dall’immensa mole di servizi e tool che esso offre. 3.2.2 WAS (application server) L’application server usato nell’ambito del progetto è WebSphere Application Server v 5.1. Più correttamente è stato usato quello integrato nell’Application Developer. Questo per una più veloce fase di sviluppo. Infatti il server integrato nell’IDE consente allo stesso tempo lo sviluppo, il testing e il debugging delle applicazioni in fase di sviluppo. WAS è scritto in java, la virutal machine che mette a disposizione per eseguire le applicazioni ospitate è un’implementazione della IBM relativa alle specifiche di J2SE 1.4.1. Il server si basa sull’architettura J2EE 1.3 fornendo e implementando in modo standard la maggior parte dei servizi descritti nella specifica. Esso, oltre alle librerie classiche di un ambiente J2EE offre anche delle estensioni per permettere la gestione di nuovi componenti. - 36 - 3.2.3 ORACLE DB E REPOSITORY (database) Il database scelto per l’implementazione del progetto è Oracle 9i (v9.2.0.1). E un DBMS (DataBase Management System) completo, esso fornisce un sistema di basi di dati relazionale e anche ad oggetti. Il server Oracle contiene molte funzionalità. Una JVM è installata per consentire l’esecuzione di procedure sotto forma di classi Java. Vi è implementato anche un servlet container che permette l’uso di servlet e JSP direttamente sul Server Oracle. Inoltre il database fornisce un supporto ai dati XML. Esso in effetti definisce sia un tipo di dato XML nativo sia una adeguamento dei tipi SQL già esistenti per potere contenere questo genere di dati. Un’altra caratteristica è che Oracle ha il supporto come database ad oggetti. Una delle funzionalità utilizzate all’interno del progetto, oltre le classiche tabelle, è il repository . Esso permette la conservazione di file e dati in modo simile ad un file system. Il repository è parte del database XML, infatti esso è ottimizzato per contenere questo tipo di dati. L’istanza server Oracle fornisce e controlla l’accesso alle tabelle della sorgente di dati e anche al repository. 3.2.4 OID (directory service) Il servizio di directory usato è quello della Oracle, Oracle Internet Directory (OID). Esso si basa su un architettura standard LDAP e contiene precaricati alcuni dei schemi standard più usati. Il server viene acceduto secondo il protocollo LDAP v. 2 e 3 ma può anche essere configurato in modalità sicura tramite SSL. Infatti è possibile creare un ulteriore istanza del server per accettare connessioni in SSL. Il directory service ha una sua propria istanza server, mentre per conservare i dati fa uso del database Oracle. Il server LDAP si connette al database server come normale utente per prelevare e memorizzare dati relativi alla directory. Ovviamente nel database vi sono tabelle dedicate a contenere i dati del directory service. - 37 - 4. IMPLEMENTAZIONE PROGETTO • 4.1 LA WEB APPLICATION Questo capitolo tratta la parte pratica della tesi. Qui viene discusso il piccolo progettino realizzato frutto dei vari studi effettuati. La messa in pratica di alcuni concetti studiati sulla sicurezza è avvenuta con l’implementazione del progetto sotto forma di web application. L’applicazione realizzata non è un sistema completo per l’oggetto della tesi, ma piuttosto un ambiente creato per implementare alcune soluzioni a problematiche connesse direttamente al sistema Processo Telematico. I paragrafi successivi descrivono ciò che è stato realizzato con particolare attenzione alla fase di sviluppo dell’applicazione stessa. Prima di definire a livello generale l’architettura dell’applicazione, è bene dare una definizione di due concetti che descrivono l’architettura stessa: Layer e Tier. Ogni applicazione distribuita viene realizzata effettuando una suddivisione della stessa in layer. Un layer rappresenta uno strato di suddivisione orizzontale. L’applicazione deve essere vista composta da più layer. Ciascun di essi ha un ruolo particolare nell’ambito dello sviluppo dell’applicazione ed all’interno può contenere uno o più componenti. Da notare che i layer sono semplicemente astrazioni e non corrispondono ad una distribuzione fisica dell’applicazione. Una tipica separazione in layer in un applicazione web è la seguente: • presentation layer, contiene i componenti che si occupano di gestire l’interfacciamento dell’applicazione verso l’utente; • business logic layer, contiene i componenti che interagiscono tra di loro per risolvere un determinato problema dell’applicazione; • data layer, è utilizzato dal business logic layer per effettuare i salvataggi di stato in maniera persistente, è costituito essenzialmente da uno o più database. - 38 - Per definire la separazione fisica dei layer si introduce il concetto di Tier. Un tier rappresenta uno strato di suddivisione fisico. L’applicazione deve essere vista come un insieme di strati sovrapposti, ognuno dei quali è un tier fisicamente separato dagli altri. L’applicazione è stata progettata e sviluppata seguendo un’architettura two-tier. I tre layer tipici di una web application sono stati suddivisi in due tier. Più esattamente il presentation layer e il business logic layer sono stati riuniti in un tier e il data layer nell’altro tier. L’intera web application è basata su JSP e Servlet. Ovviamente, affiancate da varie librerie di supporto usate per vari compiti all’interno dell’applicazione. Le pagine JSP unitamente alla JSTL (Java Standard Tag Library) sono state usate unicamente per la parte di presentazione (presentation layer). Per quanto riguarda la business logic è stata implementata interamente in Servlet ed altre classi appositamente create. Nel data layer troviamo il database, il repository e il servizio di directory. L’architettura di base del processo telematico è stata riprodotta (simulata) facendo interpretare i ruoli dei principali componenti (PdA, GC, UG) a delle servlet. A grandi linee, il flusso informativo principale dell’applicazione trae origine dall’interazione dell’utente, tramite browser, con le pagine JSP le quali, a loro volta comunicano con la catena di servlet che infine vanno a inserire e modificare dati nelle basi di dati. Gli obiettivi realizzati dall’applicazione sono i seguenti: • riprodurre parte del flusso informativo del Processo Telematico • realizzazione sistema di autenticazione • elaborazione dei dati nei vari componenti principali • protezione canali di trasmissione La web application creata è stata chiamata PTelematWeb, in seguito nel libro verrà fatto riferimento ad essa anche con il suo nome. Per motivi di semplicità, la web application simula il flusso dati tra un solo PdA ed un solo UG, questo permettendo di approfondire e incentrare gli sforzi sugli altri obiettivi come l’autenticazione al PdA e l’elaborazione dei dati. - 39 - - 40 - • 4.2 STRUTTURE DATI 4.2.1 L’ATTO L’obiettivo primario della realizzazione del Processo Telematico è la trasmissione di atti usando le moderne tecnologie informatiche garantendo un elevatissimo livello di sicurezza nella riservatezza e autenticità dei documenti. Ciò impone come presupposto la redazione degli atti non più in modo cartaceo bensì in modo digitale. Questo è realizzato grazie a del software specifico progettato per essere usato dall’avvocato che vuol fare uso del nuovo sistema di comunicazione. La redazione dell’atto diventa una procedura che deve essere resa il più possibile user-friendly per l’utente, questo però garantendo la massima correttezza e validità dei documenti. Il formato dati per conservare il contenuto degli atti è l’XML. E stato scelto per le sue caratteristiche di formato standard, strutturato e testuale che rende agevole la portabilità tra i vari applicativi software che devono gestire i dati. Inoltre importantissima caratteristica di XML è la possibilità di rendere un documento xml validabile rispetto ad un altro documento che ne definisce e ne impone la struttura dei dati che il file xml deve o può ammettere. Stiamo parlando di un file DTD (Document Type Definition). Alcuni esempi di atti di cui sono state ufficializzate e rese pubbliche, da parte del Ministero della Giustizia, le loro strutture sono: • atto introduttivo (citazione e ricorso), • nota di iscrizione a ruolo, • comparsa di costituzione e risposta, • memoria generica, ecc… Il modello proposto per ciascun atto tiene conto della normativa di riferimento del codice di procedura civile (cpc). Quindi l’atto diventa composto da più campi e sezioni (insieme di campi), alcuni obbligatori ed altri opzionali inoltre è importante sottolineare che la linea-guida seguita in fase di analisi nella definizione di tali campi, è stata quella di optare comunque per il carattere opzionale di ogni altro - 41 - campo e sezione, liberamente componibile dall'avvocato nella successione argomentativa dallo stesso ritenuta più idonea. La strutturazione dei diversi modelli DTD (Document Type Definition) è pubblicata con apposito decreto ministeriale. REDAZIONE ATTO Lo sviluppo del software per la redazione degli atti e la creazione della busta non è lo scopo della tesi, ma capire a fondo come l’atto generico viene creato e come la busta per la trasmissione dello stesso con eventuali allegati viene generata, è fondamentale ai fini dello sviluppo del progetto. Inoltre qui viene descritta anche l’operazione di firma degli atti e allegati. Il software di redazione viene fornito dal Ministero della Giustizia ai soli fini della sperimentazione, il suo nome è Redattore Atti v1.1. Esso è uno strumento che si integra in Microsoft Word e che consente la predisposizione dell'atto per la successiva trasformazione in formato XML. L’atto inizialmente viene redatto direttamente dall’ambiente del Redattore Atti che propone una serie di wizard (procedure guidate) che permettono di inserire i dati in base al tipo di atto prescelto. Successivamente l’atto può essere aperto e modificato attraverso gli strumenti applicativi disponibili in Word, nelle sue parti obbligatorie ed opzionali. Durante l’installazione del Redattore Atti, sul sistema viene installato un modulo estensione per integrare le funzionalità del Redattore Atti direttamente in Word. Le funzionalità disponibili in fase di redazione nell’ambiente MS Word, sono attivabili in diversi modi, per esempio attraverso una barra degli strumenti, un menu o abbreviazioni da tastiera. Le funzionalità native di MS Word sono utilizzate durante la redazione o modifica dell’atto mentre quelle non consentite sono disabilitate all'utente. L'ambiente di editing è lo stesso di un normale documento Word, e viene proposto all'utente dopo un apposito data-entry (wizard) per i dati configurati come obbligatori nel modello di atto scelto. Il Sistema, avendo a disposizione un modello (DTD) ed un documento di default per l'atto che l'utente ha deciso di redigere, presenterà nell'ambiente di redazione un documento con: - 42 - • una intestazione contenente tutti i dati definiti come obbligatori nel modello stesso; • una serie di sezioni (il cui ordine è definito nel modello, ma può essere modificato in fase di dataentry iniziale) riempibili opzionalmente a cura dell'utente Avvocato; • una formula testuale pre-determinata per ogni sezione, che potrà essere modificata e/o cancellata dall'utente solo sull'Atto stesso senza lasciare parti di testo inconsistenti o righe vuote se non espressamente inserite. Il Documento Word è, così, organizzato come un insieme gerarchico di Sezioni e Campi, secondo una struttura ad albero: l'intero documento costituisce il Campo radice (root, comune a tutti gli Atti) che può contenere testo e/o Campi figli, e così via, ricorsivamente, esattamente come avviene per i documenti XML. Pertanto ogni parte del Documento appartiene ad un Campo e ogni Campo ne può contenere altri. I Campi del Documento corrispondono biunivocamente ai nodi dell'XML. Il Sistema permette inoltre all'utente Avvocato di inserire all'interno di ciascuna sezione uno o più campi strutturati (suggeriti dal sistema stesso), e di norma opzionali, la cui compilazione, nel caso di dati complessi, è guidata tramite una finestra di inserimento che controlla l'obbligatorietà o l'opzionalità dei dati stessi contenuti nel campo. Durante la fase di redazione vera e propria, l'applicativo esercita un costante controllo sull'attività dell'utente al fine di sincronizzare il contesto alla posizione corrente di redazione nel Documento: in ogni istante, lo Strumento di Redazione abilita esclusivamente le funzioni valide nel nodo corrente. Inoltre, impedisce modifiche alla struttura, al fine di garantire la creazione di file XML validi rispetto ai requisiti definiti per il singolo Atto con l'ausilio dei DTD. L'atto in formato XML, conforme ai DTD previsti dall'Amministrazione, è ottenuto a partire dal formato Word mediante l'esecuzione di procedure di trasformazione automatica. Il formato dell'Atto XML include, oltre alle marcature “semantiche”, ove previsto, anche le informazioni di formattazione del testo. - 43 - La logica progettuale è “application to application”, ossia mira alla realizzazione di un'integrazione tra applicazioni in modo tale da consentire loro di interagire e scambiarsi dati in modo autonomo. FIRMA ATTO L'atto redatto ed eventualmente anche alcuni allegati devono essere firmati e cifrati per l'Ufficio Giudiziario di destinazione. A questa operazione provvede l’utente tramite l’uso del Redattore Atti e un apposito apparato fisico e logico come la smart card, il lettore smart card, appositi driver del lettore e librerie dll della smart card. Le caratteristiche di questo apparato vengono descritte più avanti in questo capitolo nella sezione riguardante la sicurezza. La firma digitale di un documento generico viene ampiamente discussa nella sezione “Sicurezza” del capitolo 3 “Contesto applicativo” di questo libro. Qui viene discussa la struttura della firma applicata nell’ambito del Redattore Atti. La modalità di apposizione della firma in questo contesto, denominata firme indipendenti (meccanismo “aggiungi una firma”), prevede che uno o più soggetti firmano digitalmente lo stesso documento. L'ordine di apposizione delle firme degli N firmatari non è significativo, ed il file generato si presenta con un'unica estensione p7m. La struttura è quindi PKCS#7 in cui sono contenute le N firme che si riferiscono quindi, al medesimo documento. Non è possibile utilizzare tale meccanismo per stabilire l'ordine in cui le firme stesse sono state apposte: una alterazione dell'ordinamento delle firme non pregiudica la validità della busta crittografica PKCS#7. Tale meccanismo è valido sia per l'apposizione di una firma singola che per l'apposizione di firme multiple. La figura 4.2 rappresenta la struttura PKCS#7 del file firmato. - 44 - Figura 4.2 struttura PKCS#7 di un file firmato Tali oggetti vengono aggregati in una struttura MIME (Atto.msg). Di seguito viene illustrata la struttura del file MIME contenente l’indice dei file contente i riferimenti ai documenti atto ed allegati (IndiceBusta.xml), l’atto firmato (CorpoAtto.xml.p7m) e i suoi eventuali allegati firmati e non (allegato.pdf.p7m). Figura 4.3 struttura MIME contenente l’atto, i suoi allegati e l’indice degli stessi - 45 - 4.2.2 LA BUSTA La struttura MIME descritta nel paragrafo precedente viene prima cifrata in un unico file e dopo aggregata a informazioni per l’inoltro dei dati. Questi oggetti (file cifrato e informazioni di inoltro) vengono aggregati, ai fini del deposito in un'opportuna struttura dati denominata “busta MIME”, contenente quindi un file con le informazioni di instradamento della busta (InfoInoltro.xml), e un file cifrato contenente a sua volta tutti i documenti, atti e allegati che saranno trasmessi (Atto.enc). Questo avviene sempre tramite il Redattore Atti. Da notare che dopo la spedizione e durante il passaggio di tale busta per il Punto d’Accesso essa può essere opzionalmente firmata da quest’ultimo. La figura che segue illustra la struttura generale della busta MIME. Figura 4.4 struttura busta MIME La busta così composta è pronta per essere inviata all’Ufficio Giudiziario specificato. Il file cifrato “Atto.enc” ha al suo interno il contenuto principale che l’utenteavvocato desidera trasmettere. Infatti Atto.enc contiene l’oggetto MIME definito nel paragrafo precedente(Atto.msg), la chiave di sessione (crittografia simmetrica) con cui è stato cifrato l’oggetto MIME e un riferimento al certificato digitale del destinatario contenente la chiave pubblica dell’ufficio destinatario con cui è stata cifrata la chiave di sessione. La figura 4.5 illustra la struttura generale del file - 46 - Atto.enc che è il risultato ottenuto a seguito del processo di cifratura dell’oggetto mime Atto.msg. L’elemento “Issuer Dname” è il Distinguished Name della CA che ha emesso il certificato dell'ufficio giudiziario destinatario, l’elemento “Serial Number” è il numero seriale del certificato dell'ufficio giudiziario destinatario. Tali dati sono necessari per il controllo successivo in fase di decifratura ed identificano il certificato con cui è stato cifrato l'oggetto. L'algoritmo utilizzato per l'operazione di cifratura simmetrica del file è il 3DES e le chiavi simmetriche di sessione vengono cifrate utilizzando la chiave pubblica contenuta nel certificato del destinatario con il quale si intende corrispondere. Tale busta sarà successivamente depositata presso l'Ufficio Giudiziario per il tramite del Punto d’Accesso e del Gestore Centrale. Figura 4.5 struttura file Atto.enc La cifratura degli atti in uscita, ossia cifrati a cura del Gestore locale con la chiave pubblica del soggetto destinatario (avvocato) non è stata implementa nell’ambito di questo progetto. Comunque in un ipotetica implementazione si applicherebbero le stesse specifiche sopra riportate. In particolare, per gli atti inviati alla casella di posta certificata del destinatario, verrebbe utilizzata la medesima struttura di Atto.enc, che verrebbe allegato al messaggio di posta elettronica certificata. Il file “InfoInoltro.xml” contiene le informazioni di servizio per il Gestore Centrale. Tali informazioni consentono al Gestore Centrale il routing del messaggio verso l’Ufficio Giudiziario specificato. Il file ha la struttura illustrata nella figura seguente. - 47 - Figura 4.6 struttura file InfoInoltro.xml L’elemento IdMsgPdA riporta l'identificativo univoco del messaggio, generato dal PdA. Al momento della creazione della busta sulla postazione client dell’avvocato tali elementi non hanno valore. I campi dell’identificativo sono: • CodicePdA: è il codice identificativo del PdA. • Anno: è l'anno di generazione del messaggio. • IdMsg: è un progressivo numerico univo nell'ambito dell'anno. L’elemento Mittente contiene il sottoelemento CodiceFiscale. Esso è il codice fiscale dell'avvocato che ha originato il messaggio e quindi anche firmato l’atto. L’elemento mittente può avere un attributo “ruolo”.Esso indica il ruolo assunto dal mittente (ad esempio “avvocato”). L’elemento Destinatario contiene il sottoelemento CodiceUG. Esso è il codice identificativo dell'UG destinatario. L’elemento IdMsgMitt contiene il valore identificato assegnato dall'Avvocato all'atto informatico (il nome del file “busta MIME” sulla macchina client). - 48 - 4.2.3 LE BASI DI DATI L’applicazione si appoggia a varie strutture per la conservazione dei dati persistenti. Sono state usate tre forme diverse di supporto per i dati: database, repository e service directory. A seconda del tipo di informazione è stato usato un o l’altro tipo. Tutti e tre i software sono prodotti Oracle, il repository e la directory si appoggiano al database Oracle. Per capire meglio, è bene ricordare che ogni contenitore fisico di dati ha il proprio software che si occupa di fornire l’accesso ai propri dati. Quindi possiamo fare una distinzione netta tra i dati memorizzati e il software che li gestisce. Quando parliamo di database solitamente ci riferiamo all’insieme di queste due componenti. Adesso, per chiarire meglio come sono stati organizzati i contenitori di dati nell’ambito del progetto, parlerò di istanza o server quando mi riferirò al software che gestisce i dati. E stata fatta questa distinzione per poter spiegare meglio, in seguito, il significato di repository e service directory che si appogiano al database. Il database Oracle è un object-relational database, per conservare i dati esso è basato sul modello relazionale ed offre allo stesso tempo il supporto come database ad oggetti. L’istanza server Oracle fornisce e controlla l’accesso alle tabelle della sorgente di dati. Il repository è integrato nel database Oracle. Ciò vuol dire che il software per accedere al repository è parte dell’istanza del database, inoltre i dati vengono memorizzati in delle speciali tabelle relazionali dedicate del database. Quindi la struttura fisica di memorizzazione per il repository è quella del database relazionale. Il software d’accesso come detto prima è parte dell’istanza server per il database Oracle. L’accesso al repository può avvenire usando diversi protocolli quali HTTP, WebDAV e FTP. Quest’ultimo è stato usato nel progetto. Il directory service ha una sua propria istanza server, mentre per conservare i dati fa uso del database. Il servizio di directory è basato e può essere acceduto tramite il protocollo standard LDAP versioni 2 e 3. Il server LDAP (directory service) si connette al database server come normale utente per prelevare e memorizzare dati. - 49 - Ovviamente nel database vi sono tabelle dedicate a contenere i dati del directory service. Più avanti in questo paragrafo viene descritta la struttura dei dati una directory service. Ai fini dell’implementazione del progetto sono state attivate due istanze del database Oracle (ciascuna con la sua propria basi di dati fisica), di cui una dedicata come supporto al server LDAP, e un’istanza del server LDAP. Il database, nell’ambito del progetto viene usato per memorizzare i dati del passaggio della busta MIME attraverso i vari componenti, PdA, GC e UG. Il repository è il contenitore finale dei file nell’ UG e quindi viene usato solo da questo. Il directory server viene usato in ambito di autenticazione, infatti esso serve per contenere i dati sugli utenti. La struttura logica del repository è quella di un file system gerarchico. La struttura realizzata per il progetto è illustrata nella figura seguente. Figura 4.7 struttura repository per PTelematWeb - 50 - La struttura dei dati in LDAP è un grafo diretto aciclico (DAG), ma comunemente viene utilizzata la struttura ad albero. La struttura dell'albero e dei nodi non presenta particolari limiti, più in dettaglio: • da ogni nodo possono partire infiniti rami, • ogni nodo può avere dati con strutture diverse, • la struttura dei dati del singolo nodo è liberamente definibile ed è object oriented, • uno stesso oggetto può essere riferito in due nodi diversi dell'albero con un meccanismo simile ai soft link dei file system. La struttura dati nella directory service viene chiamato DIT (Directory Information Tree). La struttura di una particolare DIT viene descritta tramite un directory Schema. Il directory Schema contiene le informazioni su come è organizzato il DIT. Un nodo dell’albero è un contenitore di dati e viene chiamato directory entry o più semplicemente entry. Ogni entry è formata da uno o più oggetti, gli oggetti vengono dichiarati in opportuni file di configurazione con sintassi non standard. Tali file vengono generalmente indicati col nome di schemi e definiscono degli objectClass. Un objectClass è un modello di oggetto che determinano il nome, il tipo, la semantica e la sintassi degli attributi che possono essere presenti in un’istanza dell’objectClass. L’attributo contiene il singolo dato. Esistono degli objectClass e degli attributi standard definiti in alcune RFC che vengono implementate in tutti gli schemi dei vari service directory esistenti. Le entry sono formate da: • Distinguished Names (DN): Una lista di coppie nome-valore che individua la posizione del nodo all'interno dell'albero, ad esempio:ou=pda, o=ptelemat, c=it. L'ultima coppia individua la radice dell'albero, la prima distingue il figlio dai fratelli, le altre individuano un percorso nell'albero, la prima coppia viene chiamata Relative Distinguished Name (RDN). • Uno o più objectClass che definiscono il tipo di dati contenuti. Tutti gli attributi del nodo si ottengono mediante la composizione degli objectClass dichiarati nell’entry. - 51 - • I dati del nodo come coppie attributo-valore, che rispettano le definizioni degli objectClass. Si deve osservare che possono essere generalmente presenti più coppie attributo-valore con lo stesso attributo. Questa descrizione è la vista logica dei dati contenuti in una qualsiasi directory standard LDAP che ha un client LDAP. L’effettiva conservazione dei dati varia da produttore a produttore, nel caso del nostro servizio di directory (Oracle Internet Directory) la memorizzazione fisica avviene in un database Oracle. La figura seguente illustra la semplice struttura adottata nell’ambito del progetto. Figura 4.8 DIT per PTelematWeb Per ragioni di limitate risorse hardware nell’ambiente di sviluppo è stato usato un unico database per la registrazione delle informazioni sul passaggio delle buste nei vari componenti del sistema. Questo database, per ottenere comunque una separazione dei dati dei rispettivi PdA, GC e UG, è stato suddiviso in 3 schemi ed altrettanti tablespace (file fisici contenenti le tabelle). La struttura delle diverse tabelle all’interno del database sono state create con il tool grafico della Oracle Enterprise Manager. Per i due tablespace di PdA e GC è stato creato anche un oggetto per la generazione di valori sequenziali. Il termine tecnico per questi oggetti è sequenza. Ogni sequenza permette la generazione di numeri univoci e opzionalmente anche sequenziali all’interno dello schema in cui viene creato. Questi sono necessari nel PdA perché esso ha la necessità di assegnare un identificativo univoco ad ogni busta che viene uploadata al Punto d’Accesso, inoltre - 52 - sono anche necessari nell’UG perché i fascicoli formati nel repository hanno bisogno di un valore univoco per il numero di ruolo relativo che viene assegnato loro alla creazione di un nuovo fascicolo. La base di dati viene acceduta dall’applicazione mediante un datasource che fa uso del driver JDBC. Questo viene descritto più in dettaglio più avanti. Le righe e gli schemi successivi illustrano come sono stati organizzati i dati all’interno delle varie strutture e descrivono anche la loro natura. La descrizione del loro utilizzo e flusso all’interno dell’applicazione viene effettuata nelle sezioni successive di questo capitolo. Le convenzioni usate nello descrivere i vari schemi sono le seguenti: ogni tabella viene dichiarata su una riga e nelle parentesi che seguono vi è l’elenco delle colonne di cui è composta, uno o più nomi di colonna con sottolineatura continua rappresentano la chiave primaria, uno o più nodi di colonna con sottolineatura tratteggiata rappresentano una chiave esterna. Gli eventuali vincoli come NOT NULL oppure UNIQUE vengono successivamente assieme al tipo di ogni colonna. Per capire meglio ecco un esempio: nomeTabella(colonnaChiavePrim, secondaColonna, terzaColonnaChiaveEst) - 53 - scritti PDA La figura seguente rappresenta lo schema E/R dal quale è stato costruita la struttura delle tabelle nello schema del Punto d’Accesso. Figura 4.9 schema E/R PdA PdA TRASMISSIONE DESTINAZIONE POST_SEQUENZA Le tabelle: Trasmissione(anno, idmsg, codicefiscale, codiceug, orapartenza) Destinazione(codiceug, descrizione) Post_Sequenza(valore) Tipo colonne: tutte di tipo VarChar2 tranne la colonna orapartenza che è di tipo Date. Questa colonna ha il valore settato come valore di default SYSTIMESTAMP. Descrizione: Nella tabella trasmissione vengono memorizzati i log di tutte le buste “uploadate” e inoltrate dal PdA verso il GC. La tabella destinazione è un elenco normalmente fisso di tutte le destinazioni possibili. La sequenza fornisce il valore assegnato ad ogni valore della colonna idmsg. La tabella Post_Sequenza, anche chiamata più avanti come tabella ausiliaria, viene usata dal codice dell’applicazione per - 54 - memorizzare temporaneamente il nuovo valore estratto dalla sequenza prima che esso venga assegnato alla colonna idmsg per ciascun nuovo record. Relazioni: Destinazione-Trasmissione, relazione di tipo uno-a-molti, ad ogni trasmissione corrisponde una sola destinazione (UG) e una destinazione può essere l’obiettivo di più trasmissioni. Sequenze: Invio_Seq ha i seguenti parametri settati: crescente, no cache e order. GC La figura seguente rappresenta lo schema E/R dal quale è stato costruita la struttura delle tabelle nello schema del Gestore Centrale. Figura 4.10 schema E/R GC GC PROVENIENZA TRASMISSIONE DESTINAZIONE RIFIUTI Le tabelle: Trasmissione(idmsg, codicepda, anno, codicefiscale, codiceug, data_ora_arrivo, data_ora_partenza) Provenienza(codicepda, descrizione) - 55 - Destinazione(codiceug, descrizione) Rifiuti(codicepda, anno, idmsg, descrizioneerrore) Tipo colonne: tutte di tipo VarChar2 tranne le colonne data_ora_arrivo e data_ora_partenza che sono di tipo Date. La colonna data_ora_arrivo ha il valore settato come valore di default SYSTIMESTAMP, mentre il valore della colonna data_ora_partenza viene stabilito nel codice dell’applicazione e quindi inserito successivamente all’inserimento del nuovo record. Descrizione: Nella tabella trasmissione vengono memorizzati i log di tutte le buste arrivate e inoltrate dal GC verso l’UG. Le tabelle Provenienza e Destinazione contengono rispettivamente le provenienze (codice dei PdA) e le destinazioni (codici degli UG) ammissibili. La tabella Rifiuti contiene i log delle buste arrivate al GC ma non inoltrate per un qualche motivo descritto nella colonna descrizioneerrore Relazioni: Provenienza-Trasmissione, relazione di tipo uno-a-molti, ad ogni trasmissione corrisponde una sola provenienza (PdA) e una provenienza può essere l’origine di più trasmissioni. Destinazione-Trasmissione, relazione di tipo uno-a-molti, ad ogni trasmissione corrisponde una sola destinazione (UG) e una destinazione può essere l’obiettivo di più trasmissioni. Rifiuti-Provenienza, relazione di tipo uno-a-molti, ad ogni busta rifiutata corrisponde una sola provenienza (PdA) e una provenienza può essere l’origine di più trasmissioni. - 56 - UG La figura seguente rappresenta lo schema E/R dal quale è stata costruito la struttura delle tabelle nello schema dell’Ufficio Giudiziario. UG POST_SEQUENZA PARTE PARTE DIFENSORE FASCICOLO EVENTI ATTI Reposit ory Figura 4.11 schema E/R UG Le tabelle: RegistroBuste(codice, codicepda, anno, idmsg, data_ora_arrivo, nomefile) Fascicolo(anno, numruolorelativo, ufficio, sezione, giudice, oggetto, stato, datacreazione)* Parte(codice, ragionesociale, cognome, indirizzo, tipo, anno, numruolorelativo)* Difensore(codice, codicefiscale, nome, cognome, indirizzo)* DifesaParte(codicedifesa, codiceparte)* Atti(codice, anno, numruolorelativo, tipo, datadeposito)* - 57 - Eventi(codice, anno, numruolorelativo, dataora, descrizione)* Post_Sequenza(valore) Tipo colonne: Le colonne di queste tabelle sono tutte principalmente di tipo VarChar2 a parte quelle che contengono dedicate alla memorizzazione di timestamp. In particolare la colonna data_ora_arrivo della tabella RegistroBuste ha come valore di default SYSTIMESTAMP. Descrizione: La tabella RegistroBuste conserva i log di tutte le buste pervenute all’UG. Le tabelle Atti, Parte, Difesaparte, Difensore e Eventi sono tutte legate direttamente o indirettamente alla tabella fascicolo. Infatti queste tabelle servono per organizzare e suddivedere le varie informazioni contenute all’interno dei fascicoli. La tabella Difesaparte associa il difensore alla parte. Post_Sequenza è la tabella ausiliaria usata dal codice dell’applicazione per memorizzare temporaneamente il nuovo valore estratto dalla sequenza prima che esso venga assegnato ad un fascicolo. Relazioni: Fascicolo-Atti, relazione di tipo uno-a-molti, ad ogni fascicolo possono corrispondere più atti e ogni atto corrisponde ad un solo fascicolo. Fascicolo-Parte, relazione di tipo uno-a-molti, ad ogni fascicolo possono corrispondere più parte e ogni parte corrisponde ad un solo fascicolo. Fascicolo-Eventi, relazione di tipo uno-a-molti, un fascicolo può generare più eventi e ogni evento è legato ad un solo fascicolo. Parte-Difensore, relazione di tipo molti-a-molti, una parte parte può avere più difensori e un difensore può difendere più parti. Nota: la tabella DifesaParte è stata necessaria nella fase di trasformazione dal modello concettuale a quello logico (relazionale). Infatti, la precedente relazione molti-a-molti tra le entità Difensore e Parte, per le regole di normalizzazione, è - 58 - dovuta essere spezzata per creare due nuove relazioni uno-a-molti inserendo l’entità DifesaParte tra le due entità precedentemente citate. Sequenze: RuoloRelativo_Seq ha i seguenti parametri settati: crescente, no cache e order. * Le tabelle marcate con l’asterisco sono inutilizzate nel progetto che è stato implementato. • 4.3 TRASMISSIONE BUSTA In questa sezione viene discusso il percorso che la busta MIME compie all’interno della web application. Dalla fase di upload da parte dell’utente fino all’arrivo all’UG. Vengono illustrate quali tecniche sono state usate per la comunicazione tra i vari componenti come le JSP e le Servlet. Sono descritte le manopilazioni che subisce la busta durante il suo percorso. Il tutto spiegato sotto un’ottica da sviluppatore. La spiegazione segue una logica sequenziale e temporale illustrando i vari passi che vengono eseguiti man mano che la busta viene inoltrata e elaborata attraverso l’applicazione e il database. 4.3.1 UPLOAD AL PDA Una volta che l’avvocato si è autenticato al sistema accede alla propria home page. Essa contiene il menu delle operazioni che può eseguire: • Trasmetti busta • Consulta propri fascicoli • Ricerca fascicoli Nell’ambito del progetto è stato sviluppato solo la trasmissione della busta, quindi le altre due funzioni sono disabilitate. - 59 - L’upload della busta dal computer dell’utente al Punto d’Accesso a cui si è autenticato, si traduce in termini tecnici nel progetto come l’upload dal browser client alla servlet PdA. Il caricamento della busta dal client è stato fatto usando una form HTML con i tag appositi per l’upload di file previsti in HTML 4. <FORM method="post" enctype="multipart/form-data" action="/PdA"> <INPUT type="file" name="percorso" size="20" > </FORM> il tag <INPUT type=”file”> corrisponde al livello di interfaccia utente sia ad un text box per inserire manualmente il path della busta su computer locale, sia al button Sfoglia che permette di selezionare il file della busta che si vuol trasmettere. Infatti esso apre una finestra standard per la selezione di un file all’interno del file system locale. Questa form ha impostato come valore di action la servlet PdA, premendo il button invia la request POST viene inoltrata alla servlet in questione. Con il metodo del file upload HTML il file da trasmettere viene allegato come parametro della request. Il canale di trasmissione è ovviamente http ma con protezione SSL. Quindi i dati della trasmissione sono cifrati rendendo sicuro l’upload. Figura 4.12 form HTML che permette l’upload della busta Quanto descritto fino adesso è solo quello che succede lato client, adesso viene spiegato cosa succede lato server, quindi alla ricezione della busta. Abbiamo già - 60 - detto che è la servlet PdA che si occupa di ricevere la busta e più precisamente di gestire la request. Una request HTTP viene incapsulata a livello di HTTP servlet come un oggetto della classe HTTPServletRequest. Una response HTTP viene incapsulata nell’oggetto di classe HTTPServletResponse. Il metodo doPost(…) della servlet ha come argomento proprio questi due oggetti. Il compito della servlet è: • ricevere la busta MIME • eseguire il parsing della richiesta Post per individuare ed estrarne la busta MIME • aprirla e prelevare il file InfoInoltro.xml • verificare la correttezza della destinazione • settare alcuni tag in questo file • salvare il file InfoInoltro.xml modificato e rimetterlo nella busta MIME • conservare sul database traccia del suo passaggio • inoltrare la nuova busta La ricezione della busta uploadata dalla jsp inviodoc.jsp avviene in automatico perché gestita dall’application server con il protocollo HTTP, infatti il primo compito della servlet è leggere la busta dalla richiesta Post. Ciò viene fatto eseguendo un parsing manuale della request Post (che altro non è che una struttura MIME di tipo “multipart/form-data”). La busta viene estratta in un array di byte. Per estrarre il file InfoInoltro.xml contenuto nella busta è stata realizzata una classe apposita “AnalizzatoreBustaMime” che fa uso delle api della Sun per parsare un file MIME (package javax.mail. e javax.mail.internet).Questa classe insieme alla classe AnalizzatoreDatiInoltro vengono descritti più accuratamente nel paragrafo Inoltro GC. Tramite un’istanza di AnalizzatoreBustaMime viene estratto il file InfoInoltro.xml in una variabile stringa. In seguito viene usata un’estensione (classe derivata) della classe AnalizztoreDatiInoltro (AnalizzatoreDatiInoltroPdA) per verificare la validità dei dati contenuti nel file xml e settare alcuni valori che deve definire il Punto d’Accesso. Questi valori vengono assegnati ad ogni busta che viene trasmessa dal PdA e servono per identificarla univocamente. I tre valore settati sono gli elementi figli del tag principale IdMsgPdA: CodicePdA, Anno, - 61 - IdMsg (vedi figura 4.6). Il CodicePdA è stato scelto inizialmente arbitrariamente e rimane invariato in tutte le buste trasmesse dallo stesso PdA. In questo caso, dato che il progettino tratta un solo Punto d’Accesso ed un solo Ufficio Giudiziario il valore di questo dato è ininfluente. Il valore del tag anno viene ovviamente dedotto e settato dal corrente timestamp fornito dall’application server del PdA. Il valore del tag IdMsg viene fornita dal database. Infatti, esso viene interrogato per prelevare un valore univoco non ancora assegnato. Una volta settati questi parametri, il nuovo file InfoInoltro.xml deve andare a sostituire il precedente file contenuto nella busta. Ciò viene fatto usando la classe che abbiamo precedentemente usato per prelevarlo (AnalizzatoreBustaMime). A questo punto la servlet deve registrare il passaggio di questa busta dal server. Una connessione al database viene presa dalla sessione che è stata creata nella servlet PreHomepage subito dopo l’autenticazione al sistema. Tale connessione viene passata al metodo dell’AnalizzatoreDati che si occupa della conservazione dei dati sul database. I dati vengono conservati nella tabella Trasmissione illustrata nella sezione riguardante il database in questo libro. Una volta registrato correttamente il log relativo alla busta in questione, essa viene reinserita nella request e inoltrata al Gestore Centrale (la servlet GC). 4.3.2 INOLTRO GC Prima di andare a descrivere il ruolo della servlet GestoreCentrale andiamo a spiegare il ruolo di due classi di cui si è parlato e che vengono usate anche in questa servlet, la classe AnalizzatoreBustaMime e la classe AnalizzatoreDatiInotro con relative sottoclassi. Sono state scritte queste due classi per organizzare meglio il codice all’interno dell’applicazione e in modo che si evitasse di andare a ripetere del codice che viene utilizzato più volte all’interno delle varie servlet principali. In effetti alcune operazioni sono ripetute e hanno aspetti che possono essere regolati da parametri come ad esempio l’estrapolazione dei dati dalla busta Mime, il - 62 - salvataggio di tali dati nelle varie tabelle ecc… Quindi anche per migliorare la leggibilità del codice sono state realizzate queste classi che vengono utilizzate direttamente nei metodi doGet() e doPost() delle servlet. Esse sono state implementate con un interfaccia la più semplice possibile, definendo pochi e concisi metodi. La classe AnalizzatoreBustaMime permette di gestire un flusso di dati MIME, e in particolare quello della busta in oggetto. La classe creata incapsula le classi del package javax.mail.internet e javax.mail di J2EE 1.3 per gestire file MIME, fornendo così un’interfaccia semplificata e diretta per le operazioni da eseguire sulla busta. Il costruttore della classe prende in input un InputStream nel quale vi è la busta, i metodi implementati sono i seguenti: getFileInfoInoltro(), getFileAtto(), setFileInfoInoltro(). I nomi dei metodi sono autodescrittivi, c’è solo da osservare che il file InfoInoltro.xml viene estratto e settato come String mentre per il file Atto.enc viene usato un array di byte. La classe AnalizzatoreDatiInoltro permette di gestire il contenuto del file xml InfoInoltro. Essa nel codice non viene usata direttamente ma bensì tramite due sue dirette sottoclassi, AnalizzatoreDatiInotroPdA e AnalizzatoreDatiInoltroGC (vedi figura 4.13). Queste classi usano le classi JDom e il parser Xerces per manipolare il file xml. I metodi della superclasse sono i seguenti: getDatoInoltro(), setDatoInoltro(), validaDati(). Essi servono per cambiare i dati contenuti nel file e per verificare la loro correttezza rispetto al DTD di InfoInoltro.xml. Sono state create le due sottoclassi in modo da implementare un nuovo metodo (salvaInDB()) che permette il salvataggio di questi dati nelle rispettive tabelle di Database del Punto d’Accesso e del Gestore Centrale. - 63 - Figura 4.13 schema sottoclassi della classe AnalizzatoreDatiInoltro Il codice della servlet GestoreCentrale interpreta il ruolo del Gestore Centrale. Essa riceve la request HTTP inoltra dal PdA. Il compito della servlet è: • ricevere la busta MIME • parsing della richiesta Post per estrarne la busta MIME • verificarne l’integrità al livello generale • verificare la correttezza della destinazione • registrazione del passaggio della busta • inoltrarla alla destinazione specificata La busta si trova sempre all’interno della request Post, quindi viene estratta in memoria. Viene verificata la sua integrità al livello generale, cioè viene eseguito un controllo sulla composizione della busta che verifica che vi siano sia il file InfoInoltro.xml, sia il file Atto.enc. Quindi viene aperto InfoInoltro.xml e viene letta e controllata la validità della destinazione. In seguito viene registrato nel database traccia del suo passaggio grazie al metodo salvaInDB() della classe AnalizzatoreDatiInoltroGC. La connessione al database non è quella usata dalla servlet PdA, ma una nuova prelevata dal datasource nel metodo init() della servlet. Viene prelevata una nuova connessione per sottolineare il fatto che nella realtà il Punto d’Accesso e il Gestore Centrale sono due entità divise fisicamente e quindi - 64 - ognuna ha la propria connessione al proprio database. Se è tutto in ordine la busta viene inoltrata alla destinazione finale (l’Ufficio Giudiziario). Da notare, come precisato precedentemente, che è stato realizzato un unico UG nell’ambito del progetto. Se vengono rilevati errori durante l’elaborazione del GC la busta semplicemente non viene inoltrata. 4.3.3 INOLTRO UG La servlet UG è il punto d’arrivo della busta MIME. Essa accede sia al database sia al repository per depositare la busta. La servlet esegue le seguenti operazioni: • ricevere la busta MIME • parsing della richiesta Post per estrarne la busta • creazione nome file univoco per la busta • salvataggio in repository • registrazione log dell’arrivo • conservare sul database traccia del suo passaggio • comunicazione all’utente dell’operazione effettuata Dopo l’analisi della request Post per estrarne la busta, viene fatto il solito controllo di integrità generale (controllo sulla composizione della busta). A questo punto la busta si trova in memoria ed è necessario conservarla nel repository intatta, così per come è arrivata. Comunque prima di ciò bisogna formulare il nome di riferimento con cui il file (la busta) verrà conservata all’interno del repository. Ovviamente questo dovrà essere univoco all’interno della directory del repository dove essa verrà conservata (vedi figura 4.7). Il nome da assegnare alla busta viene creato seguendo il formato: “numUnivoco_CodicePdA-IdMsg.eml”. Il numUnivoco viene stabilito dalla sequenza sul database, il CodicePda e l’IdMsg vengono l’atti dal file InfoInoltro.xml. Per ottenere il valore univoco dalla sequenza del database è stata creata una classe apposita SequenzaDB che viene descritta alla fine di questo paragrafo. Una volta creato il nome della busta è possibile conservare la busta nel repository. L’upload avviene tramite FTP, usando le classi della libreria opensource - 65 - “commons-net” della Apache. In questo caso non vi è la necessità della protezione del canale di trasmissione dato che il repository si trova sulla stessa macchina. In seguito viene registrato il log sul database dell’arrivo della busta e della sua conservazione in repository. Questo vuol dire che sul database insieme al record del log viene registrato il riferimento (nome assegnato) alla busta che si trova nel repository. La decifratura del file cifrato Atto.enc non è stata eseguita nel progetto perché questo file è cifrato con una chiave criptata con la chiave pubblica dell’Ufficio Giudiziario di destinazione. Viene comunque descritta la serie di passi che l’applicazione avrebbe dovuto compiere. Dopo la decifratura del file cifrato, il suo contenuto (atto, indice, allegati, ecc..) dovrebbe essere conservato nella directory Temp del repository. In seguito viene verificata la firma digitale apposta all’atto e quelle eventualmente apposte agli allegati. Se tutto è valido i vari files vengono smistati e conservati nelle apposite directory del repository (vedi figura 4.7). La classe SequenzaDB viene usata in questa servlet per prelevare un valore univoco dal database. Un valore non può essere prelevato direttamente in un interrogazione SQL al database, questo perché una sequenza Oracle può essere usata solo per inserire valori direttamente all’interno delle tabelle del database tramite istruzioni SQL di manipolazione (Insert o Update). La soluzione è stata creare una tabella ausiliaria nel quale effettuare temporaneamente l’inserimento del nuovo valore crescente della sequenza e subito dopo andare a prelevarlo con un interogazione SQL (max(valore)) per poterlo usare nel codice. La classe prende come parametro di input la connessione al database nel quale si trova la sequenza e il nome della sequenza. Il nome della tabella di ausilio è definito di default nella classe ma può essere impostato diversamente tramite un suo metodo. I metodi principali per ricavare i valori sono: getNext() e getCurrent. Il primo restituisce un nuvo valore univoco usando la procedura sopra descritta, mentre il secondo restituisce l’ultimo valore generato dalla sequenza. - 66 - • 4.4 AUTENTICAZIONE L’autenticazione al sistema è stato un problema ampiamente studiato in questo progetto. Infatti, in un primo tempo sono stati analizzati i vari meccanismi di autenticazione disponibili per una web application. Poi sono state studiate le tecnologie che usano questi sistemi, in effetti è da notare che al fine della realizzazione di un applicazione web con sistema di autenticazione non è necessario conoscere a fondo quali sono i meccanismi che permettono al sistema di accettare una richiesta di accesso da un utente. Questo perché l’autenticazione non è per forza un aspetto che bisogna direttamente sviluppare, infatti con la filosofia dichiarativa che offre la piattaforma J2EE è sufficiente sapere quali sono i requisiti che l’applicazione deve avere per poter usufruire del sistema di autenticazione scelto. L’autenticazione, diventa quindi un servizio offerto da un software come l’application server o altro server specializzato nel compito. La realizzazione dell’aspetto sicurezza e autenticazione, nel progetto sviluppato, si è basata proprio su queste idee. Prima di tutto vi è da specificare come un utente può accedere ad una web application qualsiasi e chi si occupa di gestire tali utenti a livello generale. La web application viene installata su un application server il quale, come dice il nome stesso, fornisce ai vari client che si connettono ad esso l’uso di un’applicazione ospitata. Questa affermazione fa capire subito che il primo soggetto ad aver a che fare con gli utenti è proprio l’application server. In effetti è lui che gestisce il servizio implementando direttamente il meccanismo d’autenticazione o facendo uso di un server remoto specifico per questo compito. Quindi l’application server si occupa di gestire l’accesso ad esso e di conseguenza anche alle sue applicazioni installate. Esso in qualche modo (anche facendo ricorso a server di autenticazione dedicati esterni) si occupa di identificare l’utente e gestire una policy di accesso alle applicazioni ospitate per definire chi può accedere cosa. Gli utenti che accedono alle applicazioni ospitate sono già stati in qualche modo filtrati. Seguendo sempre la filosofia dichiarativa per la sicurezza, nel momento in cui - 67 - andiamo a configurare i cosiddetti deployment descriptor per una particolare applicazione, ciò che facciamo è dire all’ambiente ospitante (l’application server) come esso si deve comportare nei confronti dell’applicazione ospitata e di quali servizi essa fa uso. Oltre la configurazione dell’applicazione nei confronti dei servizi offerti dall’application server, a seconda di quest’ultimo, è possibile specificare come vengono implementati questi servizi sul server. Nel nostro caso possiamo andare a specificare come deve essere implementato il servizio di autenticazione sul server. In particolare in WebSphere possiamo definire quale registro utente vogliamo usare per l’intero server. Ciò è configurabile tramite la console di amministrazione del server. Si può scegliere fra tre tipi di registri utente: sistema operativo, directory LDAP, personalizzato. Il servizio di directory (Oracle Internet Directory) è stato usato nel contesto del progetto. I vari sistemi di autenticazione disponibile sulla piattaforma J2EE sono stati elencati e descritti quando si parlava di sicurezza nel capitolo 3. Il sistema adottato nell’applicazione web è quello form-based con l’aggiunta della protezione SSL come garanzia della riservatezza delle credenziali fornite dall’utente. In particolare è stato usato anche il meccanismo di mutua autenticazione SSL. A questo punto è bene chiarire il significato dell’uso di queste tecnologie combinate insieme. Il meccanismo dell’autenticazione form-based fa uso di un nome utente e di una password che vengono trasmesse in chiaro al server. Il compito di SSL è la cifratura del canale di trasmissione tra browser e server, quindi delle credenziali trasmesse. La mutua autenticazione prevede che sia il client sia il server si autenticano alle relative controparti. Il processo di autenticazione SSL prevede come fase iniziale lo scambio dei certificati delle rispettive parti. In seguito ogni parte (il browser e il server) decide se ritenere valida l’identità del soggetto in base ad una propria policy di attribuzione di fiducia o meno alle autorità certificatici. Dopodiché se le parti si accettano viene creato il canale SSL. Da notare che l’uso dell’autenticazione mediante certificati digitale è parte integrante opzionale solo del protocollo SSL e quindi non può essere eseguita senza di questo. Le credenziali (nome utente e - 68 - password) vengono verificate tramite interrogazione al server LDAP. La figura successiva mostra a grandi linee i componenti nel processo di autenticazione per il sistema Figura 4.1 autenticazione con OID L'obiettivo finale è quello di fornire accesso alla servlet solo se l'utente fornisce le corrette credenziali: si deve quindi utilizzare un meccanismo che permetta l'autenticazione e la autorizzazione all'accesso a determinate risorse. Prendendo spunto dal meccanismo degli utenti e gruppi tipico di Unix, Java utilizza un sistema di autenticazione ed autorizzazione basato sui ruoli: solo dopo aver accertato che un utente appartiene ad un determinato ruolo, si potrà fornire l'accesso solo alle risorse (statiche o dinamiche) autorizzate per quel determinato ruolo. Una volta accertata l'identità dell'utente, il servlet container agisce utilizzando il concetto di security constraint, associando il ruolo ad un insieme di risorse. E necessario capire come avviene l’uso del servizio di autenticazione del server da parte dell’applicazione. Questo è definito in maniera standard nelle specifiche J2EE, infatti l’accesso ai servizi J2EE di un application server deve avvenire allo stesso modo su tutti i server J2EE compliant. La specifica prevede per l’autenticazione form-based la realizzazione di una pagina di login HTML o JSP contenente un form html con dei parametri standard: - 69 - <FORM method="post" action="j_security_check"> <INPUT type="text" name="j_username" size="20"> <INPUT type="password" name="j_password" size="20"> <INPUT type="submit" name="action" value="entra"> </FORM> L’azione di questo form deve corrispondere alla servlet “j_security_check”, essa è la servlet messa a disposizione dal server per effettuare l’autenticazione. La servlet prova a fare l’autenticazione al registro utenti del server se questa ha esito positivo l’accesso alla risorsa protetta viene consentito altrimenti l’utente viene redirezionata alla pagina di errore specificata nella configurazione. Per configurare un’applicazione ad usare l’autenticazione form-based bisogna specificare nel suo deployment descriptor l’intento di voler usare questo meccanismo e specificare la pagina di login e la pagina di errore che verrà presentata all’utente quando necessario. Le risorse (pagine HTML, JSP, servlet, ecc..) che devono essere protette e quindi essere accedute solo previa autenticazione e verifica dei permessi deve essere elencato sempre nel deployment descriptor. Per un approfondimento teorica sulla protezione delle risorse e i permessi degli utenti ad accedervi si rimanda alla discussione affrontata nel capitolo tre nella sezione sicurezza. Per quanto riguarda l’adozione di tale meccanismo all’interno della web application è stato necessario usare un accorgimento per il corretto funzionamento. Viene presentata la pagina di login nel momento in cui un utente richiede una determinata risorsa protetta, una volta aver verificato con esito positivo le credenziali dell’utente la servlet j_security_check inoltra l’utente alla risorsa precedentemente richiesta. Ma cosa succede, come nel nostro caso, quando la pagina protetta restituita dopo l’autenticazione non viene richiesta esplicitamente dall’utente? Ciò accade al primo accesso al sistema, infatti l’utente non richiama subito una pagina protetta bensì direttamente la pagina di login. La servlet non sa in quale pagina inoltrare l’utente, una volta effettuato il login, e magari viene rimandato alla pagina di default dell’applicazione (la pagina index.htm). Nel progetto la pagina in cui inoltrare - 70 - l’utente dipende proprio dal tipo di utente che si autentica. Quindi è necessario stabilire al volo in che pagina inoltrare l’utente subito dopo l’autenticazione della servlet ma prima dell’inoltro alla pagina di default. Questo viene reso possibile grazie ai cosiddetti filtri. Un filtro è un classe che può essere legata ad una o più servlet e permette di eseguire operazioni subito prima o subito dopo l’esecuzione di una servlet. Nel nostro caso è stato implementato un filtro che ha il compito di conservare nella sessione il nome utente inserito al momento del login in modo che la successiva servlet (PreHomepage) in base ad esso possa stabilire se dirottare l’utente sulla homepage dedicata all’amministratore oppure a quella dell’avvocato. La figura seguente spiega il flusso applicativo nel processo di autenticazione. Figura 4.2 l’autenticazione Gli utenti del sistema vengono conservati nel registro utenti che in questo caso è la directory LDAP. Le informazioni che è necessario archiviare nei nodi dipendono dal singolo sistema di autenticazione, da eventuali informazioni aggiuntive per la gestione dell'autorizzazione e da informazioni ausiliarie che si desidera associare agli utenti per la gestione. Possono essere previste anche ulteriori informazioni non strettamente necessarie per l'autenticazione ma utili per altri scopi. Come spiegato nella sezione “Le basi di dati” di questo capitolo i dati all’interno della directory vengono memorizzati in degli attributi che sono raggruppati in istanze di objectClass contenute nei nodi del DIT (struttura ad albero della directory). Nell’implementazione della struttura del DIT si è dovuto costruire una struttura relativamente semplice ma nella quale i nodi dedicati alla conservazione - 71 - degli utenti contenessero gli objectClass adeguati. La scelta è ricaduta sull’objectClass standard inetOrgPerson (RFC 2798). Ricordiamo che gli objectClass seguono gli stessi principi di derivazione ed ereditarietà della programmazione orientata agli oggetti. Quindi questo objectClass è un estensione (sottoclasse) di altri objectClass progettati per contenere dati sugli utenti come l’objectClass Person. inetOrgPerson che è stato realizzato per completare il precedente con gli attributi che negli anni si sono resi necessari, tra questi uno dei più interessanti è userCertificate per la conservazione di certificati digitali. I sistemi che utilizzano LDAP come base di dati per l'autenticazione, come nel nostro caso, hanno tipicamente tre parametri configurabili per l'accesso e la ricerca dei dati: • un nodo di inizio della ricerca che viene poi effettuata su tutti i figli. Talvolta è possibile specificare la profondità con la quale effettuare la ricerca. • un filtro di ricerca in base al quale selezionare i nodi contenenti informazioni utili al sistema di autenticazione, i filtri possono utilizzare lo standard LDAP (RFC 2254) che permette strutture anche sofisticate o più semplicemente solo sul tipo di objectClass del nodo. • Informazioni su come mappare gli attributi contenuti nel nodo con i dati necessari al sistema di autenticazione, ad esempio quale attributo è lo userid e quale è la password. Il mapping delle credenziali dell’utente agli attributi contenuti nel nodo può avvenire, a seconda del tipo di credenziali, in diversi modi. Ad esempio nel caso della nostra applicazione le credenziali di un utente sono il nome utente e la password. Quindi è stato settato nella configurazione del registro utenti (directory LDAP) del application server che l’attributo uid e l’attributo userPassword in un’entry utente devono essere confrontati con le credenziali al momento dell’autenticazione. Sul application server è stato anche settato un nodo - 72 - da dove iniziare le ricerche delle entry utente ed un filtro per selezionare solo le entry che rappresentano effettivamente degli utenti. Nel caso le credenziali sono certificati esistono due tipi di mapping. Un metodo consiste nel selezionare uno o più attributi del certificato e confrontarli per eseguire l’autenticazione con gli attributi contenuti nella directory. L’altro metodo invece mappa il subject del certificato al corrispondente DN nella directory • 4.5 SICUREZZA 4.5.1 ARCHITTETURA E stata implementata la sicurezza in modo prettamente dichiarativo per la web app. questo tramite i servizi di sicurezza J2EE offerti dall’application server. Questo paragrafo spiega quali sono stati i canali protetti relativi all’interazione dell’utente con il server, l’application server con il database e con il servizio di directory. Il protocollo che ha reso possibile la riservatezza dei dati all’interno del progetto è SSLv3. Esso infatti è stato applicato sui due protocolli di comunicazioni usati, HTTP e LDAP. I due protocolli diventano così protocolli sicuri di trasmissione perché alla loro base viene usato SSL per cifrare i dati. Essi vengono quindi chiamati rispettivamente HTTPS e LDAPS. Il supporto lato client per SSL viene offerto dal browser (MS Explorer o Mozilla). Dal lato server il supporto viene offerto dall’application server tramite un’architettura a provider. In effetti è possibile installare e specificare quale di questi deve essere utilizzato. Questi, come nel nostro caso dove è prevista la mutua autenticazione client server, vanno configurati per poter usare i contenitori delle chiave privati e dei certificati digitali presenti sul server. - 73 - Il server, per la gestione e conservazione dei certificati e delle chiave private proprie fa uso di opportuni “key store” che sono dei file protetti da password e cifrati. In particolare WebSphere si basa su due file, trust file e key file. Il trust file contiene tutti i certificati cui ritiene attendibile il soggetto. In particolare, vi sono tutti i certificati root delle autorità di certificazione a cui il server da fiducia, ma vi possono essere anche certificati di utenti specifici. Il key file contiene le proprie chiave private unitamente ai loro relativi certificati. Esso viene usato esclusivamente dal server in tutti quei processi che necessitano l’uso della chiave privata come ad esempio l’autenticazione server SSL. La robustezza del sistema per l’autenticazione basata su certificati digitali sta nel fatto che solo l’utente che possiede anche la chiave privata relativa al certificato presentato è in grado di completare un’autenticazione. Figura 4.3 schema autenticazione SSL 4.5.2 SMART CARD I protocolli nel progetto che fanno uso di certificati digitali, come l’SSL, sono stati interfacciati ad un dispositivo di crittografia esterno. Stiamo parlando della smart card. In particolare è stata usata la nuovissima Carta Nazionale dei Servizi (CNS) distribuita dall’ente certificatore delle camere di commercio. - 74 - Prima di proseguire è bene chiarire cosa sia una smart card. Una smart card è una scheda di plastica delle dimensioni di una carta di credito in cui è inserito un microprocessore. La smart card può essere considerato un vero è proprio computer essendo dotata anche lei di memoria (ROM, RAM e EEPROM), software e capacità elaborativi. La CNS contiene un certificato di autenticazione, le cui caratteristiche sono stabilite dalle regole tecniche, inoltre essa contiene anche un certificato per la firma digitale. Nell’ambito del progetto è stata usata sia per l’autenticazione SSL, sia attraverso il software Redattore Atti per la firma dei documenti. Per poter effettivamente utilizzare queste funzionalità all’interno dell’applicazione sono necessari altri componenti. Prima di tutto è necessario un lettore/scrittore di smart card compatibile con il protocollo di comunicazione PC/SC. E stato usato il lettore ACR38 e relativi driver PC/SC che hanno servono per interfacciare la periferica con il PC, permettendo così la comunicazione tra la carta e il sistema operativo. Inoltre perché un applicazione si interfacci in modo standard alla card potendo far cosi uso delle sue funzionalità è necessaria una libreria che fornisca le api della specifica smart card. Vi sono due principali tipi di architetture standard: cryptoki (o PKCS11) e cryptoApi (MS CAPI). Le PKCS#11 sono delle Application Programming Interface (API) che interfacciano dispositivi crittografici, non solo smart card ma tutti i dispositivi che memorizzano chiavi e sviluppano calcoli crittografici. Forniscono una interfaccia standard che è indipendente dal dispositivo crittografico per cui sono state sviluppate. Rendono le applicazioni in cui la crittografia è trattata con queste API largamente indipendenti dai dispositivi.Vincolano all’utilizzo del dispositivo crittografico per cui sono state sviluppate ovvero non consentono a smart card di differenti fornitori di poter operare sulla stessa piattaforma applicativa. Il compito della smart card è fungere da contenitore sicuro per la chiave privata e anche da unico ambiente per l’uso della chiave privata negli algoritmi. Essa - 75 - contiene anche i certificati di sottoscrizione e autenticazione. Tutte le operazioni di crittografia vengono eseguite direttamente all’interno di essa. Ad esempio per la firma di un file, ne viene calcolato l’hash e in seguito applicata la cifratura con la chiave privata. L’uso della chiave privata è protetto tramite un PIN che l’utente deve fornire ogni qualvolta viene richiesta un’operazione che comporti il suo uso. Questo è un ulteriore PIN oltre a quello della smart card stessa. - 76 - - 77 - - 78 - RIFERIMENTI BIBLIOGRAFIA -Il processo civile telematico di Francesco Buffa [Giuffrè Editore] -IBM WebSphere v5.0 Security Websphere Handbook (sg246573)[IBM-Redbooks] -Enterprise Java Security: Building Secure J2EE Applications 2004[Addison Wesley] -IBM Websphere Studio App Developer 5 Programming Guide - 2003[IBMRedbooks] -Java Servlet Programming 2001 2ed [OReilly] -XML in a Nutshell 2nd Ed 2002[Oreilly] -Understanding and Deploying LDAP Directory Services 2nd Ed 2003[Addison Wesley] -Inside Java 2 Platform Security 2nd Ed 2003[Addison Wesley] -Understanding PKI 2nd Ed 2002[Addison Wesley] -Smart Cards: The Developers Toolkit[Prentice Hall] -Internet Directory Administrator's Guide (a96574)[Oracle9i] - 79 - -Database Administrator guide for windows[Oracle9i] -RFC 822 - Standard for the format of ARPA Internet text messages -RFC 959 - FTP (File Transfer Protocol) -RFC 2045 - MIME Part One (Format of Internet Message Bodies) -RFC 2046 - MIME Part Two (Media Types) -RFC 2047 - MIME Part Three (Message Header Ext for Non-ASCII Text) -RFC 2048 - MIME Part Four (Registration Procedures) -RFC 2049 - MIME Part Five (Conformance Criteria and Examples) -RFC 2246 - The TLS Protocol Version 1_0 -RFC 2251 - LDAP v3 (Ligthweight Directory Access Protocol) -RFC 2252 - LDAP v3 (Attribute Syntax Definitions) -RFC 2253 - LDAP v3 (UTF-8 String representation of DN) -RFC 2254 - LDAP v3 (The String Representation of LDAP Search Filters) -RFC 2255 - LDAP v3 (The LDAP URL Format) -RFC 2256 - LDAP v3 (X_500 User Schema for use with LDAPv3) -RFC 2798 - Definition of the inetOrgPerson LDAP Object Class -RFC 2829 - LDAP v3 ( Authentication Methods for LDAP) -RFC 2830 - LDAP v3 (Extension for Transport Layer Security) -RFC 3377 - LDAP v3 (Technical Specification) -RFC 2315 - PKCS_7 (Cryptographic Message Sintax v1_5) -RFC 2630 - CMS (Cryptographic Message Syntax) [Obsolete] -RFC 2632 - S-MIME v3 (Certificate Handling) -RFC 2633 - S-MIME v3 (Message Specification) -RFC 3363 - CMS (Cryptographic Message Syntax) -RFC 3369 - CMS (Cryptographic Message Syntax) -RFC 3850 - S-MIME v3_1 (Certificate Handling) -RFC 3851 - S-MIME v3_1 (Message Specification) -RFC 3852 - CMS (Cryptographic Message Syntax) -RFC 2459 - Internet X_509 Public Key Infrastructure Certificate and CRL Profile - 80 - -RFC 2559 - Internet X_509 Public Key Infrastructure Operational Protocols LDAPv2 -RFC 2587 - Internet X_509 Public Key Infrastructure LDAPv2 Schema -RFC 3280 - X_509 PKI Certificate and CRL Profile -RFC 2617 - HTTP Authentication - Basic and Digest Access Authentication LEGGI -C.P.C. Codice di Procedura Civile -D.M. 14 ottobre 2004 Regole tecnico-operative per l'uso di strumenti informatici e telematici nel processo civile -D.P.R. 13-2-2001 n.123 Regolamento sull’uso di strumenti informatici e telematici nel processo civile, nel processo amministrativo e nel processo dinanzi alle sezioni giurisdizionali della corte dei conti -D.M. 24 maggio 2001 Regole procedurali per la tenuta dei registri informatizzati degli uffici -D.M. 27 marzo 2000 n. 264 Regolamento tenuta dei registri presso gli uffici giudiziari -D.P.R. 28 dicembre 2000, n. 445 Testo Unico delle disposizioni legislative e regolamentari in materia di documentazione amministrativa - 81 - RISORSE WEB -http://www.processotelematico.giustizia.it dal Ministero della Giustizia -http://www.interlex.com rivista giuridica online -http://www.card.infocamere.it/ autorità di Certificazione -http://www.jdom.org classi java per manipolazione dati XML -http://jakarta.apache.org/commons/ Apache components dove sono state trovate alcune classi utili come quella per l’FTP.. -http://java.sun.com/j2ee/index.jsp architettura J2EE -http://java.sun.com/products/servlet/index.jsp sito della sun sulle servlet -http://java.sun.com/products/jsp/index.jsp -sito della sun sulle jsp -http://forums.oracle.com/forums/forum.jsp?forum=47 sito di Oracle Forum per OID (Oracle Internet Directory) -http://forums.oracle.com/forums/forum.jsp?forum=154 - 82 - sito di Oracle, Forum su programmazione Java e XML -http://www.rsasecurity.com laboratori che hanno definito gli standard PKCS - 83 -