Il protocollo HTTPS (HTTP Secure, ovvero HTTP Sicuro) è un'evoluzione del protcollo HTTP progettata per incrementare il livello di sicurezza delle comunicazioni da e verso un server HTTP. In particolare, HTTPS aggiunge al semplice protocollo HTTP i servizi di autenticazione del server web e di integrità e riservatezza della comunicazione.
Storia
HTTPS nasce nel 1994 in casa Netscape. Netscape realizzò l'intera suite di applicazioni e protocolli necessari per implementare una comunicazione web sicura, iniziando dal protocollo SSL (Secure Socket Layer). SSL consente di aggiungere a protocolli di livello applicazione già esistenti caratteristiche di sicurezza facendo da tramite tra il livello applicazione e quello di rete. In altre parole, i dati prodotti dall'applicazione vengono elaborati da SSL prima di essere inoltrati. SSL provvede a cifrarli e ad aggiungere le informazioni necessarie a garantire autenticazione ed integrità, quindi li inoltra ai livelli sottostanti. In fase di ricezione, viene effettuato il percorso inverso, provvedendo a decodificare il messaggio ricevuto ed a verificare l'autenticità dello stesso. Nel caso in cui il messaggio non superi i controlli richiesti, questo non verrà inoltrato ai livelli superiori.
Netscape applicò quindi SSL ad HTTP creando HTTPS ed implementandolo sia nel suo browser (Netscape Navigator) sia nel suo server web (Netsite Commerce). Inoltre, sviluppò gli strumenti software necessari per gestire l'infrastruttura richiesta da HTTPS, come ad esempio il Netscape Certificate Server.
Le prime versioni del protocollo SSL erano affette da diversi problemi di sicurezza. A causa di ciò, la versione 1.0 non venne mai rilasciata pubblicamente, mentre per le versioni successive Netscape collaborò con vari esperti di sicurezza e crittografia al fine di migliorare le performance del protocollo, rendendone pubbliche le specifiche. Nel 1999 venne pubblicata la prima versione di TLS (Transport Layer Security), evoluzione di SSL nata con lo scopo di incrementare ulteriormente la sicurezza offerta da SSL, giunto nel frattempo alla versione 3.0.
HTTPS venne quindi formalmente rilasciato nel 2000 (RFC 2818) divenendo così uno standard aperto. HTTPS può essere implementato usando sia SSL che TLS, sebbene ad oggi, l'utilizzo di SSL è deprecato in favore di TLS, per ragioni di sicurezza.
Data la sempre più pressante richiesta di maggiore sicurezza dei servizi basati sul web, l'adozione di HTTPS, prima considerata opzionale in alcuni contesti, si sta rapidamente estendendo. Alcuni browser hanno già iniziato ad indicare come non sicuri i siti che non supportano HTTPS, nel tentativo di spingere gli sviluppatori ad adottare il protocollo sicuro.
Servizi offerti da HTTPS
L'autenticazione del server web consente di verificare l'identità dello stesso, al fine di proteggere gli utenti da frodi informatiche. Si pensi al caso del phishing: un malintenzionato realizza una copia identica nell'aspetto a quella di un noto servizio (ad esempio, l'applicazione di home banking di una nota banca). Quindi, con un espediente (ad esempio, un link in una e-mail), attira l'utente vittima del raggiro sul proprio sito-copia, invitandolo ad inserire le proprie credenziali di accesso. Un utente poco attento potrebbe non accorgersi che il sito visualizzato non è quello autentico, proseguendo con l'operazione di login. A questo punto, il malintenzionato ha ricevuto le credenziali di accesso della vittima. L'utilizzo di HTTPS permette di evitare questi raggiri, poiché l'identità del server è garantita. Nel caso in cui l'identità del server non sia verificata, il browser avvertirà l'utente ed eventualmente (in base alle impostazioni del browser) impedirà del tutto la navigazione verso il server non autentico.
La verifica dell'identità del server avviene attraverso il controllo di un certificato digitale. Poiché il certificato contiene le informazioni sull'identità del server, incluso il nome di dominio, è sufficiente confrontare queste informazioni con quelle del server al quale il browser si collega per verificarne l'identità. Ovviamente, anche il certificato stesso va attentamente controllato. Se un malintenzionato potesse creare facilmente un certificato contraffatto potrebbe aggirare i controlli. Ecco perché i certificati TLS (o SSL) vengono rilasciati da organismi riconosciuti chiamati Certification Authorities (o CA, autorità di certificazione). I browser web mantengono una lista di CA note e ritenute affidabili e pertanto accettano solo i certificati rilasciati da queste. Per garantire il corretto funzionamento di questa infrastruttura CA e browser ricorrono al protocollo X.509, che si basa su tecniche di crittografia a chiave asimmetrica per implementare i meccanismi di verifica dell'identità delle CA e della validità dei certificati da esse rilasciati.
Integrità e riservatezza della comunicazione consentono invece di proteggere l'utente da intercettazioni e/o alterazioni della comunicazione. Con HTTPS l'intero scambio di dati tra client e server è cifrato, e ciò impedisce ad un malintenzionato di intercettare il traffico e leggerne il contenuto. Senza HTTPS, i dati di accesso (nome utente e password) ad un qualsiasi servizio web potrebbero essere facilmente rubati. L'integrità della comunicazione garantisce invece che i dati ricevuti dal client non abbiano subito modifiche nel corso della comunicazione. Un attaccante potrebbe infatti intercettare la comunicazione tra client e server ed alterare il contenuto della stessa prima di ritrasmettere i messaggi ricevuti all'una o all'altra parte (attacco man in the middle). Con HTTPS l'integrità dei messaggi è garantita. In caso di mancata verifica, viene generato un errore, impedendo al messaggio contraffatto di essere recapitato.
Conclusioni
HTTPS riveste un ruolo fondamentale data la pervasività delle applicazioni e dei servizi basati sul web (basti pensare a quante applicazioni IoT utilizzino tecnologie web per il loro funzionamento). Ad oggi non è più possibile pensare di implementare un server web senza considerare un adeguato supporto ad HTTPS. Pertanto, nelle lezioni successive verranno descritte nel dettaglio le operazioni necessarie per ottenere un certificato valido e come configurare il server Apache per la connettività HTTPS.