...

pdf - Dipartimento di Informatica

by user

on
Category: Documents
18

views

Report

Comments

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
Fly UP