1
APACHEAPACHE--SSLSSL
1
Università degli Studi di SalernoFacoltà 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.
2
Panoramica su ApachePanoramica su Apache
3
PremessaPremessa
Apache è un server HTTP freeware(completo di sorgenti C), sviluppato da un certo numero di programmatori.
Poiché era un insieme di patches sul server NCSA è stato chiamato un patchyserver, da cui il nome Apache Server.
La prima versione, basata su server NCSA, è stata sviluppata nel 1995.
4
Cos’è ApacheCos’è Apache
Un Web Server per il protocollo HTTP
Affidabile, compatto e funzionale
Progettato per essere eseguito come processo standalone
5
Strumenti di ApacheStrumenti di Apache
Apache mette a disposizione una serie di strumenti aggiuntivi:
Sistemi di controllo d'accesso a piSistemi di controllo d'accesso a piùù livellilivelli
Generazione di statistiche variamente strutturateGenerazione di statistiche variamente strutturate
PossibilitPossibilitàà di di ““integrareintegrare”” ll’’HTML in modo HTML in modo dinamico(Serverdinamico(Server--Side Include)Side Include)
6
IntegrazioneIntegrazione
Grazie alla struttura modulare e alle Apache API possiamo integrare Apache con vari applicativi:
Uno dei più interessanti è PHP
Linguaggio di programmazione che consente di integrare HTML ed SQL
linguaggio per l'interrogazione di sistemi
database quali Oracle.
2
7
Funzionalità Funzionalità ee--commercecommerce
Content Negotiation
Language Negotiation
Aliasing & Redirect
Virtual Host Support & Directory Name Interpolation
Cookies
Message passing (GET,POS) Cookies
Algoritmo per scelta del filepiù appropriato da restituire
ad una richiesta del navigatore
Permette di selezionare la lingua del documento in base
alla configurazione del browser-utente
Permette di dare dei nomi mnemonici alle proprie risorse e implementa redirezioni multiple
tramite scrittura dell’url
Utile per gli ISP per ospitare siti diversi sullo stesso server,
fornisce sistema per gestione di un sito e-commerce
Variabili impostate dal server per gestire il customer-trackingo la gestione di una “sessione”
Consente all'utente di effettuare prenotazioni e pagamenti
online, accesso ad account, dischi e database remoti, ecc.
8
Panoramica su SSLPanoramica su SSL
9
IntroduzioneIntroduzione
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.
10
Funzionalità fondamentaliFunzionalità fondamentali
Sicurezza del Collegamento
Autenticazione
Affidabilità
Il livello di trasporto include un controllo
sull'integrità del messaggio basato su un apposito
MAC che utilizza funzioni hash sicure (es. SHA,
MD5)
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,)
11
Composizione del protocolloComposizione del protocollo
Interfacciato su di un protocollo di trasporto affidabile come il TCP.
E’ usato per l'incapsulamento dei dati provenienti dai protocolli
superiori.
Permette al server ed al client di autenticarsi a
vicenda e di negoziare un algoritmo di crittografia e
le relative chiavi.
12
Protocollo SSL Protocollo SSL HandshakeHandshake -- 11
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.
Al client di autenticarsi al server.
3
13
Protocollo SSL Protocollo SSL HandshakeHandshake -- 22
Avvio di una connessione
Client Server
Nel caso sia il client ad avviare la connessione
“Client Hello”
“Server Hello”
14
Protocollo SSL Protocollo SSL HandshakeHandshake -- 33
Avvio di una connessione
Client Server
Nel caso sia il server ad avviare la connessione
“Client Hello”
“Hello Request”
“Server Hello”
15
Protocollo SSL Protocollo SSL HandshakeHandshake -- 44
Autenticazione
Client Server
Una volta avviata la fase di HELLO avviene l’autenticazione
“Request Certificate”
“Request Certificate”
“VerifyCertificate”
16
Protocollo SSL Protocollo SSL HandshakeHandshake -- 55
Generazione delle chiavi
Client Server
Avvenuta l’autenticazione si generano le chiavi
“Client key exchange”
“Server key exchange”
“Server Hello done”
17
Protocollo SSL Protocollo SSL HandshakeHandshake -- 66
Correttezza dati e Fine
Client Server
Si passa al controllo della correttezza dei dati ricevuti
“Change CipherSpec”
“Change CipherSpec”
“Finished”“Finished”
Fine fase di Fine fase di HandShakeHandShake
18
Installazione di ApacheInstallazione di Apache
4
• Installazione possibile su qualsiasi piattaforma Linux, Unix e NT
• E’ necessario essere amministratori delsistema per poterlo installare
• Nel caso sia già presente Apache occorredisinstallarlo
19
Requisiti RichiestiRequisiti Richiesti
• Webserver Apache versione 1.3.24 o superiore
• OpenSSL insieme di librerie che implementanoSSL versione 0.9.6d
• Apache-SSL patch per rendere sicuro ilwebserver versione 1.48
20
Software Necessario
Passi da seguire per l’installazione:
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
2. Scompattare i vari pacchetti
3. Procedere all’installazione
21
InstallazioneInstallazione
Ø tar xvzf openssl-0.9.6.tar.gz
Ø cd openssl-0.9.6/
Ø ./config
Ømake
Ømake test
Ømake install
22
Installazione OpenSSLInstallazione OpenSSL
Dopo aver scaricato il software bisogna seguire i seguenti comandi:
Scompatta la libreria OpenSSL
Configura per la specifica
Piattaforma
Compila e Installa
23
OpenSSL
• 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
Ø tar xvzf ../apache_1.3.24+ssl_1.48.tar.gz
Ø ./FixPatch
Ø ./configure --prefix=DIR*
24
Installazione Installazione ApacheApache--SSLSSL -- 11
* è la directory in cui vogliamo installare Apache-SSL
Scompatta il Server Apache
Scompatta la patchApache-SSL
Applica la patch
Configura la directory di installazione
5
Ø ./configure --prefix=DIR* --enable-module=rewrite
--enable-shared=rewrite
Ømake
Ømake install
Ø ln -s DIR*/conf/httpsd.conf DIR*/conf/httpd.conf
25
Installazione Installazione ApacheApache--SSLSSL -- 22
* è la directory in cui vogliamo installare Apache-SSL
Abilita il modulo rewrite
Compila e Installa
26
Installazione Installazione ApacheApache--SSLSSL -- 33
Se l’installazione è andata a buon fine comparirà la seguente schermata.
27
Certificato SSL Certificato SSL -- 11
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).
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 SigningRequest) ovvero una richiesta di firma di un certificato
3) Inviare alla CA, ad esempio via e-mail, la CSR
28
Certificato SSL Certificato SSL -- 22
Ø openssl genrsa -des -out webserver.ssl.key 1024
29
Certificato Certificato SelfSignedSelfSigned -- 11
Genera una chiave privata con l’algoritmo RSA
Cifra la chiava con l’algoritmo DES
Numero di bit della chiave
Ø openssl req -new -key webserver.ssl.key -out webserver.ssl.csr
Crea un nuova CSRSpecifica la chiave privata per cui è stata creata la CSR
Generazione della chiave e del certificato per l’autorità di certificazione di prova “NostraCA”
30
Certificato Certificato SelfSignedSelfSigned -- 22
Ø openssl req -new -x509 -key NostraCA.ca.key-out NostraCA.ca.cert
Crea un certificato di tipo self -signedinvece che una CSR
Øopenssl genrsa -des -out NostraCA.ca.key 2048
Chiave di 2048 bit
6
Eseguiamo la firma del certificato del webserver
31
Certificato Certificato SelfSignedSelfSigned -- 33
Øopenssl ca -keyfile NostraCA.ca.key -cert NostraCA.ca.cert -in webserver.ssl.csr -out webserver.ssl.cert
Usata per la firma di una CSR
Chiave privata con la quale firmare
Certificato della CA
CSR da firmare Certificato del WebServer
32
Configurazione di ApacheConfigurazione di Apache
33
Il file Il file httpsd.confhttpsd.conf -- 11
•La configurazione di Apache avviene attraversol’aggiunta di direttive di configurazione al file di testo “httpsd.conf”
•Il file si trova nella directory “DIR/conf”
•Bisogna inserire una sola direttiva per ogni riga
•Per facilitare la procedura di configurazione è possibile sostituire il file “httpsd.conf” di default creato da apachecon quello di esempio, usato da noi per il progetto : httpsd.conf e adattarlo alle proprie esigenze
34
Configurazione del Configurazione del WebserverWebserver : : ipip
•In questa presentazione faremo riferimento all’indirizzo “127.0.0.2” come indirizzo ip del sito
•“127.0.0.2” è un indirizzo di loopback, può essere usato solo per testare il sito su una macchina locale.
•Per pubblicare il sito su internet,bisogna sostituirlo con il reale indirizzo del sito
35
Le direttive di configurazioneLe 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
•In questa presentazione illustreremo le più importanti
•Vedremo anche le direttive di configurazione specifiche per SSL, la lista completa si trova all’indirizzo : http://www.apache-ssl.org/docs.html
36
Schema del file Schema del file httpsd.confhttpsd.conf
Httpsd.conf
Configurazionegenerale
Configurazionedel server
Direttive SSL Virtual Hosts
Port ServerName SSLCACertificatePath NameVirtualHost
Listen DocumentRoot SSLCACertificateFile
SSLCertificatePath
SSLCertificateFile
SSLCertificateKeyFile
SSLVerifyClient
SSLDisable
<VirtualHost …>…..
</VirtualHost>
User.Group
7
37
Direttive di Apache : “Direttive di Apache : “PortPort” e “” e “ListenListen””
•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.
38
Direttive di Apache : Uso di “Direttive di Apache : Uso di “PortPort””
•La sintassi della direttiva Port è :
Port #
•Nel nostro caso inseriamo la riga Port 443
•Così facendo, definiamo la porta 443, che è la porta standard per le comunicazioni con SSL
Dove al posto di #,inseriamo il numero di porta che
vogliamo definire.
39
Direttive di Apache : Uso di “Direttive di Apache : Uso di “ListenListen””
•La sintassi della direttiva Listen è :
Listen ip:porta
•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
Al posto di ip, inseriamol’indirizzo ip del sito
Al posto di porta , inseriamo la porta sulla quale vogliamoaccettare le connessioni
40
Direttive di Apache : “Direttive di Apache : “ServerNameServerName””
•La direttiva “ServerName” specifica il DNS del sito
•Se il sito non possiede un valido DNS, può essereutilizzato 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”
41
Direttive di Apache : Uso di “Direttive di Apache : Uso di “ServerNameServerName””
•La sintassi della direttiva ServerName è :
ServerName DNS
•Nel nostro caso, abbiamo aggiunto la riga : ServerName Linux
Dove al posto di DNS inseriamo il DNS del sito.
42
Direttive di Apache : “Direttive di Apache : “DocumentRootDocumentRoot” ”
•La direttiva “DocumentRoot” indica la directoryche contiene le pagine del sito.
•Tutte le richieste dei client verranno evase a partire dalla directory specificata da questa direttiva
8
43
Direttive di Apache : Uso di “Direttive di Apache : Uso di “DocumentRootDocumentRoot””
•La sintassi di “DocumentRoot” è :
DocumentRoot “directory”
•Nel nostro caso abbiamo aggiunto la rigaDocumentRoot “DIR/htdocs”
Dove al posto di directory, specifichiamola directory che contiene le pagine del sito.
44
Direttive di Apache : “Direttive di Apache : “UserUser” e “” e “GroupGroup””
•Le direttive User e Group indicano rispettivamente, il nome utente e il gruppo con cui si collegano i client
•E’ evidente che deve essere specificato un utente che ha permessi di accesso limitati
45
Direttive di Apache : Uso di “Direttive di Apache : Uso di “UserUser” e “” e “GroupGroup””
•La sintassi delle due direttive è : User utente
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
46
Direttive di Apache : I “Direttive di Apache : I “virtualvirtual hostshosts””
•I “virtual hosts” sono un aspetto importante per il funzionamento del nostro sito
•Vengono utilizzati per mantenere più domini sullo stesso server
•Nel nostro caso ne abbiamo due, quello sicuro e quello non sicuro.
47
Direttive di Apache : I “Direttive di Apache : I “virtualvirtual hostshosts””
•Per aggiungere dei “virtual host” al nostro server e configurarli, si usano le direttive
NameVirtualHost <VirtualHost …>…….</VirtualHost>
Con NameVirtualHost siDefiniscono i “virtual host”
Con questa direttiva possiamoConfigurare i singoli “ virtual host”
48
Direttive di Apache : “Direttive di Apache : “NameVirtualHostNameVirtualHost””
•Con la direttiva NameVirtualHost, possiamo aggiungereun “virtual host”
•La sintassi è : 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 devemettere in “ascolto” il “virtual host”.
•Nel nostro caso abbiamo aggiuntoNameVirtualHost 127.0.0.2:80NameVirtualHost 127.0.0.2:443
9
49
Direttive di Apache : “<Direttive di Apache : “<VirtualHostVirtualHost …>”…>”
•Una volta aggiunti i “virtual host” che ci servono, passiamoalla loro configurazione
•La configurazione viene effettuata per ogni “virtual host” e ognuna è indipendente dalle altre
•Per ogni “virtual host” da configurare, aggiungiamo le direttive di configurazione all’interno dei tag
<VirtualHost host:porta>…..…..</VirtualHost>
All’interno di questi tag possiamo Inserire qualsiasi direttiva di configurazione sia di Apache chedi SSL
50
Direttive di Apache : “<Direttive di Apache : “<VirtualHostVirtualHost …>”…>”
<VirtualHost host:porta>…..…..</VirtualHost>
•Ogni direttiva inserita, si riferirà solo all’host che stiamo configurando.
•E’ importante inserire la direttiva SSLDisable all’interno dellaconfigurazione dell’host non sicuro
All’interno di questi tag possiamo Inserire qualsiasi direttiva di configurazione sia di Apache chedi SSL
51
Direttive SSLDirettive SSL
• E’ la lista di tutte le direttive SSL
• Quelle sottolineate in rosso sonole più importanti
• Vediamole in dettaglio
52
Direttive SSL: Direttive SSL: SSLCACertificatePathSSLCACertificatePath e e SSLCACertificateFileSSLCACertificateFile
•Queste due direttive servono per specificare la posizione e il nome del certificato dell’autorità che ha firmato il certificato del Webserver, nel nostrocaso si tratta dell’autorità di prova.
•La sintassi è :
SSLCACertificatePath directorySSLCACertificateFile cert
Dove directory e cert indicano rispettivamente lacartella contenente il certificato e il certificato veroe proprio.
53
Direttive SSL: Direttive SSL: SSLCertificateFileSSLCertificateFile e e SSLCertificateKeyFileSSLCertificateKeyFile
•Queste due direttive servono a localizzare il certificatoe il file che contiene la chiave privata del Webserver
•La sintassi è simile alle due direttive della slideprecedente:
SSLCertificateFile certSSLCertificateFile keyfile
Dove cert e keyfile indicano il file del certificato e quello della chiave
54
Direttive SSL : Direttive SSL : SSLVerifyClientSSLVerifyClient -- 11
•Questa direttiva serve a specificare le verifiche che il Webserver deve effettuare sui client prima di accettarela connessione.
•La sintassi è : SSLVerifyClient #
•Il tipo di verifica da effettuare è specificato da un numeroda 0 a 3 che andiamo a sostituire a #
10
55
Direttive SSL : Direttive SSL : SSLVerifyClientSSLVerifyClient -- 22
• 0 – Non è richiesto che il Client abbia un certificatovalido
• 1 – Il Client può scegliere se esibire o meno uncertificato valido
• 2 – Il Client deve avere un certificato valido
• 3 - Il Client può presentare un certificato valido ma nonè richiesto che questo sia firmato da un’autorità di certificazione valida
56
Direttive SSL : Direttive SSL : SSLVerifyDepthSSLVerifyDepth e e SSLDisableSSLDisable
•La direttiva SSLVerifyDepth serve a specificare diquanti livelli si deve salire nella verifica deicertificati, nell’albero di certificazione
•La sintassi è : SSLVerifyDepth #
Dove al posto di #, indichiamo il numero dei livelli
•La direttiva SSLDisable non ha opzioni è serve adisabilitare il protocollo SSL. Viene usata all’internodella configurazione del “virtual host” non sicuro
57
Avviare ApacheAvviare Apache
•Una volta configurato, Apache è pronto per essereeseguito la prima volta
•Per fare ciò, ci spostiamo nella directory DIR/bin/ edeseguiamo il comando ./httpsdctl start
•Per terminare l’esecuzione di Apache, dalla directoryDIR/bin/ digitiamo ./httpsdctl stop
•Per effettuare un riavvio del Webserver, per esempiodopo la modifica del file di configurazione, digitiamo./httpsdctl restart
58
Il sitoIl sito
59
PresentazionePresentazione
Caratteristiche principali
- Transazioni sicure durante l’acquisto
- Gestione Registro Clienti
- Gestione Carrello Virtuale per ogni utente connesso
- Gestione Listino Prezzi diviso per categoria di prodotto
- Interfaccia grafica scalabile e leggera
- Compatibile con qualunque browser per Internet
Idea Principale:Idea Principale:
-- Registrazione nuovo utente.Registrazione nuovo utente.
-- Accesso all’area riservata ai clienti tramite utente e passwordAccesso all’area riservata ai clienti tramite utente e password..
-- Selezione dei prodotti da un listino.Selezione dei prodotti da un listino.
-- Invio dei dati del mezzo di pagamento in maniera sicura Invio dei dati del mezzo di pagamento in maniera sicura
-- Acquisto dei prodotti selezionati.Acquisto dei prodotti selezionati.
-- Ricezione del preventivo.Ricezione del preventivo.
60
FunzionalitàFunzionalità
11
Per installare il sito è necessario essere amministratori del sistema.
Il sito è composto da un pacchetto di file compressi ed è già configurato per essere eseguito da un host chiamato “ linux”.
Impostazione del nome dell’host:
- Aprire il file etc/hosts.
- Inserire la riga 127.0.0.2 linux.
Creazione della directory del sito:
- Spostarsi in DIR/httpsd/htdocs.
- Eseguire mkdir eurostore.
61
Installazione e Configurazione Installazione e Configurazione -- 11
Impostazione dei permessi:
- Dare i permessi di scrittura/lettura/esecuzione alla directory digitando chmod 777.
- Spostarsi all’interno della directory cd eurostore.
Copia dei file del sito:
- Montare il cd con mount /cdrom.
- Copia dei file nella directory del sito con cp /cdrom/eurostore/es.zip ./
- Scompattare i file digitando unzipes.zip *
- Smontare il cdrom con umount /cdrom
62
Installazione e Configurazione Installazione e Configurazione -- 22
Impostazione dei permessi ai file .cgi, .pm e al contatore dei numeri seriali:
- chmod 755 *.cgi- chmod 755 *.pm- chmod 666 seriale.dat
E’ necessario modificare il file di configurazione httpsd.conf per abilitare i permessi aggiungendo le seguenti righe:
<Directory “/usr/local/httpsd/htdocs/eurostore”>Options +ExecCGI</Directory>
Per completare l’installazione è necessario riavviare il web server.
63
Configurazione del sitoConfigurazione del sito
Per accedere alle funzionalità del sito, occorre aprire un browser (es. NetscapeCommunicator, …)
Digitare come URL:
http://linux/eurostore
E’ consigliabile nominare subito un operatore di sistema il quale sarà l’unico che potrà gestire i preventivi.
64
FunzionamentoFunzionamento
65
Presentazione del sitoPresentazione del sito
Nella pagina principale sono presenti:
Una barra di comandi con i link alle pagine del sito liberamente visitabili.
Un pulsante per registrarsi
Una formper l’inserimento della UserIDe della Password per i clienti registrati.
E’ necessario nominare un’ operatore di sistema per la gestione dei preventivi. Tale operatore deve registrarsi seguendo la seguente procedure:
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.
66
Registrazione dell’operatoreRegistrazione dell’operatore
12
67
Registrazione nuovo utenteRegistrazione nuovo utenteCliccando 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.
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.
68
Accesso all’area clientiAccesso all’area clienti
Cliccando su una categoria, è possibile accedere a tutti i prodotti in es sa
contenuti.
69
Selezione prodottiSelezione prodotti
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
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
70
Gestione prodottiGestione prodotti
Cliccando sul pulsante si procede con l’acquisto dei prodotti selezionati nel
carrello.
In tale procedura interverrà la connessione sicura, pertanto verrà visualizzato una
finestra di avvertimento per l’utente
71
Acquisto prodottiAcquisto prodotti
La procedura di acquisto avviene in due fasi:
- L’utente compilerà il preventivo in ogni sua parte ed in particolare inserirà il proprio
numero di carta di credito in modo sicuro.
72
Compilazione preventivoCompilazione preventivo
- 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
13
La gestione dei preventivi è affidata all’operatore di sistema.
Esso può:
• Controllare il contenuto del preventivo
• Stampare il preventivo
• Convalidare il preventivo
73
Gestione dei preventiviGestione dei preventivi
Anche in questa fase è necessaria la connessione sicura poiché vengono manipolati i numeri di carta di credito, pertanto l’operatore dovrà loggarsiusando come login sysop e password quella scelta durante la fase di registrazione.
74
Il sito in dettaglioIl sito in dettaglio
Schema generale
Euro Euro StoreStore: accesso al sito: accesso al sito
Il sito è suddiviso in due aree principali:
1. Area ad accesso libero:aperto a tutti.
2. Area ad accesso riservato: solo per i clienti registrati.
75
Euro Euro StoreStore: schema principale: schema principale
index.htmlvetrina.html
contact.html
info.html
links.html
listino.html
listino.cgi
register.cgi
login.cgi insert.cgi
carrello.cgi
vetrina2.html
acquista.cgi
logout.cgi
prevent.cgi
ACCESSO RISERVATOACCESSO LIBERO ACCESSO SICURO SSL
76
Euro Euro StoreStore: le pagine ad accesso libero: le pagine ad accesso libero
Le pagine dell’area ad accesso libero
Offerte speciali e ultimi arrivi
Form per la scelta del
listino prezzi diviso per categoria
Lettura del listino prescelto dalla pagina
listino.html
Form per la registrazione di un nuovo
cliente
La Home Pageindex.htmlvetrina.html
contact.html
info.html
links.html
listino.html
listino.cgi
register.cgi
77
Euro Store: script per la Euro Store: script per la registazioneregistazione
Le pagine dell’area ad accesso libero
register.cgi
Script PERL-CGIper la registrazionedi un nuovo cliente.
START
RICEZIONE FORM CON DATI
ANAGRAFICI
IL MODULO E’CORRETTO?
LA USERID E’ UNIVOCA ?
LA PASSWORDE’ VALIDA?
ERRORE DICOMPILAZIONE
USERID GIA’ESISTENTE
SCELTA PWD ERRATA
SI
SI
SI
NO
NO
NOREGISTRAZIONE IN ARCHIVIO CLIENTI
END
SI
78
14
Euro Euro StoreStore: l’archivio clienti : l’archivio clienti -- 11
Come implementiamo l’archivio dei clienti ?ARCHIVIO CLIENTI
Attraverso una struttura dati molto usata nel linguaggio Perl:
HASH SU FILE
HASH: Chiave Valore
Array : Indice Valore
Il valore di ogni elemento di un array è indicizzato da un intero positivo
Il valore di ogni elemento di un HASH è indicizzato da una chiave univoca, ad es.
una stringa!
79
Euro Euro StoreStore: l’archivio clienti : l’archivio clienti -- 22
Come implementiamo l’archivio dei clienti ?ARCHIVIO CLIENTI
HASH: Chiave Valore
ARCHIVIO : UserID Dati_Cliente
80
$dati = $archivio{$userid}
$archivio{$userid} = $dati
Lettura di un record:
Scrittura di un record:
Chiave dell’Hash
Valore corrispondente: i dati del cliente registrato
associato alla sua UserID
Euro Euro StoreStore: l’archivio clienti : l’archivio clienti -- 33
ARCHIVIO CLIENTIScrittura: $archivio{$userid} = $dati
$userid = Stringa chiave con UserID di un utente.$dati = Stringa record: tutti i campi del modulo concatenato
con opportuno separatore (#) + Password criptata.
“nome#cognome#indirizzo#telefono#…#email#passcrypt”
Costruzione di $dati :
$dati = join ‘#’, ($nome, $cognome, …, $passcrypt);
Concatenazione dei campi del modulo in un’unica stringa
81
Euro Euro StoreStore: l’archivio clienti : l’archivio clienti -- 44
ARCHIVIO CLIENTILettura : $dati = $archivio{$userid}
Dopo aver memorizzato i dati anagrafici di un utente, come accediamo ad essi ?
Sia $userid l’identificativo di un utente:$dati = $archivio{$userid};
($nome, $cognome, …, $passcrypt)= split /#/, $dati;
Legge i campi del record
concatenati col separatore ‘#’
Ritorna una lista di variabili (stringhe) usando i separatori. Ogni elemento è il valore di un
campo del record.
82
Euro Euro StoreStore: l’archivio clienti : l’archivio clienti -- 55
ARCHIVIO CLIENTI HASH o HASH SU FILE ???
E’ possibile memorizzare un Hash in un File !
tie (%archivio, ‘SDBM_File’, ‘registro’);
Apre/Crea il file registro facendolo corrispondere all’hash %archivio.
Ogni operazione sull’hash è un I/O sul file.
%ARCHIVIO REGISTRO.DIR
REGISTRO.PAG
83
Euro Euro StoreStore: le pagine ad accesso riservato: le pagine ad accesso riservato
index.html login.cgi insert.cgi
carrello.cgi
vetrina2.html
acquista.cgi
logout.cgi
prevent.cgi
Le pagine dell’area ad accesso riservato
Home Page dell’area riservata
Inserimento merce nel carrello
Gestione del carrello virtuale
Acquisto della merce con
transazione sicura
84
15
Euro Euro StoreStore: richiesta di : richiesta di loginlogin
Le pagine dell’area ad accesso riservato
login.cgiRichiesta LOGIN (userid, password)
Richiesta di login con login.cgi
index.html
UTENTEWEB
SERVER
Output login.cgi
Cookie (userid, data, ID_CARRELLO x)COOKIE x
85
Euro Euro StoreStore: richiesta di inserimento : richiesta di inserimento -- 11
Le pagine dell’area ad accesso riservato
Insert.cgiRichiesta di una pagina riservata (es.: insert.cgi)
Richiesta di inserimento di un prodotto con insert.cgi
UTENTEWEB
SERVER
Richiesta Cookie
login.cgi
COOKIEx
Cookie (UserID, data, ID_CARRELLO x)
Invio pagina richiestaInsert.cgi : ELENCO PRODOTTI SELEZIONABILI
86
Euro Store: richiesta di inserimento Euro Store: richiesta di inserimento -- 22
Le pagine dell’area ad accesso riservato
Insert.cgiRichiesta inserimento prodotto y nel carrello
Richiesta di inserimento di un prodotto con insert.cgi
UTENTEWEB
SERVER
Insert.cgi : ELENCO PRODOTTI SELEZIONABILI
Richiesta CookieCOOKIE
xCookie (UserID, data, ID_CARRELLO x)
Esito dell’inserimentoInsert.cgi INSERIMENTO PRODOTTO yIN CARRELLO x
87
Euro Euro StoreStore: richiesta di acquisto : richiesta di acquisto -- 11
Acquista.cgi
Le pagine dell’area ad accesso riservato
Richiesta di acquisto dei prodotti selezionati
Richiesta di acquisto in modalità sicura con acquista.cgi
UTENTEWEB
SERVER
Richiesta Cookie
x=yCOOKIE
login.cgi
Cookie (UserID, data, ID_CARRELLO x)
Stampa PREVENTIVO (con contenuto di x)Acquista.cgi
Tutto ciò avviene in connessione sicura !
88
Euro Euro StoreStore: richiesta di acquisto : richiesta di acquisto -- 22
Acquista.cgi
Le pagine dell’area ad accesso riservato
Transazione sicura con acquista.cgi
UTENTEWEB
SERVER
Richiesta Cookie
x=yCOOKIE
Acquista.cgi
Cookie (UserID, data, ID_CARRELLO x)
REGISTRAPREVENTIVO NEL SERVER per carrello X
Copia Preventivo generatoAcquista.cgi
89
INVIO DATI CARTA DI CERDITO
Euro Euro StoreStore: richiesta di acquisto : richiesta di acquisto -- 33
Logout.cgi
Le pagine dell’area ad accesso riservato
Richiesta di logout dopo l’acquisto, con logout.cgi
UTENTEWEB
SERVER
Richiesta Cookie
x=y
RICHIESTA DI LOGOUT
COOKIE
Acquista.cgi
Index.html
x=y
Cookie (UserID, data, ID_CARRELLO x)
COOKIECancellazione del Cookie
90
16
Euro Euro StoreStore: script per la : script per la loginlogin
STARTSTART
LETTURA DELCOOKIE
(UserID, DATA, ID x)
LETTURA DELCOOKIE
(UserID, DATA, ID x)
COOKIEDEFINITO?COOKIE
DEFINITO?
SI
NO LETTURAPARAMETRI
USERID ePASSW
LETTURAPARAMETRI
USERID ePASSW
LETTURAARCHIVIO CLIENTI
LETTURAARCHIVIO CLIENTI
USERID ePASSW
VALIDI ?
USERID ePASSW
VALIDI ?
SI
CREAZIONE E INVIO COOKIE
(UserID, DATA, ID x)
CREAZIONE E INVIO COOKIE
(UserID, DATA, ID x)CREAZIONE
CARRELLO xCREAZIONE
CARRELLO xLETTURA
CARRELLO xLETTURA
CARRELLO x
STAMPA MENU’CATEGORIE
PRODOTTI
STAMPA MENU’CATEGORIE
PRODOTTI ENDEND
NO
ERROREERRORE
login.cgi
91
Euro Euro StoreStore: il carrello virtuale : il carrello virtuale -- 11
ARCHIVIOCLIENTI
ARCHIVIOCLIENTI
CARRELLOVIRTUALE
CARRELLOVIRTUALE
= HASH SU FILE
= ?Creiamo un unico file come archivio di carrelli, e quindi
un HASH SU FILE !
Carrello: UserID Prodotti inseriti
Hash Chiave Valore
Ma cos’è l’oggetto Prodotti inseriti ?
92
Euro Euro StoreStore: il carrello virtuale : il carrello virtuale -- 22
ARCHIVIOCARRELLIARCHIVIOCARRELLI
= HASH SU FILE
Carrello: UserID Prodotti inseriti
%carrello $userid $contenuto
$contenuto := Stringa, contentente:ID Carrello + Coppie (codice, quantità) per ogni prodotto.
ID x = 1234 Array di coppie (codice_prodotto, quantità)
$contenuto = “1234#skaudio155%2#skvideo209%1#…”
93
Euro Euro StoreStore: script per l’inserimento: script per l’inserimentoSTARTSTART
LETTURAPARAMETRI E
COOKIE(UserID, DATA, ID x)
LETTURAPARAMETRI E
COOKIE(UserID, DATA, ID x)
COOKIEDEFINITO?COOKIE
DEFINITO?
NO
SI
ERROREERRORE
insert.cgi
ESISTECATEGORIA=y
?
ESISTECATEGORIA=y
?
LETTURA PRODOTTICATEGORIA y
LETTURA PRODOTTICATEGORIA y
SI
NO
ESISTEINSERT
?
ESISTEINSERT
?
STAMPA PRODOTTICON LINK ALCARRELLO x
STAMPA PRODOTTICON LINK ALCARRELLO x
LEGGI COPPIE(CODICE,Q.TA’)DA PARAMETRI
LEGGI COPPIE(CODICE,Q.TA’)DA PARAMETRI
INSERISCI COPPIENEL CARRELLO x
INSERISCI COPPIENEL CARRELLO x
NO
SI
ENDEND
94
Euro Euro StoreStore: l’archivio prodotti : l’archivio prodotti -- 11
ESISTECATEGORIA=y
?
ESISTECATEGORIA=y
?
LETTURA PRODOTTICATEGORIA y
LETTURA PRODOTTICATEGORIA y
SI
ESISTEINSERT
?
ESISTEINSERT
?
LEGGI COPPIE(CODICE,Q.TA’)
DA PARAMETRI
LEGGI COPPIE(CODICE,Q.TA’)
DA PARAMETRI
SI
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 !
Come gestire l’archivio dei prodotti diviso per
categoria ?
95
Euro Euro StoreStore: l’archivio prodotti : l’archivio prodotti -- 22
ACC.TXTCAT. ACCESSORI
ACC.TXTCAT. ACCESSORI
PRO.TXTCAT. PROCESSORI
PRO.TXTCAT. PROCESSORI
Semplici files di testo (uno per ogni categoria)
01 2
3y
…
. . .. . .. . .. . .. . .
Eur. 190.002.0 GhzAthlon XPAMDproaxp20Eur. 75.00800 MhzPentium IIIIntelproip3800
PrezzoVersioneModelloProduttoreCodice
96
ARCHIVIO DEIPRODOTTI
ARCHIVIO DEIPRODOTTI
17
Euro Euro StoreStore: script per il carrello virtuale: script per il carrello virtualeSTARTSTART
LETTURAPARAMETRI E
COOKIE(UserID, DATA, ID x)
LETTURAPARAMETRI E
COOKIE(UserID, DATA, ID x)
COOKIEDEFINITO?COOKIE
DEFINITO?
NO
SI
ERROREERRORE
carrello.cgi: gestione del carrello virtuale
ESISTEINC = C o DEC = C
?
ESISTEINC = C o DEC = C
?AGGIORNA Q.TA’ DI C
NEL CARRELLO xAGGIORNA Q.TA’ DI C
NEL CARRELLO x
SI
NO
ESISTEAGGIORNA
?
ESISTEAGGIORNA
?
QUANTITA’(C ) += 1oppure
QUANTITA’(C ) -= 1
QUANTITA’(C ) += 1oppure
QUANTITA’(C ) -= 1
LEGGI COPPIE(CODICE,Q.TA’)DA PARAMETRI
LEGGI COPPIE(CODICE,Q.TA’)DA PARAMETRI
AGGIORNA COPPIENEL CARRELLO x
AGGIORNA COPPIENEL CARRELLO x
SI
ENDEND
NOSTAMPA TUTTO IL
CARRELLOSTAMPA TUTTO IL
CARRELLO
97
Euro Euro StoreStore: script per la transazione sicura: script per la transazione sicura
Connessione sicura !STARTSTART
LETTURAPARAMETRI E
COOKIE(UserID, DATA, ID x)
LETTURAPARAMETRI E
COOKIE(UserID, DATA, ID x)
COOKIEDEFINITO?COOKIE
DEFINITO?
NO
SI
ENDEND
acquista.cgi
SI ESISTECARTA_CREDITO
?
ESISTECARTA_CREDITO
?
LETTURA ARCHIVIODATI (USERID)
LETTURA ARCHIVIODATI (USERID)
LETTURACARRELLO x
LETTURACARRELLO x
LETTURAARC.PRODOTTI
LETTURAARC.PRODOTTI
GENERAZIONEPREVENTIVO
GENERAZIONEPREVENTIVO
REGISTRAZIONEPREVENTIVO
REGISTRAZIONEPREVENTIVO
ERROREERRORE
STAMPAANTEPRIMAPREVENTIVO
STAMPAANTEPRIMAPREVENTIVO
STAMPAMODULO PER LACOMPILAZIONE
DELLA CC.
STAMPAMODULO PER LACOMPILAZIONE
DELLA CC.
ENDEND
98
Euro Euro StoreStore: l’archivio preventivi : l’archivio preventivi -- 11
REGISTRAZIONEPREVENTIVO
REGISTRAZIONEPREVENTIVO
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.
Soltanto l’operatore di sistema può accedere ai preventivi memorizzati, attraverso lo script prevent.cgi .
99
Euro Euro StoreStore: l’archivio preventivi : l’archivio preventivi -- 22
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.
100
Euro Euro StoreStore: interfaccia del sito: 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.
• Dominio web nel quale installare il sito.
101
Euro Euro StoreStore: sicurezza contro attacchi DoS: sicurezza contro attacchi DoS
Prevenzione da Attacchi di tipo Denial of Service
Le Form nelle pagine html sono potenzialmentedannose in caso di attacchi DoS.
Il file interfaccia.pm limita l’uso del buffer di input per il web server che utilizziamo
$CGI::POST_MAX=1024;
$CGI::DISABLE_UPLOADS = 1;
Nr. bytes massimo sul canale di ricezione.
Upload di files disabilitati verso il web server.
102
18
CreditsCredits -- 11
Università degli Studi di SalernoFacoltà di Scienza MM. FF. NN.Corso di Laurea in Informatica, AA. 2001-2002
Progetto per il Corso di Sicurezza su Reti
APACHE-SSL: Realizzazione di un sito con transazioni sicure
Docente del corso
Alfredo De Santis
http://www.dia.unisa.it/ads.dir/index.html
103
CreditsCredits -- 22
Università degli Studi di SalernoFacoltà di Scienza MM. FF. NN.Corso di Laurea in Informatica, AA. 2001-2002
Autori del Progetto
Andrea Del Papa (56/100859) [email protected]
Antonio Esposito (56/100984) [email protected]
Cristian Gagliardi (56/100451) [email protected]
Gerardo Morrongiello (56/100473) [email protected]
Luigi Calaselice (56/100983) [email protected]
104
CreditsCredits -- 33
105
Goodbye !