Autenticazione SSL su Apache

of 6 /6
 CP pensare–progettare–programmare — n. 136 — giugno 2004 Autenticazione SSL su Apache di Massimo Nardone In quest’articolo mostreremo come autenticare un utente Web, munito di Certicato SSL, per una determinata risorsa del Server HTTP Apache Massimo Nardone ` E laureato in Scienze dell’Informazione presso l’Universit ` a di Saler- no. Si  ` e occupato di Sicurezza, Mobile ed implementazioni Web per molti anni come Security Chief Architect, Research and Soft- ware Engineer presso un’azienda di Teleco- municazioni Finlandese. Ha collaborato inoltre come revisionatore tec- nico per molti libri sulla sicurezza. Attualmente lavora come Technical Account Manager, Pro-  ject Manager e Security Specialist per un’a- zienda di servizi Mobile Finlan dese. Si occupa inoltre di ricerca ed implementazione per la sicurezza dei proto- colli come assistente e supervisore delle eser- citazioni per l’esame di ”Security of Com- munication Protocols” presso l’Helsinki Uni- versity of Technology (HUT) in Finlandia.

Embed Size (px)

description

CP pensare–progettare–programmare — n. 136 — giugno 2004Autenticazione SSL su Apachedi Massimo NardoneIn quest’articolo mostreremo come autenticare un utente Web, munito di Certificato SSL, per una determinata risorsa del Server HTTP ApacheMassimo Nardone è laureato in Scienze dell’Informazione presso l’Università di Salerno. Si e occupato di Sicurezza, Mobile ed implementazioni Web per molti anni come Security Chief Architect, Research and Software Engineer

Transcript of Autenticazione SSL su Apache

CP pensareprogettareprogrammare n. 136 giugno 2004

Autenticazione SSL su Apachedi Massimo NardoneIn questarticolo mostreremo come autenticare un utente Web, munito di Certicato SSL, per una determinata risorsa del Server HTTP Apache

Massimo Nardone ` E laureato in Scienze dellInformazione presso ` lUniversita di Saler` no. Si e occupato di Sicurezza, Mobile ed implementazioni Web per molti anni come Security Chief Architect, Research and Software Engineer presso unazienda di Telecomunicazioni Finlandese. Ha collaborato inoltre come revisionatore tecnico per molti libri sulla sicurezza. Attualmente lavora come Technical Account Manager, Project Manager e Security Specialist per unazienda di servizi Mobile Finlandese. Si occupa inoltre di ricerca ed implementazione per la sicurezza dei protocolli come assistente e supervisore delle esercitazioni per lesame di Security of Communication Protocols presso lHelsinki University of Technology (HUT) in Finlandia.

pubblicato su WWW.INFOMEDIA.IT stampa digitale da Lulu Enterprises Inc. stores.lulu.com/infomediaInfomedia` Infomedia e limpresa editoriale che da quasi venti anni ha raccolto la voce dei programmatori, dei sistemisti, dei professionisti, degli studenti, dei ricercatori e dei professori dinformatica italiani. Sono pi` di 800 gli autori che hanno realizzato per le teu state Computer Programming, Dev, Login, Visual Basic Journal e Java Journal, molte migliaia di articoli tecnici, presentazioni di prodotti, tecnologie, protocolli, strumenti di lavoro, tecniche di sviluppo e semplici trucchi e stratagemmi. Oltre 6 milioni di copie distribuite, trentamila pagine stampate, fanno di questa impresa la pi` grande ed u inuente realt` delleditoria specializzata nel campo della a programmazione e della sistemistica. In tutti questi anni le riviste Infomedia hanno vissuto della passione di quanti vedono nella programmazione non solo la propria professione ma unattivit` vitale e un vero a divertimento. ` Nel 2009, Infomedia e cambiata radicalmente adottando ` un nuovo modello aziendale ed editoriale e si e organizzata attorno ad una idea di Impresa Sociale di Comunit` , a partecipata da programmatori e sistemisti, separando le attivit` di gestione dellinformazione gestite da un board a comunitario professionale e quelle di produzione gesti` te da una impresa strumentale. Questo assetto e in linea con le migliori esperienze internazionali e rende Infomedia ancora di pi` parte della Comunit` nazionale degli u a sviluppatori di software. ` Infomedia e media-partner di manifestazioni ed eventi in ambito informatico, collabora con molti dei pi` imporu tanti editori informatici italiani come partner editoriale e fornitore di servizi di localizzazione in italiano di testi in lingua inglese.

Limpaginazione automatica di questa rivista e realizzata al ` 100% con strumenti Open Source usando OpenOffice, Emacs, BHL, LaTeX, Gimp, Inkscape e i linguaggi Lisp, Python e BASH

For copyright information about the contents of Computer Programming, please see the section Copyright at the end of each article if exists, otherwise ask authors. Infomedia contents is 2004 Infomedia and released as Creative Commons 2.5 BY-NC-ND. Turing Club content is 2004 Turing Club released as Creative Commons 2.5 BY-ND. Le informazioni di copyright sul contenuto di Computer Programming sono riportate nella sezione Copyright alla ne di ciascun articolo o vanno richieste direttamente agli autori. Il contenuto Infomedia e 2004 Infome` dia e rilasciato con Licenza Creative Commons 2.5 BYNC-ND. Il contenuto Turing Club e 2004 Turing Club ` e rilasciato con Licenza Creative Commons 2.5 BY-ND. Si applicano tutte le norme di tutela dei marchi e dei segni distintivi. ` E in ogni caso ammessa la riproduzione parziale o totale dei testi e delle immagini per scopo didattico purch e vengano integralmente citati gli autori e la completa identicazione della testata. Manoscritti e foto originali, anche se non pubblicati, non si restituiscono. Contenuto pubblicitario inferiore al 45%. La biograa dellautore riportata nellarticolo e sul sito www.infomedia.it e di norma quella disponibi` le nella stampa dellarticolo o aggiornata a cura dellautore stesso. Per aggiornarla scrivere a [email protected] o farlo in autonomia allindirizzo http://mags.programmers.net/moduli/biograa

web

Autenticazione SSL su ApacheIn questarticolo mostreremo come autenticare un utente Web, munito di Certificato SSL, per una determinata risorsa del Server HTTP Apachedi Massimo Nardone

P

artiamo dal presupposto che la necessit di un protocollo sicuro sia ormai fondamentale in unepoca in cui Internet si talmente sviluppato da permettere agli utenti di svolgere innumerevoli operazioni. Bisogna ricordare che protocolli come HTTP per navigare e mostrarci pagine Web o protocolli come IMAP per leggere la nostra posta elettronica, utilizzano di base il protocollo TCP/IP, che fondamentalmente vulnerabile nel senso che i dati che vengono trasmessi sono in chiaro e quindi facilmente leggibili e intercettabili in fase di trasferimento.

FIGURA 1

Larchitettura del SSL

Introduzione allSSLSSL (Secure Sockets Layer) permette di gestire lintegrit dei dati e la privacy delle informazioni trasmesse sul web e, come vedremo pi in dettaglio, lautenticazione di noi stessi e del server con cui ci colleghiamo. Internet, in fin dei conti, si basa su di uno scambio di dati tra un client (il nostro browser), ed un server (ovvero la macchina che contiene i dati di cui abbiamo bisogno). SSL non far nientaltro che crittare le informazioni (ovvero i dati) tra il server ed il nostro client. I pi importanti metodi di crittografia sono notoriamente quelli simmetrici e quelli asimmetrici. Tra i software pi utilizzati, soprattutto con il server HTTP Apache, ricordiamo OpenSSL ed il modulo mod_ssl, con cui possiamo creare le chiavi ed una richiesta di certificazione. Possiamo dire che SSL un protocollo a due livelli: SSL Record Protocol: questo protocollo verr utilizzato per lincapsulamento di tutti i dati, sia in ricezione che in trasmissione, e fornisce i servizi basilari di sicurezza ai vari protocolli di livello pi alto;

I tre pi alti livelli del protocollo sono definiti come parte di SSL e riguardano: SSL Alert Protocol: per comunicare i messaggi di errore SSL tra client e server; SSL Change Cipher Spec Protocol: per concordare la Cipher Suite per la sessione; SSL Handshake Protocol: per negoziare i vari parametri di sicurezza per una connessione SSL. Prevede una procedura suddivisa in diverse fasi, tra le quali: negoziare la Cipher Suite da utilizzare durante il trasferimento dati; creare e controllare la chiave di sessione tra client e server; opzionalmente autenticare il server per il client; opzionalmente autenticare il client per il server. Larchitettura del SSL mostrata in Figura 1. Alcuni tra tutti gli algoritmi utilizzati dal protocollo SSL possono essere: RC4 128 bit e MD5, RC2 128 bit CDC e MD5, DES 64 bit CBC e MD5, DES 192 bit EDE3 CBC e MD5. Tra le azioni principalmente utilizzate con il protocollo SSL ricordiamo lautenticazione del SSL server e lautenticazione del SSL client su cui si basa il nostro articolo.

Cos un certificato SSLMassimo [email protected] laureato in Scienze dellInformazione presso lUniversit di Salerno. Si occupato di Sicurezza, Mobile ed implementazioni Web per molti anni come Security Chief Architect, Research and Software Engineer presso unazienda di Telecomunicazioni Finlandese. Ha collaborato inoltre come revisionatore tecnico per molti libri sulla sicurezza. Attualmente lavora come Technical Account Manager, Project Manager e Security Specialist per unazienda di servizi Mobile Finlandese. Si occupa inoltre di ricerca ed implementazione per la sicurezza dei protocolli come assistente e supervisore delle esercitazioni per lesame di Security of Communication Protocols presso lHelsinki University of Technology (HUT) in Finlandia dove vive e lavora da pi di 7 anni.

In sostanza un certificato SSL un file che consente di crittografare qualunque informazione scambiata (una pagine web, la vostra posta elettronica, ecc.), nonch di offrire garanzia di identit verso il server web con cui stiamo interagendo. Un certificato digitale, pi in dettaglio una chiave pubblica che stata firmata da una CA. Il browser conosce le chiavi pubbliche di diverse CA, e pu quindi facilmente controllare che la firma sia corretta. Il certificato, quindi, ci permetter di effettuare transazioni sicure, indispensabili ad esempio nelle-commerce, specialmente per lutilizzo dei dati sensibili delle carte di credito, password e cos via. Il certificato contiene le seguenti informazioni:Computer Programming n. 136 - Giugno 2004

42

PROGRAMMINGTABELLA 1Contenuto del campo Distinguished Name

Campo Common Name Organization or Company Organizational Unit City/Locality State/Province Country Email Address

Abbreviazione CN O OU L SP C E

Descrizione Il Nome certificato Il Nome associato a questa Organizzazione Il Nome associato a questa unit di Organizzazione o dipartimento Localit o Citt del Nome certificato Stato o Provincia del Nome certificato La Nazione del Nome certificato (codifica ISO) Lindirizzo Email del Nome certificato

Esempio CN=Massimo Nardone O=LaMiaOrganizzazione OU=IlMioDipartimento L=Roma SP=Roma C=IT [email protected]

Soggetto: Distinguished Name, Public Key Emittente: Distinguished Name, Signature Periodo di Validit: Not Before Date, Not After Date Informazioni Amministrative: Version, Serial Number Altre informazioni varie

my $key = $query->param(SPKAC);

Prima di tutto prendiamo il valore KEYGEN contenuto nel campo SPKAC.my $count = 1.rand 1000;

Il campo Distinguished Name utilizzato per provare lidentit del certificato in qualche specifico contesto, come ad esempio per provare lidentit di un certo dipendente di unazienda o quella di un utente nellaccedere una certa risorsa della rete. Questo campo definito dallo standard X.509, il quale stabilisce i campi, le descrizioni e le abbreviazioni che lo compongono. Le informazioni relative al campo Distinguished Name sono riportate nella Tabella 1.

my $req_file = cert$count.req; # certificate request filename my $result_file = cert$count.result; # certificate filename my @req_names = (commonName, emailAddress, organizationName, organizationalUnitName, localityName, stateOrProvinceName,countryName, SPKAC);

Creazione di un certificato ClientEsistono molti metodi per creare i certificati SSL. Molto utilizzato ad esempio linterfaccia CA.pl contenuta in OpenSSL. Vogliamo mostrare, adesso, la creazione di un certificato client utilizzando un semplice script Perl chiamato da una pagina HTML. Partiamo creando una pagina HTML con i dati di cui il nostro certificato client ha bisogno. La nostra richiesta inizier creando la FORM di richiesta HTML di cui vi riportiamo alcuni passi principali: Nome da Certificare: Organizzazione:

Prepariamo i file per la richiesta e per il risultato del certificato client da creare, nonch i valori da prendere dalla nostra FORM HTML:open(REQ, >$req_file) or errore(Creazione file di richiesta certificato client fallita. $req_file: $!); my $name; foreach $name (@req_names) { my $value = $query->param($name); $value =~ tr/\n//d; print REQ $name = $value\n; } close(REQ);

FIGURA 2

Creazione della chiave privata

La FORM HTML include uno speciale TAG di nome , per far si che il browser generi la coppia di chiavi, pubblica e privata, e rimandi in output la chiave pubblica come valore della variabile SPKAC. Ricordiamo che ad ogni modo keygen un parametro specifico per il browser Netscape e quindi ignorato dal browser Internet Explorer. Definiamo questo TAG nella form HTML in questo modo:

La Figura2 mostra come il browser Netscape genera le chiavi. Si generer poi la richiesta che verr spedita al file script crea_cert.pl. Vediamone i punti principali.Computer Programming n. 136 - Giugno 2004

43

webApriamo quindi il file di richiesta e scriviamoci i valori della FORM html, pi la chiave pubblica contenute nel campo SPKAC:my $cmd = openssl ca -config $CONFIG -spkac $req_file -out $result_file -days 360; my $rc = system($cmd -key $CAPASS 2>errori); if($rc != 0) { errore($cmdrc = $rc, errori); } RANDFILE = $dir/private/.rand

Con la prima riga qui sopra lanciamo quindi il comando openssl ca per la creazione del nostro certificato client. Se tutto va bene prender in input il file di richiesta e creer il file di risultato, altrimenti ci mostrer lerrore. Il file di richiesta generato avr questo contenuto:commonName = Massimo Nardone emailAddress = [email protected] organizationName = LaMiaOrganizzazione organizationalUnitName = IlMioDipartimento localityName = Roma stateOrProvinceName = Roma countryName = IT SPKAC = MIIBRTCBrzCBnzANBgkqhkiG9w0BAQEFAAOB

A questo punto apriamo il file risultato contenente il certificato, ovvero CERT, e lo spediamo direttamente, sotto forma di tipo application/x-x509-user-cert, al browser Netscape che lo inserir direttamente tra i certificati client che potremmo utilizzare pi tardi, per la nostra demo dautenticazione. La gestione degli eventuali errori assegnata ad una sub di nome errore. Il certificato client generato mostrato in Figura 3.open(CERT,