Comments
Description
Transcript
pdf - Dipartimento di Informatica
APACHE--SSL APACHE Panoramica su Apache Università degli Studi di Salerno Facoltà di Scienza MM. FF. NN. Corso di Laurea in Informatica, AA. 2001-2002 A cura di Andrea Del Papa, Antonio Esposito, Cristian Gagliardi, Gerardo Morrongiello, Luigi Calaselice. 1 2 Premessa Apache è un server HTTP freeware (completo di sorgenti C), sviluppato da un certo numero di programmatori. Cos’è Apache Un Web Server per il protocollo HTTP La prima versione, basata su server NCSA, è stata sviluppata nel 1995. Affidabile, compatto e funzionale Poiché era un insieme di patches sul server NCSA è stato chiamato un patchy server, da cui il nome Apache Server. Progettato per essere eseguito come processo standalone 3 4 Strumenti di Apache Apache mette a disposizione una serie di strumenti aggiuntivi: Sistemi di controllo d'accesso a più più livelli Integrazione Grazie alla struttura modulare e alle Apache API possiamo integrare Apache con vari applicativi: Uno dei più interessanti è PHP Generazione di statistiche variamente strutturate Linguaggio di programmazione che consente di integrare HTML ed SQL Possibilit à di “integrare Possibilità integrare”” l’HTML in modo dinamico(Server--Side Include) dinamico(Server 5 linguaggio per l'interrogazione di sistemi database quali Oracle. 6 1 Funzionalità e-commerce Panoramica su SSL Algoritmo per scelta del file più appropriato da restituire ad una richiesta del navigatore Content Negotiation Permette di selezionare la lingua del documento in base alla configurazione del browser-utente Language Negotiation Permette di dare dei nomi mnemonici alle proprie risorse e implementa redirezioni multiple tramite scrittura dell’url Aliasing & Redirect Virtual Host Support & Directory Name Interpolation Cookies Variabili impostate dal server per gestire il customer-tracking o la gestione di una “sessione” Message passing (GET,POS) Cookies Utile per gli ISP per ospitare siti diversi sullo stesso server, fornisce sistema per gestione di un sito e-commerce Consente all'utente di effettuare prenotazioni e pagamenti online, accesso ad account, dischi e database remoti, ecc. 7 8 Introduzione Funzionalità fondamentali Sicurezza del Collegamento SSL (Secure Socket Layer protocol) è un protocollo aperto e non proprietario. Nato al fine di garantire la privacy delle comunicazioni su Internet. Permette alle applicazioni client/server di comunicare in modo da prevenire le intrusioni, le manomissioni e le falsificazioni dei messaggi. Autenticazione Nelle connessioni può essere eseguita usando la crittografia a chiave pubblica (per es. RSA, DSS ecc. ) I dati vengono protetti utilizzando algoritmi di crittografia a chiave simmetrica (ad es. DES, RC4,) Il livello di trasporto include un controllo sull'integrità del messaggio basato su un apposito MAC che utilizza funzioni hash sicure (es. SHA, MD5) Affidabilità 9 10 Composizione del protocollo Permette al server ed al client di autenticarsi a vicenda e di negoziare un algoritmo di crittografia e le relative chiavi. Protocollo SSL Handshake - 1 L’handshake consente Al server di autenticarsi al client usando una tecnica a chiave pubblica. Al client ed al server di cooperare per la creazione delle chiavi simmetriche. Interfacciato su di un protocollo di trasporto affidabile come il TCP. E’ usato per l'incapsulamento dei dati provenienti dai protocolli superiori. Al client di autenticarsi al server. 11 12 2 Protocollo SSL Handshake - 2 Protocollo SSL Handshake - 3 Avvio di una connessione Avvio di una connessione Nel caso sia il client ad avviare la connessione Client Server Nel caso sia il server ad avviare la connessione Client Server “Hello Request” “Client Hello” “Client Hello” “Server Hello” “Server Hello” 13 14 Protocollo SSL Handshake - 4 Protocollo SSL Handshake - 5 Autenticazione Generazione delle chiavi Una volta avviata la fase di HELLO avviene l’autenticazione Client Server Avvenuta l’autenticazione si generano le chiavi Client Server “Server key exchange” “Request Certificate” “Client key exchange” “Request Certificate” “Server Hello done” “Verify Certificate” 15 16 Protocollo SSL Handshake - 6 Installazione di Apache Correttezza dati e Fine Si passa al controllo della correttezza dei dati ricevuti Client Server “Change CipherSpec” “Change CipherSpec” “Finished” “Finished” Fine fase di HandShake 17 18 3 Requisiti Richiesti • Installazione possibile su qualsiasi piattaforma Linux, Unix e NT Software Necessario • Webserver Apache versione 1.3.24 o superiore • OpenSSL insieme di librerie che implementano SSL versione 0.9.6d • E’ necessario essere amministratori del sistema per poterlo installare • Apache-SSL patch per rendere sicuro il webserver versione 1.48 • Nel caso sia già presente Apache occorre disinstallarlo 19 20 Installazione Installazione OpenSSL Dopo aver scaricato il software bisogna seguire i seguenti comandi: Passi da seguire per l’installazione: Ø tar xvzf openssl-0.9.6.tar.gz 1. Scaricare il software necessario da internet, cercando la versione più aggiornata dei vari pacchetti in modo da evitare di installare versioni su cui sono stati scoperti bug Ø cd openssl-0.9.6/ 2. Scompattare i vari pacchetti Ø make test 3. Procedere all’installazione Ø make install Ø ./config Scompatta la libreria OpenSSL Configura per la specifica Piattaforma Ø make Compila e Installa 21 22 OpenSSL Installazione Apache Apache--SSL - 1 • Funzionalità offerte dalla libreria OpenSSL ü Creazione di parametri per la generazione delle chiavi DSA, DH e DSA ü Creazione di certificati X.509, CSR (Certificate Signing Requests) e CRL (Certificate Revocation Lists) ü Calcolo dell’ hash di messaggi ü Cifratura e Decifratura ü SSL e TSL client/server test ü Gestione della firma e cifratura di e-mail Ø tar xvzf apache_1.3.24.tar.gz Ø cd apache_1.3.24 Scompatta il Server Apache Ø tar xvzf ../apache_1.3.24+ssl_1.48.tar.gz Ø ./FixPatch Applica la patch Ø ./configure --prefix=DIR* Scompatta la patch Apache-SSL Configura la directory di installazione * è la directory in cui vogliamo installare Apache-SSL 23 24 4 Installazione Apache Apache--SSL - 2 Installazione Apache Apache--SSL - 3 Se l’installazione è andata a buon fine comparirà la seguente schermata. Ø ./configure --prefix=DIR* --enable-module=rewrite --enable-shared=rewrite Abilita il modulo rewrite Ø make Ø make install Compila e Installa Ø ln -s DIR*/conf/httpsd.conf DIR*/conf/httpd.conf * è la directory in cui vogliamo installare Apache-SSL 25 26 Certificato SSL - 1 I certificati digitali sono un meccanismo avanzato per la distribuzione delle chiavi publiche. Lo standard che definisce il formato del certificato è X.509 v3. Una volta creato il certificato bisogna che questo sia firmato da un’autorità di certificazione (es. Verisign). Certificato SSL - 2 Passi da seguire per ottenere un certificato sono: 1) Crearsi, con l'ausilio di qualche toolkit (per esempio OpenSSL) una coppia di chiavi 2) Preparare una CSR (Certificate Signing Request) ovvero una richiesta di firma di un certificato 3) Inviare alla CA, ad esempio via e-mail, la CSR 27 28 Certificato SelfSigned - 1 Ø openssl genrsa -des -out webserver.ssl.key 1024 Genera una chiave privata con l’algoritmo RSA Cifra la chiava con l’algoritmo DES Certificato SelfSigned - 2 Generazione della chiave e del certificato per l’autorità di certificazione di prova “NostraCA” Numero di bit della chiave Øopenssl genrsa -des -out NostraCA.ca.key 2048 Chiave di 2048 bit Crea un nuova CSR Specifica la chiave privata per cui è stata creata la CSR Ø openssl req -new -key webserver.ssl.key -out webserver.ssl.csr 29 Crea un certificato di tipo self -signed invece che una CSR Ø openssl req -new -x509 -key NostraCA.ca.key -out NostraCA.ca.cert 30 5 Certificato SelfSigned - 3 Configurazione di Apache Eseguiamo la firma del certificato del webserver Usata per la firma di una CSR Chiave privata con la quale firmare Certificato della CA Ø openssl ca -keyfile NostraCA.ca.key -cert NostraCA.ca.cert in webserver.ssl.csr -out webserver.ssl.cert CSR da firmare Certificato del WebServer 31 32 Il file httpsd.conf - 1 •La configurazione di Apache avviene attraverso l’aggiunta di direttive di configurazione al file di testo “httpsd.conf” Configurazione del Webserver : ip •In questa presentazione faremo riferimento all’indirizzo “127.0.0.2” come indirizzo ip del sito •Il file si trova nella directory “DIR/conf” •Bisogna inserire una sola direttiva per ogni riga •“127.0.0.2” è un indirizzo di loopback, può essere usato solo per testare il sito su una macchina locale. •Per facilitare la procedura di configurazione è possibile sostituire il file “httpsd.conf” di default creato da apache con quello di esempio, usato da noi per il progetto : httpsd.conf e adattarlo alle proprie esigenze •Per pubblicare il sito su internet,bisogna sostituirlo con il reale indirizzo del sito 33 34 Le direttive di configurazione •La lista di tutte le direttive che si possono utilizzare è presente al seguente indirizzo : http://httpd.apache.org/docs/mod/directives.html Schema del file httpsd.conf Httpsd.conf Configurazione generale Configurazione del server Direttive SSL Virtual Hosts Port ServerName SSLCACertificatePath NameVirtualHost Listen DocumentRoot SSLCACertificateFile <VirtualHost …> ….. </VirtualHost> User.Group SSLCertificatePath •In questa presentazione illustreremo le più importanti SSLCertificateFile •Vedremo anche le direttive di configurazione specifiche per SSL, la lista completa si trova all’indirizzo : http://www.apache-ssl.org/docs.html SSLCertificateKeyFile SSLVerifyClient SSLDisable 35 36 6 Direttive di Apache : “Port “Port” ” e “Listen “Listen” ” •Le direttive “Port” e “Listen” indicano ad Apache gli indirizzi ip e le porte, su cui deve accettare le connessioni da parte dei client •La direttiva “Port”, serve a definire una porta diversa dalla porta “80” che è quella di default per comunicazioni http •La direttiva “Listen”, indica ad apache un indirizzo ip e una porta su cui accettare le connessioni. 37 Direttive di Apache : Uso di “Listen “Listen” ” •La sintassi della direttiva Listen è : Listen ip:porta Al posto di porta, inseriamo la porta sulla quale vogliamo accettare le connessioni Al posto di ip, inseriamo l’indirizzo ip del sito •Il valore porta può contenere solo i valori definiti tramite la direttiva Port, e la porta “80” •Nel nostro caso, aggiungiamo le righe : Listen 127.0.0.2:80 e Listen 127.0.0.2:443 39 Direttive di Apache : Uso di “ServerName “ServerName” ” Direttive di Apache : Uso di “Port “Port” ” •La sintassi della direttiva Port è : Port # Dove al posto di #,inseriamo il numero di porta che vogliamo definire. •Nel nostro caso inseriamo la riga Port 443 •Così facendo, definiamo la porta 443, che è la porta standard per le comunicazioni con SSL 38 Direttive di Apache : “ServerName “ServerName” ” •La direttiva “ServerName” specifica il DNS del sito •Se il sito non possiede un valido DNS, può essere utilizzato il suo indirizzo ip •Se si utilizza il sito solo su una macchina locale, si può utilizzare l’indirizzo di loopback o il DNS locale che nella maggior parte dei casi è “localhost” o “linux” 40 Direttive di Apache : “DocumentRoot “DocumentRoot” ” •La sintassi della direttiva ServerName è : ServerName DNS •La direttiva “DocumentRoot” indica la directory che contiene le pagine del sito. Dove al posto di DNS inseriamo il DNS del sito. •Nel nostro caso, abbiamo aggiunto la riga : ServerName Linux 41 •Tutte le richieste dei client verranno evase a partire dalla directory specificata da questa direttiva 42 7 Direttive di Apache : Uso di “DocumentRoot “DocumentRoot” ” Direttive di Apache : “User “User” ” e “Group “Group” ” •La sintassi di “DocumentRoot” è : DocumentRoot “directory” •Le direttive User e Group indicano rispettivamente, il nome utente e il gruppo con cui si collegano i client Dove al posto di directory, specifichiamo la directory che contiene le pagine del sito. •Nel nostro caso abbiamo aggiunto la riga DocumentRoot “DIR/htdocs” •E’ evidente che deve essere specificato un utente che ha permessi di accesso limitati 43 Direttive di Apache : Uso di “User “User” ” e “Group “Group” ” •La sintassi delle due direttive è : User utente 44 Direttive di Apache : I “virtual “virtual hosts hosts” ” •I “virtual hosts” sono un aspetto importante per il funzionamento del nostro sito Group gruppo Per un corretto funzionamento del Webserver, l’utente e il gruppo specificati devono essere presenti nel sistema; Nel nostro caso, aggiungiamo le righe : User nobody e Group nogroup •Vengono utilizzati per mantenere più domini sullo stesso server •Nel nostro caso ne abbiamo due, quello sicuro e quello non sicuro. 45 Direttive di Apache : I “virtual “virtual hosts hosts” ” •Per aggiungere dei “virtual host” al nostro server e configurarli, si usano le direttive 46 Direttive di Apache : “NameVirtualHost “NameVirtualHost” ” •Con la direttiva NameVirtualHost, possiamo aggiungere un “virtual host” •La sintassi è : NameVirtualHost <VirtualHost …> ……. </VirtualHost> Con NameVirtualHost si Definiscono i “virtual host” Con questa direttiva possiamo Configurare i singoli “ virtual host” 47 NameVirtualHost host:porta Dove al posto di host inseriamo il DNS del sito, se ne possiede uno, altrimenti inseriamo il suo indirizzo ip. Al posto di porta, inseriamo la porta sulla quale si deve mettere in “ascolto” il “virtual host”. •Nel nostro caso abbiamo aggiunto NameVirtualHost 127.0.0.2:80 NameVirtualHost 127.0.0.2:443 48 8 Direttive di Apache : “<VirtualHost “< VirtualHost …>” •Una volta aggiunti i “virtual host” che ci servono, passiamo alla loro configurazione •La configurazione viene effettuata per ogni “virtual host” e ognuna è indipendente dalle altre Direttive di Apache : “<VirtualHost “< VirtualHost …>” <VirtualHost host:porta> ….. ….. </VirtualHost> All’interno di questi tag possiamo Inserire qualsiasi direttiva di configurazione sia di Apache che di SSL •Per ogni “virtual host” da configurare, aggiungiamo le direttive di configurazione all’interno dei tag •Ogni direttiva inserita, si riferirà solo all’host che stiamo configurando. <VirtualHost host:porta> ….. ….. </VirtualHost> •E’ importante inserire la direttiva SSLDisable all’interno della configurazione dell’host non sicuro All’interno di questi tag possiamo Inserire qualsiasi direttiva di configurazione sia di Apache che di SSL 49 50 Direttive SSL Direttive SSL: SSLCACertificatePath e SSLCACertificateFile •Queste due direttive servono per specificare la posizione e il nome del certificato dell’autorità che ha firmato il certificato del Webserver, nel nostro caso si tratta dell’autorità di prova. •La sintassi è : • E’ la lista di tutte le direttive SSL • Quelle sottolineate in rosso sono le più importanti • Vediamole in dettaglio SSLCACertificatePath directory SSLCACertificateFile cert Dove directory e cert indicano rispettivamente la cartella contenente il certificato e il certificato vero e proprio. 51 52 Direttive SSL : SSLVerifyClient - 1 Direttive SSL: SSLCertificateFile e SSLCertificateKeyFile •Queste due direttive servono a localizzare il certificato e il file che contiene la chiave privata del Webserver •La sintassi è simile alle due direttive della slide precedente: SSLCertificateFile cert SSLCertificateFile keyfile •Questa direttiva serve a specificare le verifiche che il Webserver deve effettuare sui client prima di accettare la connessione. •La sintassi è : SSLVerifyClient # •Il tipo di verifica da effettuare è specificato da un numero da 0 a 3 che andiamo a sostituire a # Dove cert e keyfile indicano il file del certificato e quello della chiave 53 54 9 Direttive SSL : SSLVerifyClient - 2 Direttive SSL : SSLVerifyDepth e SSLDisable • 0 – Non è richiesto che il Client abbia un certificato valido •La direttiva SSLVerifyDepth serve a specificare di quanti livelli si deve salire nella verifica dei certificati, nell’albero di certificazione • 1 – Il Client può scegliere se esibire o meno un certificato valido •La sintassi è : • 2 – Il Client deve avere un certificato valido Dove al posto di #, indichiamo il numero dei livelli • 3 - Il Client può presentare un certificato valido ma non è richiesto che questo sia firmato da un’autorità di certificazione valida •La direttiva SSLDisable non ha opzioni è serve a disabilitare il protocollo SSL. Viene usata all’interno della configurazione del “virtual host” non sicuro SSLVerifyDepth # 55 56 Avviare Apache Il sito •Una volta configurato, Apache è pronto per essere eseguito la prima volta •Per fare ciò, ci spostiamo nella directory DIR/bin/ ed eseguiamo il comando ./httpsdctl start •Per terminare l’esecuzione di Apache, dalla directory DIR/bin/ digitiamo ./httpsdctl stop •Per effettuare un riavvio del Webserver, per esempio dopo la modifica del file di configurazione, digitiamo ./httpsdctl restart 57 58 Presentazione Caratteristiche principali Funzionalità Idea Principale: - Registrazione nuovo utente. - Transazioni sicure durante l’acquisto - Accesso all’area riservata ai clienti tramite utente e password. password. - Selezione dei prodotti da un listino. - Gestione Registro Clienti - Invio dei dati del mezzo di pagamento in maniera sicura - Gestione Carrello Virtuale per ogni utente connesso - Acquisto dei prodotti selezionati. - Gestione Listino Prezzi diviso per categoria di prodotto - Ricezione del preventivo. - Interfaccia grafica scalabile e leggera - Compatibile con qualunque browser per Internet 59 60 10 Installazione e Configurazione - 1 Per installare il sito è necessario essere amministratori del sistema. Installazione e Configurazione - 2 Impostazione dei permessi: Il sito è composto da un pacchetto di file compressi ed è già co nfigurato per essere eseguito da un host chiamato “ linux”. - Dare i permessi di scrittura/lettura/esecuzione alla directory digitando chmod 777. - Spostarsi all’interno della directory cd eurostore. Impostazione del nome dell’host: - Aprire il file etc/hosts. Copia dei file del sito: - Inserire la riga 127.0.0.2 linux. - Montare il cd con mount /cdrom. - Copia dei file nella directory del sito con cp /cdrom/eurostore/es.zip ./ - Scompattare i file digitando unzip es.zip * Creazione della directory del sito: - Smontare il cdrom con umount /cdrom - Spostarsi in DIR/httpsd/htdocs. - Eseguire mkdir eurostore. 61 62 Configurazione del sito Impostazione dei permessi ai file .cgi, .pm e al contatore dei numeri seriali: - chmod 755 *.cgi - chmod 755 *.pm - chmod 666 seriale.dat Funzionamento Per accedere alle funzionalità del sito, occorre aprire un browser (es. Netscape Communicator, …) Digitare come URL: http://linux/eurostore E’ necessario modificare il file di configurazione httpsd.conf per abilitare i permessi aggiungendo le seguenti righe: E’ consigliabile nominare subito un operatore di sistema il quale sarà l’unico che potrà gestire i preventivi. <Directory “/usr/local/httpsd/htdocs/eurostore”> Options +ExecCGI </Directory> Per completare l’installazione è necessario riavviare il web server. 63 64 Presentazione del sito Nella pagina principale sono presenti: Registrazione dell’operatore E’ necessario nominare un’ operatore di sistema per la gestione dei preventivi. Tale operatore deve registrarsi seguendo la seguente procedure: Una barra di comandi con i link alle pagine del sito liberamente visitabili. Una formper l’inserimento della UserID e della Password per i clienti registrati. 1. Aprire la pagina principale e cliccare sul pulsante . 2. Nel campo Nome inserire il testo “ registrazione operatore” 3. Nel campo User ID inserire il testo “sysop” 4. Nel campo Password inserire una password alfanumerica di almeno 6 caratteri. 5. Inviare il modulo ed attendere la connessione. . . Un pulsante per registrarsi 65 66 11 Registrazione nuovo utente Cliccando su si può accedere alla registrazione di un nuovo utente. Una volta compilati tutti i campi, l’utente è registrato e potra così accedere all’area riservata. Accesso all’area clienti Una volta registrati è possibile accedere all’area clienti attraverso il form. In quest’ area è possibile effettuare gli acquisti online. Verrà visualizzato subito un elenco di prodotti da poter selezionare. 67 68 Selezione prodotti Gestione prodotti Cliccando su una categoria, è possibile accedere a tutti i prodotti in es sa contenuti. Cliccando sul pulsante l’utente potrà accedere alla gestione del carrello, nella quale è possibile: • Controllare il contenuto del carrello • Modificare le quantità • Cancellare un prodotto dal carrello Per ogni prodotto sono specificate le caratteristiche principali . E’ possibile aggiungere un prodotto al carrello cliccando sul tasto oppure scrivere il numero di quantità nell’apposito box 69 70 Acquisto prodotti Cliccando sul pulsante si procede con l’acquisto dei prodotti selezionati nel carrello. Compilazione preventivo - L’utente compilerà il preventivo in ogni sua parte ed in particolare inserirà il proprio numero di carta di credito in modo sicuro. In tale procedura interverrà la connessione sicura, pertanto verrà visualizzato una finestra di avvertimento per l’utente La procedura di acquisto avviene in due fasi: - L’utente riceverà nel browser una copia del preventivo da stamp are e conservare. Infine l’utente è tenuto ad effettuare il logout e a ritornare nella pagina principale 71 72 12 Gestione dei preventivi Il sito in dettaglio La gestione dei preventivi è affidata all’operatore di sistema. Esso può: • Controllare il contenuto del preventivo • Stampare il preventivo • Convalidare il preventivo Anche in questa fase è necessaria la connessione sicura poiché v engono manipolati i numeri di carta di credito, pertanto l’operatore dovrà loggarsi usando come login sysop e password quella scelta durante la fase di registrazione. 73 74 Euro Store Store:: accesso al sito Euro Store Store:: schema principale Schema generale vetrina.html insert.cgi login.cgi index.html Il sito è suddiviso in due aree principali: carrello.cgi contact.html 1. Area ad accesso libero: aperto a tutti. 2. Area ad accesso riservato: solo per i clienti registrati. info.html register.cgi vetrina2.html prevent.cgi links.html acquista.cgi listino.html logout.cgi listino.cgi ACCESSO LIBERO ACCESSO RISERVATO 75 Euro Store Store:: le pagine ad accesso libero Offerte speciali e ultimi arrivi La Home Page vetrina.html Euro Store: script per la registazione START register.cgi index.html Script PERL-CGI per la registrazione di un nuovo cliente. contact.html info.html register.cgi RICEZIONE FORM CON DATI ANAGRAFICI NO Form per la registrazione di un nuovo cliente IL MODULO E’ CORRETTO? ERRORE DI COMPILAZIONE SI links.html Form per la scelta del listino prezzi diviso per categoria ACCESSO SICURO SSL 76 LA USERID E’ UNIVOCA ? NO USERID GIA’ ESISTENTE SI listino.html SI Lettura del listino prescelto dalla pagina listino.html listino.cgi END REGISTRAZIONE IN ARCHIVIO CLIENTI SI NO LA PASSWORD E’ VALIDA? SCELTA PWD ERRATA Le pagine dell’area ad accesso libero Le pagine dell’area ad accesso libero 77 78 13 Euro Store Store:: l’archivio clienti - 1 ARCHIVIO CLIENTI Come implementiamo l’archivio dei clienti ? Euro Store Store:: l’archivio clienti - 2 ARCHIVIO CLIENTI Attraverso una struttura dati molto usata nel linguaggio Perl: Come implementiamo l’archivio dei clienti ? HASH : Chiave Valore HASH SU FILE Array : Indice Valore ARCHIVIO : UserID HASH : Chiave Valore corrispondente: i dati del cliente registrato associato alla sua UserID Chiave dell’Hash Il valore di ogni elemento di un array è indicizzato da un intero positivo Valore Il valore di ogni elemento di un HASH è indicizzato da una chiave univoca, ad es. una stringa! Lettura di un record: $dati = $archivio{$userid} Scrittura di un record: $archivio{$userid} = $dati 80 79 Euro Store Store:: l’archivio clienti - 3 ARCHIVIO CLIENTI Scrittura: $archivio{$userid} = $dati = Stringa chiave con UserID di un utente. = Stringa record: tutti i campi del modulo concatenato con opportuno separatore (#) + Password criptata. $userid $dati “nome#cognome# indirizzo#telefono#…#email#passcrypt” Euro Store Store:: l’archivio clienti - 4 ARCHIVIO CLIENTI Lettura : $dati = $archivio{$userid} Dopo aver memorizzato i dati anagrafici di un utente, come accediamo ad essi ? Legge i campi del record concatenati col Sia $userid l’identificativo di un utente: separatore ‘#’ $dati = $archivio{$userid}; ($nome, $cognome, …, $passcrypt)= split /#/, $dati; Costruzione di $dati : $dati = join ‘#’, ($nome, $cognome, …, $passcrypt); Concatenazione dei campi del modulo in un’unica stringa Ritorna una lista di variabili (stringhe) usando i separatori. Ogni elemento è il valore di un campo del record. 81 82 Euro Store Store:: l’archivio clienti - 5 ARCHIVIO CLIENTI Dati_Cliente Euro Store Store:: le pagine ad accesso riservato Home Page dell’area riservata HASH o HASH SU FILE ??? index.html login.cgi insert.cgi E’ possibile memorizzare un Hash in un File ! carrello.cgi tie (%archivio, ‘SDBM_File’, ‘registro’); Apre/Crea il file registro facendolo corrispondere all’hash %archivio. Ogni operazione sull’hash è un I/O sul file. prevent.cgi vetrina2.html Gestione del carrello virtuale acquista.cgi logout.cgi %ARCHIVIO Inserimento merce nel carrello Acquisto della merce con transazione sicura REGISTRO.DIR REGISTRO.PAG Le pagine dell’area ad accesso riservato 83 84 14 Euro Store Store:: richiesta di login Richiesta di login con login.cgi Euro Store Store:: richiesta di inserimento - 1 Richiesta di inserimento di un prodotto con insert.cgi UTENTE UTENTE WEB SERVER index.html Output login.cgi Richiesta LOGIN (userid, password) WEB SERVER login.cgi login.cgi Richiesta di una pagina riservata (es.: insert.cgi) Insert.cgi Richiesta Cookie COOKIE Cookie (userid, data, ID_CARRELLO x) x COOKIE Insert.cgi : ELENCO PRODOTTI SELEZIONABILI Cookie (UserID , data, ID_CARRELLO x) Le pagine dell’area ad accesso riservato Le pagine dell’area ad accesso riservato 85 86 Euro Store: richiesta di inserimento - 2 Richiesta di inserimento di un prodotto con insert.cgi x Invio pagina richiesta Euro Store Store:: richiesta di acquisto - 1 Richiesta di acquisto in modalità sicura con acquista.cgi UTENTE UTENTE WEB SERVER WEB SERVER Richiesta di acquisto dei prodotti selezionati Insert.cgi : ELENCO PRODOTTI SELEZIONABILI Insert.cgi Richiesta inserimento prodotto y nel carrello COOKIE Cookie (UserID , data, ID_CARRELLO x) Esito dell’inserimento Cookie (UserID , data, ID_CARRELLO x) Acquista.cgi Tutto ciò avviene in connessione sicura ! INSERIMENTO PRODOTTO y IN CARRELLO x Le pagine dell’area ad accesso riservato Le pagine dell’area ad accesso riservato 87 88 Euro Store Store:: richiesta di acquisto - 2 Transazione sicura con acquista.cgi Euro Store Store:: richiesta di acquisto - 3 Richiesta di logout dopo l’acquisto, con logout.cgi UTENTE UTENTE WEB SERVER WEB SERVER INVIO DATI CARTA DI CERDITO Acquista.cgi Acquista.cgi Acquista.cgi Richiesta Cookie COOKIE x=y Stampa PREVENTIVO (con contenuto di x) x Insert.cgi Acquista.cgi Richiesta Cookie Richiesta Cookie COOKIE login.cgi Cookie (UserID , data, ID_CARRELLO x) Copia Preventivo generato Acquista.cgi RICHIESTA DI LOGOUT Logout.cgi Richiesta Cookie x=y REGISTRA PREVENTIVO NEL SERVER per carrello X COOKIE COOKIE Cookie (UserID , data, ID_CARRELLO x) Cancellazione del Cookie x=y x=y Index.html Le pagine dell’area ad accesso riservato Le pagine dell’area ad accesso riservato 89 90 15 Euro Store Store:: script per la login START START login.cgi LETTURA LETTURA DEL DEL COOKIE COOKIE (UserID, (UserID, DATA, DATA, ID ID x) x) COOKIE COOKIE DEFINITO? DEFINITO? NO LETTURA LETTURA PARAMETRI PARAMETRI USERID USERID ee PASSW PASSW USERID USERID ee PASSW PASSW VALIDI VALIDI ?? LETTURA LETTURA ARCHIVIO ARCHIVIO CLIENTI CLIENTI Euro Store Store:: il carrello virtuale - 1 ARCHIVIO ARCHIVIO CLIENTI CLIENTI = HASH SU FILE CARRELLO CARRELLO VIRTUALE VIRTUALE =? Creiamo un unico file come archivio di carrelli, e quindi un HASH SU FILE ! NO Carrello: UserID SI Prodotti inseriti SI LETTURA LETTURA CARRELLO CARRELLO xx CREAZIONE CREAZIONE CARRELLO CARRELLO xx CREAZIONE CREAZIONE E E INVIO INVIO COOKIE COOKIE (UserID, (UserID, DATA, DATA, ID ID x) x) Hash Chiave Valore Ma cos’è l’oggetto Prodotti inseriti ? STAMPA STAMPA MENU’ MENU’ CATEGORIE CATEGORIE PRODOTTI PRODOTTI END END ERRORE ERRORE 91 92 Euro Store Store:: il carrello virtuale - 2 Euro Store Store:: script per l’inserimento START START ARCHIVIO ARCHIVIO CARRELLI CARRELLI = HASH SU FILE insert.cgi Carrello: UserID %carrello Prodotti inseriti $userid $contenuto $contenuto := Stringa, contentente: ID Carrello + Coppie (codice, quantità) per ogni prodotto. LETTURA LETTURA PARAMETRI PARAMETRI E E COOKIE COOKIE (UserID, (UserID, DATA, DATA, ID ID x) x) COOKIE COOKIE DEFINITO? DEFINITO? ESISTE ESISTE CATEGORIA=y CATEGORIA=y ?? SI NO (codice_prodotto, quantità) SI LEGGI LEGGI COPPIE COPPIE (CODICE,Q.TA’) (CODICE,Q.TA’) DA DA PARAMETRI PARAMETRI “1234#skaudio155%2#skvideo209%1#…” INSERISCI INSERISCI COPPIE COPPIE NEL NEL CARRELLO CARRELLO xx 93 Se esiste il parametro INSERT, allora il suo valore è un array di coppie (Codice_Prodotto, Quantità). Vi è una coppia per ogni prodotto che l’utente ha SELEZIONATO ! SI LEGGI LEGGI COPPIE COPPIE (CODICE,Q.TA’) (CODICE,Q.TA’) DA DA PARAMETRI PARAMETRI END END 94 Euro Store Store:: l’archivio prodotti - 1 ESISTE ESISTE INSERT INSERT ?? STAMPA STAMPA PRODOTTI PRODOTTI CON CON LINK LINK AL AL CARRELLO CARRELLO xx ESISTE ESISTE INSERT INSERT ?? Array di coppie $contenuto = LETTURA LETTURA PRODOTTI PRODOTTI CATEGORIA CATEGORIA yy NO ERRORE ERRORE NO ID x = 1234 SI Euro Store Store:: l’archivio prodotti - 2 ACC.TXT ACC.TXT CAT. CAT. ACCESSORI ACCESSORI Semplici files di testo (uno per ogni categoria) 0 1 ARCHIVIO ARCHIVIO DEI DEI PRODOTTI PRODOTTI y … 2 3 PRO.TXT PRO.TXT CAT. CAT. PROCESSORI PROCESSORI ESISTE ESISTE CATEGORIA=y CATEGORIA=y ?? SI Come gestire l’archivio dei prodotti diviso per categoria ? LETTURA LETTURA PRODOTTI PRODOTTI CATEGORIA CATEGORIA yy Codice proip3800 proaxp20 . . . 95 Produttore Modello Versione Prezzo Intel Pentium III 800 Mhz Eur. AMD Athlon XP 2.0 Ghz Eur. 190.00 . . . . . . . . . 75.00 . . . 96 16 Euro Store Store:: script per il carrello virtuale START START LETTURA LETTURA PARAMETRI PARAMETRI E E COOKIE COOKIE (UserID, (UserID, DATA, DATA, ID ID x) x) COOKIE COOKIE DEFINITO? DEFINITO? Euro Store Store:: script per la transazione sicura START START SI NO carrello.cgi: gestione del carrello virtuale ESISTE ESISTE SI INC INC == C C oo DEC DEC == C C ?? QUANTITA’(C QUANTITA’(C)) += += 11 oppure oppure QUANTITA’(C QUANTITA’(C)) -= -= 11 AGGIORNA AGGIORNA Q.TA’ Q.TA’ DI DI C C NEL NEL CARRELLO CARRELLO xx COOKIE COOKIE DEFINITO? DEFINITO? SI LETTURA LETTURA ARCHIVIO ARCHIVIO DATI DATI (USERID) (USERID) LETTURA LETTURA CARRELLO CARRELLO xx END END REGISTRAZIONE REGISTRAZIONE PREVENTIVO PREVENTIVO GENERAZIONE GENERAZIONE PREVENTIVO PREVENTIVO END END STAMPA STAMPA MODULO MODULO PER PER LA LA COMPILAZIONE COMPILAZIONE DELLA DELLA CC. CC. STAMPA STAMPA ANTEPRIMA ANTEPRIMA PREVENTIVO PREVENTIVO LETTURA LETTURA ARC.PRODOTTI ARC.PRODOTTI NO NO ERRORE ERRORE acquista.cgi Connessione sicura ! LETTURA LETTURA PARAMETRI PARAMETRI E E COOKIE COOKIE (UserID, (UserID, DATA, DATA, ID ID x) x) ESISTE ESISTE AGGIORNA AGGIORNA ?? NO ERRORE ERRORE SI STAMPA STAMPA TUTTO TUTTO IL IL CARRELLO CARRELLO ESISTE ESISTE CARTA_CREDITO CARTA_CREDITO ?? SI END END LEGGI LEGGI COPPIE COPPIE (CODICE,Q.TA’) (CODICE,Q.TA’) DA DA PARAMETRI PARAMETRI AGGIORNA AGGIORNA COPPIE COPPIE NEL NEL CARRELLO CARRELLO xx 97 Euro Store Store:: l’archivio preventivi - 1 REGISTRAZIONE REGISTRAZIONE PREVENTIVO PREVENTIVO Come vengono registrati i preventivi ? Attraveso la consueta tecnica dell’Hash su File ! Chiave dell’Hash: UserID dell’acquirente. Valore: Contenuto del carrello + Informazioni sulla CC. 98 Euro Store Store:: l’archivio preventivi - 2 Il file seriale.dat Ogni preventivo è generato con un numero di serie univoco. Il file seriale.dat è un contatore di numero seriale ed è aperto in lettura/scrittura esclusiva, in modo tale che due o più processi non acquisiscano lo stesso numero di serie. Soltanto l’operatore di sistema può accedere ai preventivi memorizzati, attraverso lo script prevent.cgi. 99 Euro Store Store:: interfaccia del sito Il file interfaccia.pm Tutti gli script del sito accedono a tale file per acquisire le definizioni degli oggetti utilizzati. • Elenco delle librerie utilizzate. • Timeout per la connessione all’area riservata. • Elenco categorie della merce. • Nomi degli archivi generati. 100 Euro Store Store:: sicurezza contro attacchi DoS Prevenzione da Attacchi di tipo Denial of Service Le Form nelle pagine html sono potenzialmente dannose in caso di attacchi DoS. Il file interfaccia.pm limita l’uso del buffer di input per il web server che utilizziamo Nr. bytes massimo sul canale di ricezione. $CGI::POST_MAX=1024; $CGI::DISABLE_UPLOADS = 1; Upload di files disabilitati verso il web server. • Dominio web nel quale installare il sito. 101 102 17 Credits - 1 Università degli Studi di Salerno Facoltà di Scienza MM. FF. NN. Corso di Laurea in Informatica, AA. 2001-2002 Credits - 2 Università degli Studi di Salerno Facoltà di Scienza MM. FF. NN. Corso di Laurea in Informatica, AA. 2001-2002 Autori del Progetto Progetto per il Corso di Sicurezza su Reti Andrea Del Papa (56/100859) [email protected] Antonio Esposito (56/100984) [email protected] Docente del corso Cristian Gagliardi (56/100451) [email protected] Alfredo De Santis Gerardo Morrongiello (56/100473) [email protected] http://www.dia.unisa.it/ads.dir/index.html Luigi Calaselice (56/100983) [email protected] APACHE-SSL: Realizzazione di un sito con transazioni sicure 104 103 Credits - 3 Goodbye ! 105 18