Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica Elaborato finale in Calcolatori Elettronici I I Web Server: configurazione e gestione della sicurezza Anno Accademico 2017/2018 Candidato: Pasquale Fabozzi matr. N46002734
34
Embed
I Web Server: configurazione e gestione della sicurezza · Si tratterà brevemente la crittografia e si descriverà il protocollo HTTPS per comunicazioni sicure. Alla fine si configurerà
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Scuola Politecnica e delle Scienze di Base Corso di Laurea in Ingegneria Informatica
Elaborato finale in Calcolatori Elettronici I
I Web Server: configurazione e gestione della sicurezza
Anno Accademico 2017/2018
Candidato: Pasquale Fabozzi matr. N46002734
Indice
Indice ................................................................................................................................................... II Introduzione ......................................................................................................................................... 3 Capitolo 1: Web Server ........................................................................................................................ 4
1.1 Storia .......................................................................................................................................... 5 1.1.1 CERN httpd ......................................................................................................................... 5 1.1.2 Introduzione ai Server LAMP ............................................................................................. 5
1.2 Software principali ..................................................................................................................... 6
1.2.8 Google Server ..................................................................................................................... 8 Capitolo 2: Server LAMP .................................................................................................................... 9
2.3.1 Download e installazione .................................................................................................. 23 2.4 PHP .......................................................................................................................................... 24
Capitolo 3: Configurazione Web Server con HTTPS ........................................................................ 26
3.1 Il protocollo HTTP ................................................................................................................... 26 3.2 Sicurezza nelle reti ................................................................................................................... 27 3.3 Il protocollo HTTPS................................................................................................................. 29 3.4 Configurazione di Apache Tomcat con HTTPS ...................................................................... 30
3.4.1 Creazione del certificato ................................................................................................... 30
3.4.2 Configurazione di Tomcat con SSL .................................................................................. 31 Conclusioni ........................................................................................................................................ 33 Bibliografia ........................................................................................................................................ 34
3
Introduzione
I web server oggigiorno sono molto diffusi e presenti in ogni tipo di applicazione web.
In questo elaborato si tratteranno i web server e la loro configurazione con cenni sui
problemi di sicurezza. Nel primo capitolo si introdurranno i web server con dei cenni
sulla loro origine e sul primo web server progettato e realizzato. Nello stesso capitolo
si spiegheranno le configurazioni più utilizzate e si descriveranno brevemente i web
server più diffusi. Nel secondo capitolo si tratterà l'installazione di una particolare
configurazione di web server che è la più diffusa e con prestazioni elevate. Nel terzo
capitolo si introdurranno alcune problematiche di sicurezza con le proprietà di una
comunicazione sicura e come garantirle. Si tratterà brevemente la crittografia e si
descriverà il protocollo HTTPS per comunicazioni sicure. Alla fine si configurerà il
web server installato nel capitolo 2 per accettare connessioni sicure.
4
Capitolo 1: Web Server
Con “Web Server” si intende sia un’applicazione software, sia il computer su cui è in
esecuzione. Il computer prende il nome di host. Un Web Server è utilizzato per
diffondere contenuti sul web. In particolare esso si occupa di rispondere alle richieste
dei client utilizzando il protocollo HTTP. Quindi un Web Server deve essere sempre
online per poter essere raggiungibile dai client e servire le loro richieste. Un client in
genere è un web browser che invia richieste HTTP all’indirizzo e alla porta del web
server. Dall’altra parte il web server riceve le richieste HTTP, le elabora e risponde
inviando un pagina in formato HTML. Le pagine web possono essere sia statiche, sia
dinamiche. Le pagine statiche sono scritte in HTML e contengono tutti I contenuti da
mostrare all’utente finale. Le pagine dinamiche, invece, sono pagine scritte non solo in
HTML ma anche in altri linguaggi come PHP o ASP. Questi linguaggi definiscono
delle istruzioni per generare il contenuto della pagina richiesta. Con le pagine
dinamiche è il web server che processa le istruzioni mostrando all’utente finale i
contenuti generati dinamicamente. Processare le istruzioni lato server è molto comodo
per l’utente finale poichè ha bisogno solo di un browser (e non di altri software) per
visualizzare i contenuti richiesti; inoltre questo comporta un risparmio di tempo e di
banda.
5
1.1 Storia Lo sviluppo del web server è dovuto al fisico e informatico Tim Berners-Lee. Egli, nel
1989, ebbe l’idea di utilizzare la gestione ipertestuale in modo da avere un metodo più
veloce e semplice per permettere lo scambio di informazioni del CERN (Conseil
européen pour la recherche nucléair). Nel 1990, con Robert Cailliau, presentò un
progetto da cui scaturì il primo web server (“CERN httpd”), il linguaggio HTML e il
protocollo HTTP.
1.1.1 CERN httpd
Il primo web server fu sviluppato in linguaggio C su un computer NeXT con sistema
operativo NeXTSTEP basato su Unix. In seguito fu esportato su altri sistemi operativi
Unix-like o emulatori unix. Inoltre poteva essere configurato come proxy, ossia come
intermediario. La prima versione fu la 0.1 e venne rilasciata nel 1991. Nello stesso anno
Berners-Lee rese disponibile il codice sorgente sul sito FTP del CERN. La prima
versione era un software di pubblico dominio, cioè liberamente accessibile. In seguito
lo sviluppo fu continuato dal W3C (World Wide Web Consortium) che si focalizzò sullo
sviluppo di un server Java-based (basato sul linguaggio Java). Quest’ultimo fu
rilasciato sotto la licensa del MIT (Massachusetts Institute of Technology).
1.1.2 Introduzione ai Server LAMP
I server LAMP sono dei web server configurati su un sistema operativo Linux. Questo
tipo di server è caratterizzato da un web server, tipicamente Apache, eseguito su una
macchina Linux-based. I server LAMP permettono di avere pagine dinamiche. Apache,
però, non può interpretare i contenuti dinamici, ma sa che per questo compito è
disponibile un interprete PHP che ha accesso ad un database MySQL. L’interprete
6
PHP, accedendo al database, elabora il codice sorgente ricevuto e invia i riusltati ad
Apache che provvede a mostrarli nel browser utente. I server LAMP quindi sono
convenienti e veloci ed è per questo che sono molto utilizzati.
1.2 Software principali Esistono molte applicazioni software che implementano le funzionalità di un web
server. Alcune di esse sono open source, ossia utilizzabili senza l’acquisto di una
licenza, altre sono proprietarie. I web server più diffusi sono i seguenti:
• Apache HTTP Server
• Apache Tomcat
• Microsoft IIS
• WildFly
• WebSphere
• WebLogic
• Nginx
• Google Server
1.2.1 Apache HTTP Server
Apache http Server è un web server open source e ne esistono varie versioni. E’
disponibile per quasi ogni sistema operativo ed è il web server più utilizzato. Supporta
contenuti dinamici, infatti è possibile integrare linguaggi di scripting come PHP. Viene
molto utilizzato nei server LAMP. Recentemente sono stati rilasciati web server che
hanno tempi di risposta minori. Il metodo di gestione delle risorse è basta su un
approccio orientato ai thread e ai processi.
7
1.2.2 Apache Tomcat
E’ un web server open source sviluppato in linguaggio Java. Apache Tomcat è utile per
creare contenuti lato server con Java. Inoltre con un apposito connettore può essere
icluso in un altro web server. Più che un web server, esso è un programma Java che
estende le funzionalità di un server. Tuttavia può rispondere a qualsiasi tipo di richesta
e può essere impiegato comunemente come web server. Gestisce pagine dinamiche
tramite Java oltre che PHP o ASP. Apache Tomcat non implementa tutte le specifiche
JavaEE.
1.2.3 Microsoft IIS
E’ un web server sviluppato dalla Microsoft. In passato era un componente di Windows
Server. In alcuni sistemi operativi Windows può essere installato in un secondo
momento. Funziona solo su server Windows.
1.2.4 WildFly
Precedentemente noto come JBoss AS è un application server open source. Esso
implemeta tutte le specifiche JavaEE. E’ interamente realizzato in Java
1.2.5 WebSphere
E’ un application server sviluppato da IBM. E’ molto utilizzato come software
middleware per eseguire applicazioni e-business attraverso la tecnologia web.
8
1.2.6 WebLogic
Web server sviluppato dalla BEA Systems poi acquistato da Oracle. Implementa le
specifiche JavaEE.
1.2.7 Nginx
E’ anch’esso un server web open source. Nginx è un software che offre più di un solito
web server. Infatti può essere utilizzato per reverse proxy o load balancing. La gestione
delle richieste è asincrona basata su eventi, in netta contrapposizione ad Apache che
usa un modello orientato ai thread nella gestione delle risorse. Grazie a questo metodo
di gestione delle risorse riesce a gestire molte sessioni simultanemamente.
1.2.8 Google Server
E’ il web server utilizzato da Google per le sue applicazioni.
9
Capitolo 2: Server LAMP
Lo stack LAMP (figura 1) è un insieme di software utilizzati dai web server. I web
server sono ospitati su sistemi operativi Linux. LAMP è un acronimo e sta appunto per
Linux, Apache, MySQL e PHP. Come si può notare dalla sigla, un server LAMP si
avvale di quattro software principali:
Figura 1 LAMP Stack
a. Linux: sistema operativo che costituisce il primo livello. È la base dello
stack.
b. Apache: il secondo livello si trova immediatamente sopra quello di
Linux. Quindi è formato da un web server responsabile di tradurre le
richieste del web browser al corretto sito web.
c. MySQL: il terzo livello ospita uno o più database. MySQL memorizza
dati che possono essere interrogati da uno script per costruire il sito web.
MySQL di solito si trova sopra il livello di Linux affianco ad Apache.
In alcune configurazioni è anche possibile avere MySQL in un server
10
separato.
d. PHP: il quarto e ultimo livello è essenzialmente un livello composto da
script scritti in PHP o linguaggi di programmazione web simili. I siti
web e le applicazioni web sono eseguite in questo livello.
Un server LAMP utilizza software free e open-source. Ci sono delle varianti che si
distinguono per i particolari tipi di componenti. Infatti come sistema operativo, oltre
Linux, si può scegliere di utilizzare Windows (server WAMP) o Mac (server MAMP).
Si può scegliere di utilizzare altri web server al posto di Apache, come ad esempio
Nginx. I database più utilizzati sono MySQL e MariaDB, mentre per gli interpreti dei
linguaggi di scripting, oltre PHP, si hanno Perl, Ruby o Python.
2.1 Linux Linux è un sistema operativo open-source. Esistono diverse versioni di Linux sia
desktop che server. Le distribuzioni linux sono tantissime e differiscono per i software
installati di default, le configurazioni iniziali, per l'orientamento alla facilità d'uso o
all'ottimizzazione delle risosre del computer.
2.1.1 Download
Il download di Linux è molto semplice. Innanzitutto è necessario scegliere la
distribuzione da utilizzare. Scegliamo ad esempio la distribuzione Ubuntu. Per poter
scaricare questa distribuzione è necessario andare sul sito ufficiale di Ubuntu
(www.ubuntu-it.org) , navigare fino alla sezione ‘Download’ e segliere la versione a
32 o 64 bit (figura 2).
11
Figura 2 Pagina download Ubuntu 18.10 a 64 bit
Una volta scaricato, otterremo un file in formato ISO di circa 2 GB (figura 3).
Figura 3 File scaricato
Si può procedere all’installazione.
2.1.2 Installazione
L’installazione può avvenire su macchina fisica o su macchina virtuale. Installare un
sistema operativo su macchina virtuale ha molti vantaggi dal punto di vista della
sicurezza. Iniziamo dicendo che una macchina virtuale è un’astrazione di una macchina
fisica. Tuttavia la macchina virtuale è pur sempre un software e come tale deve essere
eseguita su un sistema operativo installato su macchina fisica. Se il sistema operativo
installato su una macchina virtuale termina in modo anomalo la propria esecuzione (a
causa di errori o malfunzionamenti) esso non provoca il crash di tutta la macchina
fisica, ma solo della macchina virtuale dedicata a quel sistema operativo. Quindi si può
utilizzare una macchina fisica come host per una o più macchine virtuali. Al giorno
d’oggi questo meccanismo è molto utilizzato perchè è particolarmente robusto in
termini di sicurezza. La virtualizzazione di una macchina porta però con sè una serie di
problematiche (come virtualizzazione dei processori, virtualizzazione delle porte di
I/O, ecc.) che nel corso degli anni sono state risolte e ne ha reso possibile l’impiego su
larga scala. L’installazione di un sistema operativo su macchina virtuale avviene nello
stesso modo dell’installazione su macchina fisica. L’unica differenza sta nella parte
12
iniziale dell’installazione in quanto per installare un sistema operativo su macchina
virtuale non richiede la scrittura del file immagine ISO su un dsupporto fisico quale
CD, DVD o chiavetta USB bootable. All’avvio del programma di installazione bisogna
selezionare una lingua (figura 4) e avviare l'installazione.
Figura 4 Scelta della lingua
In seguito viene richiesto di scegliere un layout per la tastiera (figura 5).
Figura 5 Scelta del layout della tastiera
13
Al passo successivo viene richiesto se installare una versione normale oppure una
minima (figura 6).
Figura 6 Scelta del tipo di installazione
Si sceglie se usare l'intero disco o partizionare un disco (figura 7). Bisogna confermare
la scelta effettuata (figura 8).
Figura 7 Scelta della partizione
14
Figura 8 Conferma installazione
Si sceglie il fuso orario (figura 9).
Figura 9 Fuso orario
L'ultimo passo è impostare un profilo (figura 10).
Figura 10 Impostazione profilo utente
15
Infine si riavvia il sistema (figura 11).
Figura 11 Installazione completata
Al primo avvio si lancia il comando in figura 12 per aggiornare i software installati.
Figura 12 Comando di aggiornamento
A questo punto il sistema operativo è installato.
2.2 Apache Tomcat Apache Tomcat è l’application server più diffuso insieme al web server Apache.
Apache Tomcat è utilizzato insieme ad Apache HTTP Server per sviluppare
applicazioni web particolarmente complesse. Per lo sviluppo di applicazioni web
semplici è possibile utilizzare anche solamente Apache Tomcat poiché può essere
utilizzato anche da web server. L’utilizzo della coppia Apache HTTP Server-Apache
Tomcat è comodo in applicazioni molto vaste per separare la parte statica (da gestire
con Apache HTTP Server) dalla parte dinamica (da gestire con Apache Tomcat).
Apache Tomcat è un software molto stabile ed affidabile, è open source ed è basato su
Java. Java è un linguaggio di programmazione nato proprio per web per rendere le
applicazioni utilizzabili da tutte le tipologie di dispositivi (computer, smartphone,
tablet, …). Apache Tomcat è un Servlet Container e un JSP Engine, quindi è un motore
in grado di eseguire applicazioni web sul server. Apache Tomcat è costituito da una
serie di elementi:
1) Elementi di alto livello
16
a. Server: rappresenta l’intero Servlet Container.
b. Service: è la combinazione di uno o più componenti Connector. Uno o più di
questi possono essere inclusi in un elemento Server.
2) Esecutori
a. Executor: rappresenta un pool di thread condiviso fra i componenti di