Secure Simple Budget Manager Caso di studio Reti di Calcolatori CdL: Informatica e Tecnologie per la Produzione del Software A.A. 2009 2010
Outline Obiettivi e motivazioni Analisi Progettazione dell architettura Progettazione delle classi Progettazione della comunicazione in rete Progettazione della sorgente dati Implementazioni
Obiettivi e motivazioni Motivazioni Risolvere i seguenti problemi di una comunicazione client server: Obiettivi Certezza dell identità dell interlocutore Riservatezza dei dati trasmessi Protezione dalla manomissione Realizzare un applicazione client server che: Gestisca dati riservati e sensibili Utilizzi il protocollo Transport Layer Security
Analisi Secure Simple Budget Manager Applicazione esemplicativa e semplicativa di un sistema reale di gestione di dati sensibili e riservati: gestione delle entrate e delle uscite di una famiglia o di un individuo Funzionalità Gestione dell account utente (registrazione, visualizzazione, modifica ed eliminazione) Gestione delle entrate e delle uscite (inserimento, modifica, eliminazione e visualizzazione) Calcolo e visualizzazione del bilancio Gestione della sessione di lavoro (login e logout)
Analisi Requisiti informativi R.1 Utente R.2 Entrata R.3 Uscita R.4 Bilancio Vincoli sul formato (min/max caratteri, struttura, ) e sul valore (min/max valore ammesso, valori predefiniti, ) dei dati
Analisi Entità Utente MovimentazioneFinanziaria» IdentificatoreUnivoco» IdentificatoreElenco» Natura Bilancio» ParametriCalcolo Requisiti funzionali Descrizione degli scenari in cui si realizzano le funzionalità dell applicazione
Socket TCP + protocollo TLS Progettazione dell architettura LATO CLIENT Livello di presentazione LATO SERVER Livello di comunicazione in rete Livello di dominio Livello di dominio Livello di comunicazione in rete Livello di sorgente dati
Progettazione delle classi Classi e package Classi di utilità, utilizzate nello scambio di dati tra i livelli architetturali package ssbm.commons: DataContainer, DataContainersList; DataID; DomainConstraints; Entities, Services package ssbm.commons.exception: DatabaseException, DomainException, NetException, ServerException, SSBMSecurityException ssbm, avvio del client e del server: ClientMain, StartupManager4Client; ServerMain, StartupManager4Server ssbm.file, controllo dell esistenza dei file utilizzati dall applicazione e lettura del file di configurazione: FilesManager, ConfigXMLReader
Progettazione delle classi Classi e package del livello di presentazione ssbm.presentation.filters, gestione del filtraggio dei dati riportati nell interfaccia grafica: DataType, FieldMetadata, FieldMetadataFactory, FieldsContainer; Filter e relative sottoclassi; FilterManager, FilterChain ssbm.presentation.gui, gestione dell interfaccia grafica: Dispatcher, Helper, Controller; Form, Editable, EditableTable, Gettable, GettableTable, Searchable e classi che le implementano
Progettazione delle classi Classi e package del livello di comunicazione in rete ssbm.net, gestione degli aspetti condivisi della comunicazione in rete: TLSConnection; Reply, Request, NetMessageConstants ssbm.net.client, gestione del lato client della comunicazione client server: TLSConnection4Client, ClientEndpoint ssbm.net.server, gestione del lato server della comunicazione client server : TLSConnection4Server; ServerEndpoint, ServerEndpointThread
Progettazione delle classi Classi e package del livello di dominio ssbm.domain, punto di accesso al dominio e gestori dei servizi: BusinessDelegate, BusinessDelegate4Client, BusinessDelegate4Server; AuthenticationManager, InsertManager, UpdateManager, DeleteManager, GetManager ssbm.domain.entities, entità del dominio e relativa factory: Utente, MovimentazioneFinanziaria, Bilancio, EntitiesFactory Classi e package del livello di sorgente dati ssbm.db, gestione della connessione al database: DatabaseConnector, SQLStatementProvider ssbm.db.mapping, gestione del mapping tra le tavole del database e le entità del dominio: DataMapper e relative sottoclassi
Progettazione delle classi Diagramma delle classi e delle risorse del lato client dell applicazione (notazione UML-like)
Progettazione delle classi <<Interfacce Form>>: segnaposto per le classi e le interfacce della GUI
Progettazione delle classi Diagramma delle classi che rappresentano le interfacce grafiche dell applicazione (notazione UML-like)
Progettazione delle classi Diagramma delle classi e delle risorse del lato server dell applicazione (notazione UML-like)
Progettazione delle classi Dettaglio delle classi entità (notazione UML-like)
Progettazione delle classi Diagramma delle classi entità (notazione UML-like)
Progettazione delle classi Dettaglio delle classi e delle risorse dei livelli di dominio e sorgente dati (notazione UML-like)
Progettazione delle classi Diagramma delle classi e delle risorse dei livelli di dominio e sorgente dati (notazione UML-like)
Progettazione della comunicazione in rete Schema dell handshake TLS LATO CLIENT ClientHello Certificate ClientKeyExchange CerticateVerify ChangeCipherSpec Finished LATO SERVER ServerHello Certificate ServerKeyExchange CertificateRequest ServerHelloDone ChangeCipherSpec Finished
Progettazione della comunicazione in rete Autenticazione del client e del server Certificati X.509 Algoritmo per la generazione della coppia di chiavi pubblica e privata: DSA Algoritmo di hash: SHA-1 Lunghezza delle chiavi: 1024 bit X.500 DN del client: CN = SSBM Client OU = Software Design and Development O = Secure Simple Budget Manager L = Bitetto S = Bari C = IT X.500 DN del server: CN = SSBM Server OU = Software Design and Development O = Secure Simple Budget Manager L = Bitetto S = Bari C = IT
Progettazione della comunicazione in rete Politica di autenticazione dell utente Login (username e password) e logout Verifica della validità della provenienza delle richieste di servizio
Progettazione della comunicazione in rete Protocollo di comunicazione Formato dei messaggi: CODICE, INTESTAZIONE e CORPO Comandi (messaggi del client) Codici dei comandi Codice Categoria DEL uso GET uso LOGIN autenticazione LOGOUT autenticazione NEW uso REG autenticazione UPD uso
Progettazione della comunicazione Struttura dei comandi d uso: <codice> = {DEL, GET, NEW, UPD} <intestazione> = <corpo> = usr: username utente in rete entity: {Bilancio, MovimentazioneFinanziaria, Utente} se il codice del comando è DEL e l entità non è un utente: #[(id: ID esemplare da eliminare )+]# solo se; se il codice del comando è GET e l entità non è un utente: #[(<nome_parametro i >: <valore_parametro i > )]#, i itera sui parametri di ricerca; se il codice del comando è NEW o UPD: #[<nome_dato i >: <valore_dato i > ]#, i itera sui dati dell entità.
Progettazione della comunicazione in rete Struttura dei comandi di autenticazione: <codice> = LOGIN <intestazione> = usr: username dell account utente da autenticare psw: password dell account utente da autenticare ip: indirizzo IP del client <codice> = LOGOUT <intestazione> = usr: username dell account utente da autenticare <codice> = REG <intestazione> = usr: username dell account utente da registrare psw: password dell account utente da registrare ip: indirizzo IP del client
Progettazione della comunicazione in rete Risposte del server Codici degli esiti Codice Esito Servizio 700 POSITIVO DEL, NEW, UPD 702 POSITIVO GET 703 POSITIVO GET (nessun risultato) 707 POSITIVO REG 710 POSITIVO LOGIN 720 POSITIVO LOGOUT 300 NEGATIVO TUTTI (errore di dominio) 301 NEGATIVO TUTTI (errore interno del server)
Progettazione della comunicazione in rete Struttura dei messaggi: <codice> = {300, 301} <intestazione> = msg: messaggio esplicativo errore <codice> = 702 <corpo> = (#[<nome_dato i >: <valore_dato i >]# )+, i itera sui dati dell entità. <codice> = {700, 703, 710, 720, 707}.
Progettazione della comunicazione in rete Schema dello scambio dei messaggi LATO CLIENT Handshake TLS Comando Chiusura connessione TLS LATO SERVER Handshake TLS Risposta Chiusura connessione TLS
Progettazione della sorgente dati Diagramma delle dipendenze
Progettazione della sorgente dati Schema del database (diagramma ER)
Implementazione Generazione dei certificati e dei keystore 1. Costruzione del keystore 2. Estrazione del certificato di chiave pubblica 3. Esportazione nel truststore dell altro host
Implementazione Generazione dei certificati e dei keystore 1. Costruzione del keystore 2. Estrazione del certificato di chiave pubblica 3. Esportazione nel truststore dell altro host client e server
Implementazione Generazione dei certificati e dei keystore 1. Costruzione del keystore fake host 2. Estrazione del certificato di chiave pubblica 3. Esportazione nel truststore dell altro host
Implementazione 1. Costruzione del keystore $ keytool -genkeypair -alias ssbmclient -validity 400 storetype jceks -keystore C:\certs\ssbmClientKey -keypass ssbm_client_k - storepass ssbm_client_ks
Implementazione 2. Estrazione del certificato di chiave pubblica $ keytool -exportcert -alias ssbmclient keystore C:\certs\ssbmClientKey -storetype jceks -file C:\certs\ssbmClient.cer
Implementazione 3. Esportazione nel truststore dell altro host $ keytool -importcert -alias -trustedserver -file C:\certs\ssbmServer.cer -keystore C:\certs\trustedCert4Client - storetype jceks -keypass ssbm_trust4client_k -storepass ssbm_trust4client_ks
Implementazione Realizzazione della classe ssbm.net.tlsconnection Astratta per consentire specializzazione del lato client (TLSConnection4Client) e del lato server (TLSConnection4Server) Incapsulamento di un esemplare di javax.net.ssl.sslengine e di un esemplare di java.nio.channels.socketchannel
Implementazione Costruttore della classe ssbm.net.tlsconnection Imposta canale socket Imposta esemplare di javax.net.ssl.sslengine Alloca buffers Richiamato nei costruttori delle sottoclassi
Implementazione Costruttore della classe ssbm.net.tlsconnection Imposta canale socket Imposta esemplare di javax.net.ssl.sslengine Alloca buffers Richiamato nei costruttori delle sottoclassi
ssbm.net.client.clientendpoint costruzione canale socket
ssbm.net.server.serverendpoint costruzione canale socket
Implementazione Costruttore della classe ssbm.net.tlsconnection Imposta canale socket Imposta esemplare di javax.net.ssl.sslengine Alloca buffers Richiamato nei costruttori delle sottoclassi
Implementazione ssbm.net.client.tlsconnection4client costruzione esemplare SSLEngine
Implementazione ssbm.net.client.tlsconnection4client costruzione esemplare SSLEngine
Implementazione Costruttore della classe ssbm.net.tlsconnection Imposta canale socket Imposta esemplare di javax.net.ssl.sslengine Alloca buffers Richiamato nei costruttori delle sottoclassi
Implementazione Costruttore della classe ssbm.net.tlsconnection Imposta canale socket Imposta esemplare di javax.net.ssl.sslengine Alloca buffers Richiamato nei costruttori delle sottoclassi
Implementazione Struttura e funzionamento di un esemplare di javax.net.ssl.sslengine SSLEngine Dati applicativi Dati di rete outboundappldata wrap() outboundnetdata inboundappldata Dati di handshake o di chiusura Dati di handshake o di chiusura Gestione degli stati Meccanismi di crittografia e di hashing conformi ai protocolli SSL e TLS unwrap() inboundnetdata
Implementazione ssbm.net.tlsconnection recezione dei dati applicativi
Implementazione ssbm.net.tlsconnection invio dei dati applicativi
ssbm.net.tlsconnection gestione handshake TLS
Implementazione ssbm.net.tlsconnection gestione unwrapping
Implementazione ssbm.net.tlsconnection gestione wrapping
Implementazione ssbm.net.tlsconnection esecuzione task ausiliari ssbm.net.tlsconnection ridimensionamento del buffer ssbm.net.tlsconnection riavvolgimento del buffer
Implementazione ssbm.net.tlsconnection gestione lettura dati applicativi
Implementazione ssbm.net.tlsconnection gestione scrittura dati applicativi I
Implementazione ssbm.net.tlsconnection gestione scrittura dati applicativi II
Implementazione ssbm.net.tlsconnection lettura dal canale socket
Implementazione ssbm.net.tlsconnection scrittura sul canale socket
Implementazione ssbm.net.tlsconnection chiusura connessione ssbm.net.tlsconnection chiusura TLS Engine
Implementazione ssbm.net.tlsconnection chiusura flusso di output della TLS Engine
Implementazione ssbm.net.tlsconnection chiusura flusso di input della TLS Engine
Screenshot dell applicazione Finestra di login
Screenshot dell applicazione Errore nel login
Screenshot dell applicazione Finestra di registrazione
Screenshot dell applicazione Finestra principale
Screenshot dell applicazione Form per la modifica dei dati dell account dell utente
Screenshot dell applicazione Form per l inserimento di una movimentazione (entrata)
Implementazione Messaggio informativo (inserimento di una movimentazione uscita)
Screenshot dell applicazione Form per la modifica dei dati di una movimentazione (entrata)
Screenshot dell applicazione Form per l eliminazione di una o più movimentazioni (entrate)
Screenshot dell applicazione Messaggio di errore nel form principale
Screenshot dell applicazione Form per il calcolo e la visualizzazione del bilancio
Screenshot dell applicazione Certificato server non valido messaggio della finestra di login
Screenshot dell applicazione Certificato server non valido output sul prompt dei comandi (lato server)
Screenshot dell applicazione Certificato server non valido output sul prompt dei comandi (lato client)
Screenshot dell applicazione Certificato client non valido messaggio della finestra di login
Screenshot dell applicazione Certificato client non valido output sul prompt dei comandi (lato server)
Screenshot dell applicazione Certificato client non valido output sul prompt dei comandi (lato client)