Certificati digitali - Sicurezza su reti 2

annuncio pubblicitario
Università degli Studi di Salerno
Corso di Sicurezza su Reti II
RELAZIONE FINALE CA GROUP
SIMULAZIONE DI UNA CERTIFICATION
AUTHORITY
Prefazione:
Questo documento è stato stilato per il progetto di sicurezza su reti II e ha lo scopo di spiegare il
lavoro fatto dal gruppo di certification authority.
Membri del gruppo (in ordine alfabetico):
Marino Pasquale
Marra Maria Cristina
Molaro Alfonso
Rullo Esterino
_______________________________________________________________________________
1
INDICE
Certification authority .......................................................................................................................... 4
Doveri del gioco ................................................................................................................................... 6
Doveri di una CA ............................................................................................................................. 6
Servizi offerti ................................................................................................................................... 6
Doveri del sottoscrittore ................................................................................................................... 7
Doveri di terze parti coinvolte ......................................................................................................... 7
Certificati digitali ................................................................................................................................. 8
X.509 ................................................................................................................................................ 8
Storia ................................................................................................................................................ 8
Certificati X.509............................................................................................................................... 8
Struttura del certificato..................................................................................................................... 9
Installazione ....................................................................................................................................... 10
Primo step ...................................................................................................................................... 10
Sequenza di installazione ........................................................................................................... 11
Secondo step .................................................................................................................................. 11
Sequenza di installazione ........................................................................................................... 11
Configurazione SendMail .......................................................................................................... 15
Creazione di uno script per l’avvio dei servizi .......................................................................... 17
Configurazione di OpenCA ............................................................................................................... 18
Fase 1 : Inizializzazione della Certification Authority .................................................................. 18
Fase 2 : Creazione dell’amministratore ......................................................................................... 18
Fase 3 : Creazione del certificato RA ............................................................................................ 19
Inizializzazione di RA .................................................................................................................... 19
Certificati utenti ............................................................................................................................. 19
Sottomissione di una richiesta di certificato .............................................................................. 19
Approvazione del certificato ...................................................................................................... 20
Il certificato ................................................................................................................................ 20
Ottenere il certificato ................................................................................................................. 20
Ottenere il certificato root .......................................................................................................... 20
Manuale d'uso .................................................................................................................................... 21
Utente ............................................................................................................................................. 21
Amministratore .............................................................................................................................. 25
Tuning ................................................................................................................................................ 29
Servizi Richiesti ............................................................................................................................. 29
Richieste effettuate ......................................................................................................................... 29
Richieste ricevute ........................................................................................................................... 29
Prima commessa ................................................................................................................................ 30
Studio di fattibilità su LDAP: Panoramica sulla situazione attuale ............................................... 30
Progetto della soluzione ................................................................................................................. 30
Funzionamento di LDAP ............................................................................................................... 31
Specifiche generali del sistema .................................................................................................. 31
Modalità di realizzazione ........................................................................................................... 32
Analisi costi benefici ...................................................................................................................... 36
Autenticazione con LDAP usando openLDAP e PAM (Pluggable Authentication Module) ....... 36
Aggiungere informazioni utente al database LDAP .................................................................. 37
Settare i moduli PAM ................................................................................................................ 38
Settare le librerie nsswitch ......................................................................................................... 39
Settare nss_ldap.......................................................................................................................... 39
Architettura del server LDAP .................................................................................................... 41
Apache basato su server WebDAV con LDAP ............................................................................ 42
2
Installazione ............................................................................................................................... 42
Configurare e settare WebDAV services ................................................................................... 45
Creare una directory per DAVLockDB ................................................................................... 45
Usare DAV ................................................................................................................................. 45
Creare una Directory chiamata DAVtest .................................................................................. 46
Gestione del server WebDAV.................................................................................................... 47
Limitare l’accesso alle condivisioni DAV ................................................................................. 47
Limitare l’accesso basato su UID .............................................................................................. 47
Appendice A: come richiedere e installare certificati WebServer ..................................................... 49
Certificati per server Apache ......................................................................................................... 49
Compilazione di mod_ssl ........................................................................................................... 49
Creazione e installazione certificato .......................................................................................... 50
Configurazione avanzata di mod_ssl - Server Level Configuration .......................................... 52
Configurazione avanzata di mod_ssl - Per Directory configuration .......................................... 54
SSL e VirtualHost ...................................................................................................................... 55
Evitare la rinegoziazione di protocollo fra server https e client ................................................ 55
Certificati per applicazioni Java ..................................................................................................... 56
3
Certification authority
In crittografia, una Certificate Authority o Certification authority (in breve CA) è una entità che
rilascia certificati digitali verso terze parti. Le Certification authority sono caratteristiche di una
infrastruttura PKI.
Le CA come soluzione per il problema dell'associazione fra una chiave pubblica e la persona che
possiede la relativa chiave privata; chiariamo il concetto con un esempio: Alice e Bob vogliono
scambiarsi messaggi firmati e crittografati; a tale scopo entrambi creano la loro coppia di chiavi e le
pubblicano su un keyserver. Quindi Alice scrive un messaggio per Bob, lo firma con la sua chiave
privata (di Alice) e lo cripta con la chiave pubblica di Bob, quindi il messaggio viene inviato. In
ricezione Bob decripta il messaggio con la sua chiave privata (di Bob) e verifica la firma con la
chiave pubblica intestata ad Alice.
Bob a questo punto Bob sa due cose:


il messaggio era diretto a lui perché è riuscito a decifrarlo con la sua chiave privata
il messaggio è stato firmato con la chiave privata relativa alla chiave pubblica che lui ha
usato per verificare la firma.
Notiamo che Bob non ha alcuna garanzia che la chiave sia realmente di proprietà di Alice.
Continuando l'esempio, supponiamo che una terza persona, Mallory, riesca ad intercettare la
comunicazione in cui Bob ottiene la chiave di Alice e riesca a sostituirla con la sua (di Mallory)
chiave pubblica in cui si spaccia per Alice. Bob non ha alcun modo per scoprire l'inganno.
Per risolvere situazioni di questo tipo nascono le CA che si fanno carico di verificare e garantire la
corrispondenza fra chiave e proprietario. Quando un utente richiede un certificato, la CA verifica la
sua identità, quindi crea un documento elettronico in cui sono contenuti:




i dati personali dell'utente
la chiave pubblica dell'utente
gli estremi della CA che ha rilasciato il certificato
gli indirizzi a cui può essere trovata la CRL.
Il documento viene firmato con la chiave pubblica della CA e pubblicato. Nell'esempio precedente
supponiamo che Alice e Bob si facciano firmare le loro chiavi da una CA che entrambi ritengono
attendibile. In questo caso l'attacco di Mallory non è più possibile in quanto non è in grado di
riprodurre la firma della CA.
Le Certification Authority commerciali sono sottoposte ad una rigida regolamentazione e
supervisione da parte dello Stato proprio a causa della sensibilità dei dati personali che gestiscono.
Le CA sono delle organizzazioni molto importanti nel panorama attuale del web; in genere tutti i
siti che si occupano di e-commerce o di transazioni on-line, perlomeno all'atto dell'autenticazione
dell'utente trasferiscono la comunicazione dal protocollo HTTP al protocollo HTTPS; all'atto della
negoziazione il client richiede il certificato del server e quindi viene instaurata la connessione
protetta. Quando un browser (ma anche un client di posta, ecc...) riceve un certificato, lo valida: Nel
processo di validazione verifica che tutto l'albero delle CA collegate al certificato sia fidato; un
certificato può non essere attendibile per diversi motivi, tra cui:
4
1. Il nome a cui è intestato il certificato non corrisponde al nome di chi lo ha presentato ( p.e. il
dominio www.miodomino.com deve presentare un certificato che sia intestato a
www.miodominio.com).
2. la data corrente non appartiene all'intervallo di validità del certificato.
3. Non tutte le CA che sono state coinvolte nel rilascio del certificato sono considerate
attendibili.
In genere i browser o i sistemi operativi contengono un elenco delle CA di primo livello e di livello
intermedio che sono ritenute attendibili e quindi sì "fidano" di quelle CA. Se tutte le CA coinvolte
nel rilascio del certificato in esame sono fidate, il certificato è ritenuto valido altrimenti viene
chiesto all'utente cosa fare, ossia se accettarlo o meno. Il problema di fidarsi o meno del certificato e
quindi dell'entità che lo ha presentato viene passato all'utente. Per cui il problema della fiducia
rimane a completo carico dell'utente. È automatico, quindi, che i siti o le infrastrutture utilizzino
certificati da CA molto famose e note per la loro affidabilità.
5
Doveri del gioco
Doveri di una CA
Considerando che la RA ha il compito di fornire, in quanto Autorità di Registrazione,
l’autenticazione dell’identità del soggetto, la convalida della corrispondenza tra una chiave pubblica
e l’identità del richiedente, la conferma di tale convalida nei confronti della CA, si è deciso, in
seguito alla visione dei dovuti documenti, di far rivestire tali compiti alla CA stessa; per cui i
principali doveri di una CA sono:









autenticare l’identità del soggetto;
convalidare la corrispondenza tra una chiave pubblica e l’identità del richiedente, attraverso
un metodo di verifica opportuno;
gestire le richieste di certificazione e l’emissione di nuovi certificati;
accettare e confermare le richieste di certificazione da parte di entità richiedenti un
certificato;
rilasciare certificati sulla base delle richieste autenticate;
rendere pubblicamente disponibili i certificati emessi;
occuparsi delle richieste di revoca dei certificati e della revoca degli stessi;
accettare e confermare le richieste di revoca da parte di entità richiedenti;
rendere le CRL pubblicamente disponibili.
Servizi offerti



Registrazione: questo è il processo attraverso il quale il richiedente si presenta alla CA, per
cercare di ottenere un certificato; durante la procedura viene richiesto al soggetto di fornire i
propri attributi, come il nome, l’indirizzo e-mail, il numero di telefono ed altre informazioni,
seguendo le specifiche CPS (Certification Practices Statement) della CA; quindi la CA
segue le linee guida specificate nel CPS, per verificare che i dettagli forniti dal soggetto
siano corretti, prima di emettere il certificato;
Certificazione: è il processo attraverso il quale la CA emette un certificato che contiene la
chiave pubblica del soggetto, lo pubblica in un repository pubblico ed accessibile a tutti
permettendo di scaricarlo;
Revoca o annullamento: nella maggior parte dei casi, un certificato rimane valido fino a
quando non viene raggiunta la data di scadenza. Ci sono, comunque, un certo numero di
situazioni in cui è necessaria una revoca prematura del certificato, ad esempio:
o il soggetto ha cambiato nome;
o un impiegato lascia la compagnia che ha emesso il certificato;
o si è verificata una compromissione (o una sospetta compromissione) della chiave
privata.
Il metodo stabilito per la revoca dei certificati include l’uso di una Certificate Revocation List
(CRL), che raccoglie i certificati revocati (normalmente ogni certificato è identificato da un numero
seriale unico, assegnato nel momento dell’emissione) ed è firmata, con tanto di data, dalla CA; la
CA pubblica la CRL ad intervalli regolari, nello stesso repository pubblico. Un certificato la cui
corrispondente chiave privata sia stata compromessa deve essere revocato il più presto possibile,
subito dopo che la compromissione è stata scoperta; altrimenti, se la CRL non venisse pubblicata
per molti giorni, dopo la revoca del certificato, gli utenti non sarebbero a conoscenza del problema e
6
potrebbero accettare messaggi firmati da un intruso con la chiave privata rubata; comunque, anche
se la CRL fosse pubblicata immediatamente dopo la revoca, non ci sarebbe garanzia che gli utenti
ne vengano a conoscenza in tempo. Una CRL permette ai clienti ed ai server di controllare se
l’entità con cui stanno dialogando possiede un certificato valido. Il CRL è un file binario che
contiene le seguenti informazioni:




lista di certificati revocati e ragione della revoca;
emissario della CRL;
data di emissione della CRL;
data di pubblicazione della prossima versione della CRL.
È importante specificare che quando la CA, che aveva originariamente emesso il certificato, lo
revoca, firma digitalmente la CRL: in questo modo, l’utente finale che controlla la CRL può essere
sicuro dell’attendibilità delle informazioni che la CRL contiene. Si accede ad una CRL quando si ha
bisogno di usare un certificato contenente una chiave pubblica per crittografare dati da inviare ad un
particolare destinatario, o per verificare la firma digitale presente in un messaggio ricevuto. Quando
si ha una qualsiasi di queste due necessità, si eseguono le seguenti operazioni:





si ottiene il certificato digitale richiesto;
si ottiene il numero seriale del certificato;
si ottiene la CRL (si accede al proprio repository locale di CRL);
si controlla la firma digitale della CRL, la data di pubblicazione e la data di prossima
pubblicazione;
si controlla la CRL per determinare se il certificato che si intende usare è stato revocato o
sospeso (basandosi sul numero seriale del certificato).
Doveri del sottoscrittore
Un utente deve comportarsi nel rispetto della Certification Practice Statements (CPS) della CA
addetta al rilascio di certificati. Tale accordo prevede:




lettura e rispetto delle procedure concordate;
opportuna custodia della propria chiave privata, in quanto unico possessore, nel caso in cui
la sottoscrizione si riferisca a un singolo utente. Nel caso, invece, di una chiave privata
rilasciata per un componente hardware o software, la custodia ed il controllo della chiave
possono essere affidati alla responsabilità di più di una persona autorizzata;
autorizzazione al trattamento ed alla conservazione dei dati personali;
immediata notifica alla CA in caso di compromissione della chiave privata.
Doveri di terze parti coinvolte
Una parte coinvolta deve venire a conoscenza della CPS e della policy utilizzata, prima di trarre
alcuna conclusione sulla fiducia da riporre nell’utilizzo di un certificato emesso da una CA
conforme. Essa, inoltre, deve controllare le CRL, al momento di convalidare l’utilizzo dello stesso
certificato.
7
Certificati digitali
Un certificato digitale è un documento elettronico che associa l'identità di una persona ad una
chiave pubblica. Viene emesso da una autorità di certificazione riconosciuta secondo standard
internazionali (X.509) e viene firmato con la chiave privata dell'autorità. Gli enti che fanno da
autorità devono sottostare a regole rigidissime per quanto riguarda la gestione dei dati personali,
pertanto si possono considerare sicuri.
I certificati garantiscono la tutela delle informazioni personali su Internet e consentono di
proteggere il sistema da programmi software non sicuri. Un certificato è un attestato che consente di
verificare l'identità di una persona o la protezione di un sito Web.
X.509
In crittografia, X.509 è uno standard ITU-T per le infrastrutture a chiave pubblica (PKI). X.509
definisce, fra le altre cose, formati standard per i certificati a chiave pubblica ed un certification
path validation algorithm.
Storia
X.509 venne presentato per la prima volta nel 1988 e il suo sviluppo cominciò insieme allo standard
X.500. La prima versione presupponeva uno stretto sistema di gerarchie di certificate authority
(CA) per presentare e garantire un certificato, in contrasto con il modello della rete di fiducia (web
of trust), utilizzato da PGP, dove chiunque (non solo CA particolari) può firmare e quindi attestare
(certificare) la validità delle chiavi altrui.
La Versione 3 di X.509 include flessibilità tipiche di altre tipologie di reti e filtri: può essere
utilizzato in una rete di fiducia peer-to-peer come quella di OpenPGP, anche se raramente è
implementata in questo modo. Il sistema X.500 non è mai stato totalmente implementato, e l'IETF
ed i public-key infrastructure working group hanno adattato lo standard con una struttura più
flessibile adatta ad internet. Infatti il termine certificato X.509 si riferisca generalmente al profilo di
certificato PKI e di revoca del certificato (CRL) dell'IETF dello standard X.509 v3, come descritto
nella RFC 3280.
Certificati X.509
Nel sistema X.509, una CA rilascia un certificato che accoppia una chiave pubblica ad un Nome
Distintivo(Distinguished Name) seguendo la tradizione del X.500, oppure ad un Nome
Alternativo(Alternative Name) come potrebbe essere un indirizzo e-mail o un record DNS.
Un root certificate fidato di un'azienda può essere distribuito a tutti i dipendenti, per far si che
possano usare la PKI aziendale. Browser come Internet Explorer, Netscape/Mozilla ed Opera
vengono distribuiti con alcuni root certificate preinstallati, rendendo possibile il funzionamento dei
certificati SSL di alcuni grossi distributori che hanno pagato per questo servizio; in pratica chi
sviluppa il browser determina quali CA sono terze parti fidate. Nonostante questi root certificate
possano essere eliminati o disabilitati, raramente gli utenti lo fanno.
X.509 include anche gli standard per le implementazioni di certificate revocation list (CRL, liste di
revoca di certificati), un aspetto spesso sottovalutato dei sistemi PKI. La modalità di controllo della
validità di un certificato approvata dall'IETF si chiama Online Certificate Status Protocol (OCSP).
8
Struttura del certificato
La struttura di un certificato digitale X.509 v3 è la seguente:



Certificato
o Versione
o Numero seriale
o ID dell'algoritmo
o Ente emettitore
o Validità
 Non prima
 Non dopo
o Soggetto
o Informazioni sulla chiave pubblica del soggetto
 Algoritmo per l'utilizzo della chiave pubblica
 Chiave pubblica
o Codice identificativo univoco dell'emittente (facoltativo)
o Codice identificativo univoco del soggetto (facoltativo)
o Estensioni (facoltativo)
Algoritmo di firma del certificato
Firma del certificato
I codici identificativi univoci dell'emettitore e del soggetto sono stati introdotti nella versione 2, le
"Estensioni" nella versione 3.
Estensioni comuni per i file contenenti i certificati X.509:







.CER - certificato codificato con DER, a volte sequenze di certificati;
.DER - certificato codificato con DER;
.PEM - certificato codificato con Base64, racchiuso tra "-----BEGIN CERTIFICATE-----" e
"-----END CERTIFICATE-----";
.P7B .P7C - struttura SignedData PKCS#7 senza dati, solo il/i certificato/i o la/le CRL (Certificate
revocation list);
.PFX - vedi .p12
.P12 - PKCS#12, può contenere certificati e chiavi pubbliche e private (protette da
password);
PKCS #7 è uno standard per la firma o la crittazione (viene chiamata "imbustamento",
"incapsulazione", "enveloping" in inglese) dei dati. Poiché è necessario un certificato per verificare
i dati firmati, è possibile includerli in una struttura SignedData. Un file .P7C non è altro che una
struttura SignedData "degenere" (senza dati firmati).
PKCS #12 è nato dallo standard PFX (Personal inFormation eXchange) ed è usato per scambiarsi
oggetti pubblici e privati all'interno dello stesso file. Un file .PEM può contenere certificati o chiavi
private, racchiusi tra le apposite linee BEGIN/END.
9
Installazione
Primo step
I software installati sono:










Knoppix: sistema operativo;
OpenCA: software principale per la realizzazione della CA;
Firestarter: firewall usato per impedire accessi indesiderati;
Apache: nel toolkit OpenCA, Apache agisce da interfaccia, in locale, ai programmi di
supporto sull’host CA. Tale versione è stata scelta per motivi legati alla sicurezza.
mod_ssl: fornisce un’eccellente crittografia per il web server Apache tramite SSL e TLS,
servendosi del toolkit OpenSSL;
OpenSLL: toolkit crittografico che implementa SSL (acronimo di Secure Socket Layer) e
TLS (acronimo di Transport Layer Security) ed i relativi standard crittografici da essi
richiesti. OpenSSL consente l’autenticazione alle applicazioni client-server (tramite
crittografia a chiave pubblica); garantisce la riservatezza della comunicazione; cifra i dati
prima di inviarli su canale pubblico (tramite crittografia a chiave simmetrica), fornisce
l’integrità dell’informazione e la possibilità di negoziazione della cipher_suite fra client e
server, oltre alla gestione dei certificati digitali x509;
OpenLDAP: server utilizzato per la pubblicazione dei certificati;
Perl: fornisce un’interfaccia al database MYSQL, si presta bene a sviluppare applicazioni
web perché può gestire dati cifrati, incluse le transazioni di commercio elettronico sicuro;
MySQL: usato come Data Base Management System.
Sendmail: usato per inviare mediante e-mail, all’atto della generazione del certificato, il
CRIN (codice per la revoca del certificato) al richiedente del certificato.
Per motivi di licenze sono stati utilizzati esclusivamente prodotti software freeware; ciò ha
facilitato non solo il reperimento del software ma anche l’utilizzo, essendo tali prodotti
utilizzati da gran parte della comunità telematica, che dissemina attraverso forum e siti web
notevoli informazioni sulle installazioni, sui conflitti, sulla risoluzione di problemi di
qualsiasi
tipo.
La nostra scelta è ricaduta sul software Dartmouth OpenCa-LiveCD, il quale tramite pochi e
semplici passaggi permette di installare tutto il software necessario per un Certification
Authority, in modo tale da rendere il sistema veloce e leggero all'avvio.
Dartmouth OpenCa-LiveCD è un CD bootable con uno script di installazione che aiuta le
persone ad avere una Certification Authority OpenCA pronta per essere installata in pochi
minuti. Questo CD può essere utilizzato sulla maggior parte delle architetture Intel
indipendente dal sistema operativo installato sul HDD. L'installazione non modificherà
alcun contenuto dell'HDD, a meno che non sia richiesto esplicitamente dall'installatore.
L'immagine del CD può essere scaricata da
http://media.dartmouth.edu/~deploypki/openca-livecd.iso
e la documentazione disponibile da
http://www.dartmouth.edu/~deploypki/CA/OpenCA-LiveCD.html
10
Sequenza di installazione
1.
2.
3.
4.
5.
Scaricare il file ISO dal link precedente
Masterizzare l'immagine del CD
Modificare il boot di avvio dal bios in modo da priorizzare il CD-ROM
Inserire il CD nel driver e riavviare il PC
A questo punto partirà uno script di configurazione automaticamente che permette di
personalizzare la propria CA
Secondo step
Dopo aver concluso la fase di setup, quella di tuning e dopo aver quasi concluso la prima commessa
il 10 di ottobre del 2006, sul sito www.openca.org è stata presentata una nuova release la 0.9.3rc1
che risolveva numerosissimi problemi riscontrati nell'utilizzo della precedente versione. Per questo
motivo si è scelto di re-installare tutto da capo svolgendo per la seconda volta la fare di setup e
quella di tuning.
Questa volta i software installati sono cambiati:











Suse Linux 10.1: sistema operativo;
OpenCA: software principale per la realizzazione della CA;
SuseFirewall: firewall usato per impedire accessi indesiderati;
Apache2: Apache agisce da interfaccia, in locale, ai programmi di supporto sull’host CA RA
e loro connessi. Tale versione è stata scelta per motivi legati alla sicurezza.
mod_ssl: fornisce un’eccellente crittografia per il web server Apache tramite SSL e TLS,
servendosi del toolkit OpenSSL;
OpenSLL: toolkit crittografico che implementa SSL (acronimo di Secure Socket Layer) e
TLS (acronimo di Transport Layer Security) ed i relativi standard crittografici da essi
richiesti. OpenSSL consente l’autenticazione alle applicazioni client-server (tramite
crittografia a chiave pubblica); garantisce la riservatezza della comunicazione; cifra i dati
prima di inviarli su canale pubblico (tramite crittografia a chiave simmetrica), fornisce
l’integrità dell’informazione e la possibilità di negoziazione della cipher_suite fra client e
server, oltre alla gestione dei certificati digitali x509;
OpenLDAP: server utilizzato per la pubblicazione dei certificati;
Perl: fornisce un’interfaccia al database PostgreSQL, si presta bene a sviluppare applicazioni
web perché può gestire dati cifrati, incluse le transazioni di commercio elettronico sicuro;
PostgreSQL: usato come Data Base Management System; questa volta abbiamo scelto di
utilizzare questo tipo di DBMS in quanto si è rilevato essere più robusto.
Sendmail: usato per inviare mediante e-mail, all’atto della generazione del certificato, il
CRIN (codice per la revoca del certificato) al richiedente del certificato.
moduli Perl: per la comunicazione tra PostgreSQL e OpenCA.
Sequenza di installazione
Tralascio al riguardo l'installazione di tutti i software necessari e mi soffermo in prevalenza
sull'installazione di OpenCA.
11
Prima di tutto serve scaricare l'ultima release di OpenCA dal sito www.openca.org (nel nostro caso
il file openca-0.9.3-rc1.tar.gz).



Scompattare il file con il comando: tar xvf openca-0.9.2-RC4.tar
posizionarsi nella directory scompattata e impartire questo comando: make distclean che
permette di ripulire tutte le configurazioni preimpostate.
A questo punto cominciamo col settare le configurazioni per la sezione Registration
Authority con
./configure --with-prefix=/usr/local/OpenRA --with-web-host=www.ca.org --with-httpduser=ca --with-httpd-group=users --with-ca-organization="CaGroup" --with-calocality=Salerno --with-ca-country=IT [email protected] --withhierarchy-level=ra --with-module prefix=/usr/local/OpenRA/modules --with-opensslprefix=/etc/ssl --with-hhtpd-fs-prefix=/etc/apache2 --with-language=it_IT --disable-rbac -enable-ocspd --with-openca-prefix=/usr/local/OpenRA/OpenCA --with-etcprefix=/usr/local/OpenRA/OpenRA/etc --with-httpd-fs-prefix=/usr/local/OpenRA/httpd -with-node-prefix=ra-node
Ora analiziamo in dettaglio tutti i comandi:



















--with-prefix=/usr/local/OpenRA: designa la directory di installazione
--with-web-host=www.ca.org : setta l'url del sito
--with-httpd-user=ca: setta l'utente apache
--with-httpd-group=users: setta il gruppo dell'utente apache
--with-ca-organization="CaGroup" : setta l'organizzazione
--with-ca-locality=Salerno : setta la località in cui si trova la RA
--with-ca-country=IT : setta lo stato
[email protected] setta la mail dalla quale inviare e alla quale è
possibile inviare mail
--with-hierarchy-level=ra setta la gerarchia
--with-module-prefix=/usr/local/OpenRA/modules setta la directory di destinazione dei
moduli
--with-openssl-prefix=/etc/ssl setta la directory dove si trova openssl
--with-hhtpd-fs-prefix=/etc/apache2 setta la directory dove si trova Apache
--with-language=it_IT setta la lingua di default
--disable-rbac disabilita il modulo rbac
--enable-ocspd abilita il modulo ocspd
--with-openca-prefix=/usr/local/OpenRA/OpenCA setta la directory di destinazione della
CA per la RA
--with-etc-prefix=/usr/local/OpenRA/OpenRA/etc setta la directory etc per la RA
--with-httpd-fs-prefix=/usr/local/OpenRA/httpd setta la directory di destinazione dei file per
il sito
--with-node-prefix=ra-node setta il nodo RA
Una volta fatto questo imparitre i comandi


make per compilare il tutto
make install-online per installare
Alla fine di tutto impartire il comando make distclean per ripulire dai settaggi e rfare lo stesso per il
modulo CA. Quello che cambia sono solo i comandi
12







--with-prefix=/usr/local/OpenCA per indicare la directory della CA
--with-hierarchy-level=ca per impartire la nuova gerarchia
--with-module-prefix=/usr/local/OpenCA/modulesper specificare la directory di insallazione
dei moduli
--with-openca-prefix=/usr/local/OpenCA/OpenCA per specificare la directory della CA
--with-etc-prefix=/usr/local/OpenCA/OpenCA/etc per specificare la directory etc per la CA
--with-httpd-fs-prefix=/usr/local/OpenCA/httpd per specificare la directory del sito per la
CA
--with-node-prefix=ca-node per specificare il nodo ca
A questo punto impartire i comandi


make per compilare
make install-offline per installare tutti i moduli per la CA
Ora bisogna settare tutti i parametri per il database postgreSQL




createuser openca per creare l'utente openca che accederà ad DB. A questo utente bisogna
dare tutti i permessi sia di creazione che di modifica delle tabelle e db
createdb openca per creare il database openca nel quale sarenno salvati tutti i dati della CA
psql openca. Per accedere al DB openca
grant all privileges on database openca to openca per garantire all'utente openca tutti i
permessi di accesso al database openca
Una volta completata questa fase
bisogna settare dei parametri per Apache in modo tale da indicargli le nuove directory e per fare ciò
bisogna modificare il file HTTP.conf che si trova nella directory di apache (nel nostro caso
/etc/apache2). Aprire il file e inserire questi comandi
# OpenCA Mods
# CA Aliases
Alias /ca /usr/local/openca/httpd/htdocs/ca/
Alias /ca-node /usr/local/openca/httpd/htdocs/ca-node/
ScriptAlias /cgi-bin/ca/ /usr/local/openca/httpd/cgi-bin/ca/
ScriptAlias /cgi-bin/ca-node/ /usr/local/openca/httpd/cgi-bin/ca-node/
# OpenCA Mods
# RA Aliases
Alias /ra /usr/local/openra/httpd/htdocs/ra/
Alias /pub /usr/local/openra/httpd/htdocs/pub/
Alias /ra-node /usr/local/openra/httpd/htdocs/ra-node/
ScriptAlias /cgi-bin/ra/ /usr/local/openra/httpd/cgi-bin/ra/
ScriptAlias /cgi-bin/pub/ /usr/local/openra/httpd/cgi-bin/pub/
ScriptAlias /cgi-bin/ra-node/ /usr/local/openra/httpd/cgi-bin/ra-node/
# OpenCA Mods
<Directory "/usr/local/openca/httpd/cgi-bin/">
AllowOverride None
Options ExecCGI
Order allow,deny
13
Allow from all
</Directory>
<Directory "/usr/local/openra/httpd/cgi-bin/">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
<Directory "/usr/local/openca/httpd/htdocs/">
AllowOverride None
Options FollowSymLinks Indexes
Order allow,deny
Allow from all
</Directory>
<Directory "/usr/local/openra/httpd/htdocs/">
AllowOverride None
Options FollowSymLinks Indexes
Order allow,deny
Allow from all
</Directory>
# OpenCA Mods
<Directory "/usr/local/openra/httpd/cgi-bin/pub">
AllowOverride None
Options FollowSymLinks Indexes
Order allow,deny
Allow from all
</Directory>
Questi comandi impartiscono degli alias per indicare dove si trovano le directory sull'hard-disk e
che alcune directory contengono dei file script da dover interpretare im maniera differente da quelli
html. Infine sono stati settati i permessi per l'accesso alle directory varie.
A questo punto bisogna configurare il file config.xml che si trova sia in
/usr/local/OpenCA/OpenCA/etc che in /usr/local/OpenRA/OpenRA/etc. Le modifiche da apportare
sono legate ai parametri di configurazione del DataBase e dello scambio di dati fra CA e RA.
#general options
ca_organization
ca_locality
ca_country
service_mail_account (mattere la email)
dbmodule -> DBI per PostgreSQL database
db_type-> postgre
db_name -> openca
db_host -> localhost
db_port -> la porta che si è settato
db_user -> openca
14
db_passwd -> XXX
<name>dataexchange_device_up</name>
<value>/usr/local/openca/openca/var/tmp/ca-up</value>
</option>
<option>
<name>dataexchange_device_down</name>
<value>/usr/local/openca/openca/var/tmp/ca-down</value>
</option>
<option>
<name>dataexchange_device_local</name>
<value>/usr/local/openra/openca/var/tmp/ra-local</value>
Dopo aver fatto tutto questo basta lanciare lo script configure_etc.sh il quale configurerà la nostra
CA e RA su come abbiamo settato il file config.xml.
Configurazione SendMail
Ora bisogna settare SendMail per permettergli di mandare le e-mail. Per prima cosa bisogna creare
un file: /usr/sbin/sendmail-cf/cf/config.mc contenente:
# start of config.mc
include(`../m4/cf.m4')dnl
OSTYPE(`linux')dnl
define(`SMTP_MAILER_FLAGS', `e9')dnl
FEATURE(redirect)dnl
FEATURE(nocanonify)dnl
FEATURE(always_add_domain)dnl
FEATURE(local_procmail)dnl
GENERICS_DOMAIN(localhost.localdomain localhost localhost)
FEATURE(genericstable)
FEATURE(masquerade_envelope)dnl
define(`confCF_VERSION',`dede's cf - 22/05/98')dnl
define(`confCON_EXPENSIVE',`True')dnl
define(`confME_TOO',`True')dnl
define(`confCOPY_ERRORS_TO',`Postmaster')dnl
define(`confDEF_CHAR_SET',`ISO-8859-1')dnl
define(`confMIME_FORMAT_ERRORS',`True')dnl
define(`SMART_HOST',`smtp8:[out.isp2.org]')dnl
define(`confTO_QUEUEWARN',`24h')
MAILER(local)
MAILER(smtp)
# End of config.mc
Create anche /etc/genericstable:
15
ca: [email protected]
root: [email protected]
news: [email protected]
Vericate che /etc/aliases contenga almeno:
MAILER-DAEMON: postmaster
postmaster: root
Modificate o create /etc/nsswitch.conf come segue:
passwd: files
shadow: files
group: files
hosts: files dns
services: files
networks: files
protocols: files
rpc: files
ethers: files
netmasks: files
bootparams: files
netgroup:
publickey:
automount: files
aliases: files
Generate /etc/sendmail.cf con:
m4 config.mc > /etc/sendmail.cf
e impostatene i permessi come segue:
-rw------- 1 root root 26468 mai 12 22:52 /etc/sendmail.cf
Generate il database di conversione degli indirizzi:
/usr/bin/sendmail -bi -oA/etc/genericstable
Dovrebbe essere stato creato il file /etc/genericstable.db.
Rileggete la tabella degli alias:
newaliases
Il file /etc/hosts dovrebbe contenere una linea simile a:
127.0.0.1 localhost.localdomain localhost localhost
riavviate sendmail:
16
kill `head -1 /var/run/sendmail.pid`
/usr/bin/sendmail -bd -os
Creazione di uno script per l’avvio dei servizi
A questo punto è stato creato uno script che permette l’avvio automatico di OpenCA lato
Certification Authority e lato Registration Authority.
#! /bin/sh
#
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=openca
DESC="OpenCA"
set -e
case "$1" in
start)
echo -n "Starting $DESC for CA: "
cd /usr/local/OpenCA/OpenCA/etc
openca_start
echo "DONE"
echo -n "Starting $DESC for RA: "
cd /usr/local/OpenRA/OpenRA/etc
openca_start
echo "DONE"
;;
stop)
echo -n "Stopping $DESC for CA: "
cd /usr/local/OpenCA/OpenCA/etc
openca_stop
echo "DONE"
echo -n "Stopping $DESC for RA: "
cd /usr/local/OpenRA/OpenRA/etc
openca_stop
echo DONE"
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop}" >&2
exit 1
;;
esac
exit 0
Tale script poi è stato posizionato nella directory /etc/init.d per permettere poi la modifica del run
level 5 così da avviare i servizi automaticamente.
17
Configurazione di OpenCA
1. Connettiti alla ca http://localhost/ca/ , saranno visibili una serie di tabs. Seleziona il tab
Generale e l’oggetto Initialization all’interno. Viene visualizzata la pagina "OpenCA Init"
con una serie di link organizzati in tre fasi:
Fase 1 : Inizializzazione della Certification Authority
2. Clicca su Initialize the Certification Authority. Viene visualizzata la pagina "Init
Certification Authority"
3. Clicca su Initialize Database. Ritorna alla pagina "Init Certification Authority" usando il
bottone Back
4. Clicca su Generate new CA secret key. Questo link conduce alla pagina "Get Additional
Parameters".
I valori di default sono:
a. Encryption algorithm (des,des3,idea):des3
b. Asymmetric algorithm (rsa, dsa):rsa
c. CA key size (in bits):4096
Clicca su OK
5. Inserisci la password CA Certificate Private Key nella pagina di login di CA. Questa
password proteggerà CA private key e deve essere inserita per lavorare con CA. Dopo aver
inserito la password clicca su OK. Il server crearà un paio di chiavi basate sui parametri che
hai inserito; questa operazione può richiedere alcuni minuti. Quando la generazione della
chiave è completata, uno screen mostrerà la chiave. Clicca su OK. Ritorna alla pagina "Init
Certification Authority".
6. Clicca su Generate new CA Certificate Request . Riempi i campi con i parametri necessari
per l’installazione. Clicca OK e conferma il DN generato dai parametri Si indicherà di
inserire le credenziali, cioè la private key password generata nel passo precedente. Ritorna
alla pagina "Init Certification Authority"
7. Clicca su Generate new CA Certificate Request . Riempi i campi con i parametri necessari
per l’installazione. Clicca OK e conferma il DN generato dai parametri Si indicherà di
inserire le credenziali, cioè la private key password generata nel passo precedente. Ritorna
alla pagina "Init Certification Authority"
8. Clicca su Self Signed CA Certificate. Si indicherà di inserire il periodo valido per la CA, e
di confermare le credenziali (private key password). Ritorna a "Init Certification Authority"
9. Clicca su Rebuild CA Chain. Dovresti avere una risposta di conferma.
10. Clicca su Export Configuration.
11. Clicca su OK.
Fase 2 : Creazione dell’amministratore
11. Clicca su Create the initial CA certificate. Questo link conduce alla pagina "Init First User".
Viene creato un certificato (e una coppia di chiavi) per identificare il CA Administrator
12. Clicca su Create a new request. Compila i dati utente/certificato come desideri. Il ruolo
dovrebbe essere "CA Operator"..Il PIN sarà usato per proteggere la chiave privata del
certificato sul server. Dai la conferma. Ritorna alla pagina "Init First User".
13. Clicca su Edit the request. Clicca su "Submit the changed request". Clicca su "Issue
Certificate". Si indicherà di confermare le credenziali. Ritorna alla pagina "Init First User"
18
14. Clicca su Handle the request.. Seleziona "Certificate and Keypair" come p12 nella sezione
"Operations"e clicca su "Download". Si indicherà la password per la chiave privata per
questo certificato, che era stata generata come il PIN sopra. p12 sarà salvato e può essere
importato nel browser per usarlo dopo.
Fase 3 : Creazione del certificato RA
15. Clicca su Create the initial RA certificate. Questo link conduce alla pagina "Init First User".
Questo passo permette di creare un certificato (e una coppia di chiavi) per identificare
l’amministratore RA
16. Clicca su Create a new request. Riempi i dati utente / certificato come desideri. Il ruolo
dovrebbere essere "RA Operator". Il PIN sarà usato per proteggere la chiave privata del
certificato sul server. Dai la conferma. Non c’è bisogno di stampare le informazioni. Ritorna
alla pagina "Init First User"
17. Clicca su Edit the request. Clicca su "Submit the changed request" e poi su "Issue Certificate
e conferma. Ritorna alla pagina "Init First User".
18. Clicca su Handle the request.. Seleziona "Certificate and Keypair" come p12 nella sezione
"Operations"e clicca su "Download".Si indicherà la password per la chiave privata per
questo certificato, che era generata come il PIN. p12 sarà salvato e può essere importato nel
browser per usarlo dopo.
Inizializzazione di RA
19. Connettiti a : http://localhost/ra-node/. Saranno visibili una serie di tabs. Seleziona
Administration e l’oggetto Server Init all’interno. Sarà visibile la pagina "Init New Node"
con due link.
20. clicca su Import Configuration in "PKI Setup". Questo passaggio consente di rendere il
certificato CA disponibile a RA e utenti pubblici
Certificati utenti
Sottomissione di una richiesta di certificato
L’OpenCA, per come l'abbiamo settato risponderà all'indirizzo www.ca.org. Se questa operazione
fallisce occorre farlo attraverso l’indirizzo IP, digitando il comando ifconfig nella shell dei
comandi.
1. Connetti a www.ca.org/pub
2. Seleziona il tab User e l’oggetto Request a Certificate. Si visualizza la pagina "Basic
Certificate Request"
3. Clicca su Request a certificate with automatic browserdetection. Appare la pagina "Basic
Certificate Request"
4. Compila la pagina "Basic Certificate Request", selezionando il ruolo "User". Clicca su
"Continue". Conferma la richiesta. La keysize deve essere riselezionata.. Cosa accade dopo
dipende dal browser. Mozilla chiede di confermare la keysize e di inserire la master keystore
password, che è la password che protegge la chiave private dell’utente. IE chiederà di
selezionare il sistema di crittografia, possibilmente passando attraverso alcune decisioni che
riguardano la chiave. Prendi nota del numero seriale della richiesta, lo userai per recuperare
il certificato.
19
Approvazione del certificato
Tutti questi passi devono essere eseguiti dalla console.
1. Connettiti alla ra http://localhost/ra/. Seleziona il tab Active CSRs e il nuovo item dentro di
esso. Viene visualizzata una pagina di ricerca. Se non hai bisogno di modificare i livelli di
sicurezza, puoi usare i parametri di ricerca di default. Clicca su "Search".
2. Dovrebbe comparire una lista di richieste. Clicca sul numero seriale della richiesta che
vorresti effettuare.
3. Conferma che la richiesta che appare è quella che desideri e clicca su "Approve Without
Signing”.
Il certificato
1. Connettiti a http://localhost/ca/. Seleziona Usual Operations e Approved Certificate
Requests.
2. Sono visualizzate una lista di richieste. Clicca sul numero seriale della richiesta che desideri.
3. Conferma che la richiesta che appare è quella che desideri e clicca su "Issue the Certificate".
Conferma la richiesta con la private key password.
Ottenere il certificato
1. Connettiti a www.ca.org/pub
2. Seleziona il tab User e l’oggetto Get Requested Certificate. Inserisci il numero seriale e
seleziona "Request's Serial" dal box di selezione "Type of Serial".
Clicca su OK.
3. Conferma che il certificato è presente :
 con Mozilla digita (Edit->Preferences->Privacy and Security->Certificates->Manage
Certificates)
 con Windows digita (Tools->Internet Options->Content->Certificates->)
Ottenere il certificato root
1. Connettiti a www.ca.org/pub
2. Seleziona il tab CA Infos e l’oggetto Get CA Certificate.
3. Seleziona "CA-certificate in format CRT ". Con Mozilla / Netscape devono essere eseguiti i
seguenti passi:
 confidare in questa CA per identificare siti web
 confidare in questa CA per identificare emails di utenti
 confidare in questa CA per identificare sviluppatori software
Clicca su OK.
Gli utenti di Internet Explorer su Windows devono seguire questi passi :
1. Sulla finestra di dialogo che appare clicca su "Open".
2. Clicca su 'Install Certificate...' nella finestra che appare.
3. accetta la Certificate Installation Wizard.
20
Manuale d'uso
Utente
L’utente si deve collegare al sito https://www.ca.org/; il browser visualizza la pagina mostrata in
Figura 1, con le tab GENERAL, CA Infos, User, Certificates, Requests, Language. In GENERAL
vengono visualizzati i diversi moduli installati con le rispettive versioni
Figura 1
Cliccando su CA Infos compaiono i seguenti link:



Policy;
Get CA Certificate: se cliccato, vengono visualizzati i link per scaricare il certificato della
CA nei formati desiderati (CRT, PEM, DER, CER, TXT);
Certificate Revocation Lists: se cliccato, compaiono i link per visualizzare la lista dei
certificati revocati nei diversi formati.
Cliccando su User compaiono i seguenti link:


Request a Certificate: cliccando su di esso, compaiono i link che consentono di richiedere un
certificato. Viene chiesto all’utente di compilare un form inserendo i propri dati e di
confermare la sottomissione. Dopo aver completato la richiesta, l’utente deve recarsi dalla
RA scelta (nel nostro caso dalla CA) per l’approvazione della richiesta;
Get Requested Certificate (scarica il certificato richiesto): cliccando su di esso, viene chiesto
all’utente di inserire il numero seriale del certificato per poterlo scaricare. Se il certificato è
21


stato generato dalla CA, l’utente può scaricarlo, altrimenti viene visualizzato un messaggio
di errore;
Test Certificate: cliccando su di esso, vengono riportati i dati principali del certificato
presentato dal browser;
Revoke Certificate: cliccando su di esso, viene visualizzato all’ utente un form richiedente il
numero seriale del certificato da revocare con il CRIN precedentemente ricevuto tramite email.
Figura 2
Cliccando su Request a certificate viene visualizzata una form nella quale inserire tutti i dati
22
Figura 3
Dopo aver compilato e sottomessa la form, viene visualizzata una schermata riassuntiva
Figura 4
23
Infine viene presentata la schermata conclusiva che da all'utente la possibilità di stampare tutti i
dati.
Figura 5
24
Amministratore
Per accedere alla sezione amministrativa di OpenCA l’amministratore si deve collegare al sito
"http://localhost ”; appare una schermata in cui viene richiesto l’inserimento di login e password.
Figura 6
Dopo la procedura di autenticazione appare la schermata generale dell’interfaccia CA in cui
vengono visualizzati i seguenti link: General, Usual Operations, Active CSRs, Active CRRs,
Information, Language, Initialization, Configuration, Node Mangement, Logout.
Cliccando su General vengono visualizzati modulo e versione dei software utilizzati e richiesti da
OpenCA. Cliccando su Usual Operation appaiono i seguenti link:




Approved Certificate Requests: cliccando su di esso, è possibile visualizzare la lista delle
richieste di certificazione approvate dalla CA; per ogni richiesta sono riportati diversi dati,
come il nome del richiedente ed il numero seriale della richiesta;
Approved Revocation Requests: cliccando su di esso, è possibile visualizzare la lista delle
richieste di revoca approvate dalla CA; per ogni richiesta sono riportati diversi dati, come il
nome del richiedente ed il numero seriale della richiesta;
Issue New CRL: cliccando su di esso, appare una schermata in cui viene richiesto di inserire
dei parametri addizionali per la funzionalità richiesta, cioè viene settato il periodo di validità
(in giorni) della CRL (Control Revocation List) e le eventuali estensioni;
Issue Certificates (Automaticly): attraverso questo link viene consentito di selezionare il tipo
di ruolo dell’operatore ed il ruolo richiesto per l’emissione del certificato e viene data la
possibilità di confermare i dati, inserendo la password, o di effettuarne il reset;
25

Revoke Certificates (Automaticly): attraverso questo link viene consentito di selezionare il
tipo di ruolo dell’operatore ed il ruolo richiesto per la revoca del certificato e viene data la
possibilità di confermare i dati, inserendo la password, o di effettuarne il reset.
Cliccando su Active CSRs appaiono, invece, i seguenti link:

New: cliccando su di esso, appare la lista delle nuove richieste di certificazione. Per ogni
richiesta vengono visualizzati il numero seriale della richiesta, i dati del richiedente, la data
della richiesta, il ruolo richiesto ed il livello di affidabilità richiesto;

Cliccando sul seriale della richiesta è possibile visualizzare tutte le informazioni relative alla
richiesta e l’amministratore può decidere di modificare la richiesta (Edit Request),
cancellare la richiesta (Delete Request), rilasciare il certificato (Issue Certificate).
Se l’amministratore clicca su Edit Request è possibile modificare la richiesta nei suoi singoli campi.
Se l’amministratore clicca su Issue Certificate viene richiesto di immettere la password della CA e,
dopo la sottomissione, viene rilasciato il certificato;


Renewed: cliccando su di esso, appare la lista delle richieste rinnovate di cui vengono
specificati alcuni dati come l’operatore, il numero seriale, ecc…;
Pending: cliccando su di esso, appare la lista delle richieste pendenti, cioè quelle in attesa di
approvazione, delle quali viene specificato il numero seriale, il richiedente, la data, il ruolo
richiesto ed il livello di affidabilità richiesto;

Cliccando sul seriale della richiesta è possibile modificare la richiesta (cliccando su Edit
Request), rilasciare il certificato (cliccando su Issue Certificate), oppure cancellare la
richiesta (cliccando su Delete Request).

Waiting for additional assignature: cliccando su di esso, viene mostrata la lista dei certificati
già firmati che hanno bisogno di un’ulteriore firma;
Approved: cliccando su di esso, appare le lista delle richieste di certificazione approvate di
cui vengono visualizzate varie informazioni come l’operatore, il numero seriale, ecc…;

Cliccando su Active CRRs appaiono i seguenti link:




New: cliccando su di esso, appare la lista delle nuove richieste di revoca dei certificati. Per
ogni richiesta vengono visualizzati il numero seriale della richiesta, i dati del richiedente, la
data della richiesta, il ruolo richiesto ed il livello di affidabilità richiesto;
Pending: cliccando su di esso, appare la lista delle richieste di revoca pendenti, cioè quelle
in attesa di approvazione, delle quali viene specificato il numero seriale del certificato, il
richiedente e la data di richiesta;
Waiting for additional assignature: cliccando su di esso, viene mostrata la lista delle
richieste di revoca che hanno bisogno di un’ulteriore firma; per ogni richiesta vengono
visualizzati campi come l’operatore, il seriale del certificato, il nome del richiedente, la data
della firma, il ruolo richiesto;
Approved: cliccando su di esso, appare la lista delle richieste di revoca approvate di cui
vengono visualizzati i seguenti campi: operatore, seriale del certificato, nome del
richiedente, data di approvazione.Cliccando sul seriale del certificato viene visualizzata una
pagina nella quale si ha la possibilità di revocare il certificato cliccando sul bottone Revoke
26
Certificate ed inserendo la password della CA. Nel momento in cui la richiesta di revoca
viene approvata, il certificato passa dallo stato di validità a quello di sospensione;
Cliccando su Information appaiono i seguenti link:

Certificate Requests: cliccando sul link Archived viene visualizzata la lista delle richieste di
certificazione archiviate , mentre cliccando su Deleted viene visualizzata la lista delle
richieste di certificazione cancellate;


Revocation Requests: permette di visualizzare le richieste di revoca;
Certificates: cliccando su di esso, è possibile visualizzare:
o i certificati validi (tramite il link Valid) di cui vengono specificati il seriale, il nome,
l’e-mail ed il ruolo;
o i certificati scaduti (tramite il link Expired) di cui sono specificati il seriale, il nome,
l’e-mail ed il ruolo;
o la lista dei certificati sospesi (tramite il link Suspended) dei quali sono specificati il
seriale, il nome, l’e-mail ed il ruolo;
o la lista dei certificati revocati (tramite il link Revoked).
Ca Certificates: tramite questo link è possibile visualizzare i certificati validi e quelli scaduti
della CA; inoltre, cliccando sul seriale del certificato è possibile scaricarlo scegliendo il
formato desiderato;
CRLs: permette di visualizzare la lista di tutti i certificati revocati.


Cliccando su Language è possibile scegliere la lingua desiderata.
Cliccando su Initialization appare una schermata che permette di inizializzare l’infrastruttura a
chiave pubblica attraverso tre fasi.

Prima fase: Initialize the Certification Authority. Questo link viene usato quando si esegue
OpenCA per la prima volta (quindi si deve inizializzare la stessa CA) o quando si deve
importare il certificato approvato dalla root CA. Ci sono diversi link che permettono di
effettuare:
o inizializzazione del database (vengono mostrate le istruzioni sql);
o inizializzazione delle chiavi (permette di generare una nuova chiave segreta della
CA. Si deve specificare l’algoritmo per la generazione delle chiavi, l’algoritmo per la
cifratura della chiave e la lunghezza della chiave);
o inizializzazione della richiesta (permette di stabilire i campi necessari per una
richiesta di certificazione alla CA);
o setup del certificato;
o ultimi passi.

Seconda Fase: Create the initial administrator. Questo link serve ad inizializzare il primo
utente dell’infrastruttura a chiave pubblica che è l’amministratore. A tal fine vengono
visualizzati i passi da seguire:
o generare una nuova richiesta;
o modificare la richiesta;
o rilasciare il certificato;
o scaricare il certificato.
27

Terza Fase: Create the initial RA Certificate. Questo link viene utilizzato per creare il primo
certificato server dell’infrastruttura a chiave pubblica e l’utente dovrebbe essere un web
server. A tal fine vengono visualizzati i passi da seguire:
o generare una nuova richiesta;
o modificare la richiesta;
o rilasciare il certificato;
o scaricare il certificato.
Cliccando su Configuration compaiono i seguenti link:

Roles: cliccando su di esso, appare la lista dei ruoli disponibili nell’ infrastruttura a chiave
pubblica, in cui si può anche aggiungere un ruolo;

Rights: cliccando su di esso, vengono mostrati i diritti, identificati dal modulo, operatore,
operazione, proprietario. E’ permesso cancellare un singolo diritto o aggiungere nuovi
diritti;

Modules: cliccando su di esso, vengono mostrati i moduli disponibili nell’infrastruttura a
chiave pubblica, identificati dal numero, descrizione ed è possibile anche cancellarli;

Sign the configuration: cliccando su di esso, viene permesso di approvare la configurazione
inserendo la password;
Cliccando su Logout viene permesso di uscire dalla sessione.
28
Tuning
Servizi Richiesti
La CA necessitava della registrazione del dominio “https://www.ca.org/”, effettuata dal gruppo
NIC. Collegandosi a tale dominio un qualsiasi utente può effettuare diverse richieste (la richiesta di
un certificato o della sua revoca). Il gruppo NIC, oltre a fornire la registrazione del dominio,
fornisce anche il servizio di “whois”, cioè tramite software, NIC, permette di riconoscere l’identità
dell’intestatario del dominio ed in più permette la sincronizzazione con il loro CLOCK.
Richieste effettuate
Collegandosi ad https://www.nic.org/abbiamo compilato il form di richiesta registrazione utente, ci
siamo autenticati con i dati di ingresso ed abbiamo effettuato la richiesta del nuovo dominio
www.ca.org.
Inoltre abbiamo richiesto un indirizzo e-mail a ISP1 [email protected] .
In più per l’abilitazione del protocollo HTTPS è stato necessario creare due certificati firmati dalla
CA per web server. In appendice aggiungiamo una guida su come abilitare HTTPS sotto apache.
Richieste ricevute
La CA ha rilasciato, in seguito all’apposita richiesta di certificazione, due certificati al gruppo NIC
uno in qualità di USER e l'altro in qualità di WEB SERVER; due certificati al gruppo ISP1 in
qualità di OPERATOR, WEB SERVER. Tali certificati sono tutti ancora validi, sia perchè il loro
periodo di validità non è ancora terminato, sia perché nessun gruppo ne ha richiesto la revoca.
29
Prima commessa
Studio di fattibilità su LDAP: Panoramica sulla situazione attuale
Con la nascita ed evoluzione di Internet e con il notevole incremento dei suoi utenti, sono sorti
problemi di sicurezza:



La suite di protocolli TCP/IP non prevede nessun meccanismo che garantisce confidenzialità
e privacy tra gli utenti.
Gli scenari e le applicazioni in cui è richiesta confidenzialità e privacy delle connessioni
sull'inter-rete sono molteplici.
Accedere in maniera privata ad una directory remota dislocata su di un server è uno di questi
possibili scenari.
Una directory è un database specializzato per la lettura e la ricerca, con la possibilità di contenere
informazioni basate su attributi o descrizioni, offrendo supporto di sofisticate capacità di ricerca
attraverso dei filtri e risposte veloci ad operazioni di consultazione o di ricerca su volumi di dati
enormi.
Alcuni servizi di directory sono locali: forniscono servizi ad un ristretto contesto, ad esempio una
singola macchina. Altri servizi sono globali: forniscono servizi ad un contesto più ampio, quale ad
esempio l’intera Internet. I servizi globali sono distribuiti: i dati contenuti sono memorizzati in
diverse macchine, ognuna delle quali provvede al servizio di directory.
Progetto della soluzione
LDAP è un acronimo che sta per LIGHTWEIGHT DIRECTORY ACCESS PROTOCOL. È un
protocollo leggero per accedere ai servizi di directory, basati sul protocollo X.500. Opera su TCP/IP
o su altre connessioni orientate ai servizi di trasferimento. Il modello di informazioni di LDAP è
basato sulle entry che sono collezioni di attributi che hanno un unico nome globale: il Distinguished
Name (DN). Ogni attributo della entry ha un tipo ed uno o più valori, che sono stringhe
mnemoniche, come cn per i common name, oppure mail per gli indirizzi di posta elettronica.
Le entry di una directory sono strutturate come in una struttura gerarchica ad albero: la entry che
rappresenta il paese si trova alla radice dell’albero, al di sotto di essa ci sono quelle che
rappresentano stati e organizzazioni nazionali e infine seguono poi altri tipi di entry che possono
rappresentare organizzazioni, persone, stampanti, documenti, ecc.
30
Figura 7
Il protocollo LDAP definisce servizi per accedere e aggiornare una directory; l’operazione più usata
è quella di ricerca di informazioni all’interno della directory e LDAP fornisce un efficiente
algoritmo di ricerca. Molti servizi di directory non prevedono protezione per i dati e le
informazioni. LDAP include un meccanismo nel quale un client si può autenticare, o provare la sua
identità ad un directory server, infine consente servizi di privacy e di integrità delle informazioni.
Funzionamento di LDAP
Il servizio di directory LDAP è basato su un modello client – server: uno o più server LDAP
contengono i dati che servono a costruire l’albero delle informazioni di una directory, il DIT
(Directory Information Tree). Il client si connette al server e gli chiede informazioni, il server
replica con risposte precise e/o con un puntatore ad eventuali informazioni addizionali, infine il
client LDAP può comunicare sia con un server X.500 sia con un server LDAP.
Specifiche generali del sistema
Ora esplicitiamo le varie configurazioni delle directory

Servizi di directory locali: in questa configurazione, esiste un unico server che offre servizi
di directory solo in un unico dominio.
Figura 8
31

Servizi di directory locali con riferimento: in questa configurazione, si imposta un server che
offre servizi di directory per il dominio locale e lo si configura per ritornare riferimenti ad
un servizio superiore capace di occuparsi di richieste esterne al dominio locale; è usata se si
vogliono fornire servizi di directory locali e partecipare alla "Directory Globale" tramite
Internet.
Figura 9

Servizi di directory replicati: in questa situazione è usato un demone per propagare
cambiamenti da un server master del servizio ad uno o più server slave; può essere usata
assieme ad altre in situazioni dove un solo server non offre l'affidabilità richiesta.
Figura 10

Servizio di directory locale distribuito: in questa configurazione, il servizio globale è
partizionato in servizi più piccoli ognuno dei quali può essere replicato e unito a riferimenti
superiori e subordinati.
Modalità di realizzazione
Per installare OpenLDAP è possibile scaricarlo dal sito http://www.openldap.org/. Una volta
ottenuto il pacchetto in formato compresso lo si deve decomprimere con il comando:
gunzip -c openldap-VERSION.tgz | tar xf –
sostituendo VERSION con la versione corrente del pacchetto. Lo stesso pacchetto è disponibile
anche in versione RPM per le versioni di Linux che supportano tale standard (RedHat, Suse,
32
Mandrake).
Per il corretto funzionamento di OpenLDAP occorre installare software di terze parti: Kerberos per
la gestione della sicurezza nel processo di autenticazione, librerie SASL di Cyrus per offrire
servizi di autenticazione sicuri e ulteriori servizi di sicurezza
Slapd è il demone che gestisce le richieste dei client del servizio, esso supporta i TCP Wrappers per
la gestione degli accessi a livello IP e per funzionalità di firewalling. La parte di backend del
demone slapd richiede la presenza della libreria per la gestione di database SleepyCat Software
Berkeley DB.Berkeley DB è disponibile dal mirror Sleepycat alla pagina
http://www.sleepycat.com/download.html.
Lo script di configurazione configure supporta diverse opzioni e la gestione di flags e variabili
d'ambiente. Per avere accesso a ulteriori informazioni sulla configurazione digitare il comando:
./configure --help
Inoltre lo script configure comprende la gestione di variabili d'ambiente per l'impostazione di
particolari opzioni.
Successivamente fare il build del pacchetto; se la fase di configurazione è andata a buon fine sarà
possibile generare le dipendenze per la compilazione, ciò avviene tramite il comando:
make depend
Il building dell'applicazione deve essere eseguito con il comando:
make
facendo attenzione all'output prodotto per vedere se sono stati generati errori durante tale fase.
Una volta che l'applicazione è stata configurata e compilata è possibile fare il testing dei file
generati con il comando:
make test
Dopo aver testato i file generati in fase di building è ora possibile procedere all'installazione vera e
propria. Innanzitutto è necessario verificare di essere in possesso dei privilegi di scrittura nelle
directory specificate in fase di configurazione. Per default OpenLDAP è installato nella directory
/usr/local/.Tipicamente la fase di installazione richiede i privilegi del superuser. Ottenuti i privilegi
di root, dalla directory d'installazione di OpenLDAP si esegue il comando:
make install
prestando sempre attenzione all'output generato, nel caso siano presenti errori.
Slapd gestisce le richieste dei client del servizio. Spesso è in esecuzione su più macchine della rete
per aumentare la disponibilità del servizio con una copia di parte o tutta la struttura dell’albero di
directory
33
Figura 11
Possono esistere più istanze di slapd (slave) che fanno riferimento ad un'istanza master. L'istanza
master mantiene un file di log con le informazioni che il demone slurpd passerà alle istanze slave
Figura 12
La configurazione del demone slapd avviene mediante il file slapd.conf solitamente posto nella
directory /etc/openldap . Il file slapd.conf consiste di tre sezioni per la configurazione: global,
backend specific e database specific.
Le informazioni della sezione global sono le prime ad essere specificate all'interno del file,
successivamente sono definite le direttive della sezione di backend ed infine quelle di database. Le
34
direttive globali possono essere sovrascritte da quelle di backend e/o di database , e le direttive di
backend possono essere annullate dalle direttive di database.
Struttura di slapd.conf : Esempio
Le righe di commento iniziano con il simbolo #.La struttura di slapd.conf è simile alla seguente:
# Direttive di configurazione globali <global config directives>
# Definizioni di backend backend <typeA> <backend-specific directives>
# Definizione di direttive di database e tipo database <typeA> <database-specific directives>
# Seconda definizione di direttive di database database <typeB> <database-specific directives>
# Successive direttive di backend, database e di configurazione ...
access to attr=userPassword
by self write
by anonymous auth
by dn.base="cn=Admin, dc=example, dc=com" write
by * none
Specifica che l’amministratore può modificare l’attributo userPassword di qualsiasi entry, che ogni
entry può modificare il suo attributo userPassword e che tutti gli altri non hanno permesso di lettura
e di scrittura.
access to *
by dn.base="cn=Admin, dc=example, dc=com"
write
by * read
Specifica che l’amministratore ha permesso di scrittura su qualsiasi oggetto e tutti hanno permesso
di lettura su tutti gli oggetti.
Slapd è stato progettato per essere eseguito come server stand-alone. I comandi per avviare slapd
variano a seconda del tipo di installazione che è stata fatta, se da file RPM oppure da sorgenti.
Per installazioni da RPM digitare da riga di comando:
#/etc/init.d/slapd start
Per installazioni da sorgenti:
#/usr/local/etc/libexec/slapd start
Anche la terminazione varia a seconda del tipo di installazione che è stata fatta.
Per installazioni da RPM:
#/etc/init.d/slapd stop
Per installazioni da sorgenti:
#kill –INT ‘cat /usr/local/var/slapd.log’
Per quanto riguarda la procedura di avvio è possibile specificare opzioni della riga di comando.Le
più utili sono:
-f <nome_file>
Specifica il percorso del file di configurazione
-h <URL>
Specifica configurazioni alternative per il listener.
quella di defaul è ldap:// che implica LDAP su TCP su tutte le
35
interfacce e porta 389
-n <nome_servizio>
Specifica il nome del servizio.Default=slapd
-l <syslog-utente-locale>
Specifica l’utente abilitato al syslog
Analisi costi benefici
Le politiche di sicurezza assumono un’importanza quanto mai vitale in un contesto di
autenticazione/autorizzazione. In realtà aziendali dove concetti quali sicurezza dei dati,
certificazione e privacy sono ormai di primaria importanza, l’esistenza di protocolli intrinsecamente
insicuri non può essere che relegata a casi del tutto eccezionali. L’identità del server LDAP è
garantita dal suo certificato, che deve essere distribuito a tutti i client. Oltre alla sicurezza delle
transazioni, è stata dedicata particolare attenzione alla sicurezza dei dati residenti nel server LDAP,
che rappresenta a tutti gli effetti il repository vero e proprio delle informazioni. A questo scopo,
esiste un unico amministratore che a sua volta definisce le politiche di accesso ai dati in base
all’utenza.
Tipicamente un utente deve essere in grado di poter leggere i suoi dati personali, modificare la
propria password, e leggere dati pubblici. Ogni accesso ad altri dati viene negato. In generale, le
performance di un sistema di autenticazione possono essere valutate basandosi sui tempi medi di
risposta ad un tentativo di login. In un architettura basata su LDAP, i tempi di risposta sono
mediamente superiori, specialmente con server LDAP particolarmente popolati.
Sono inoltre disponibili funzionalità di load balancing, con la possibilità di mantenere sottorami
dell’albero LDAP in server diversi. Un semplice meccanismo di linking permette di mantenere
l’effettiva univocità logica della struttura. Il beneficio che se ne trae anche in termini di scalabilità è
notevole, soprattutto considerando il fatto che diversi server LDAP possono essere strutturati
gerarchicamente su più livelli. In scenari particolarmente complessi,LDAP può scalare per aree
geografiche. Infine può essere implementato un meccanismo di replicazione, anch’esso
estremamente semplice dal punto di vista concettuale, con lo scopo di mantenere altre copie del
server LDAP, sincronizzate col principale, in grado di sostituirlo in caso di malfunzionamento dello
stesso. La modalità di sincronizzazione può essere personalizzata, in modo da non sovraccaricare la
rete. Questo garantisce continuità del servizio sia nel caso di modifica dei dati che per
manutenzione del server.
Autenticazione con LDAP usando openLDAP e PAM (Pluggable
Authentication Module)
Nel seguito viene descritto come settare le 3 componenti necessarie per l’autenticazione attraverso
un server LDAP. Occorre :



aggiungere i campi necessari nel server LDAP
installare e configurare i moduli PAM
installare e configurare le librerie nsswitch
36
Aggiungere informazioni utente al database LDAP
Per usare LDAP autentication occorre aggiungere tutte le dipendenze al database. La migliore fonte
per questo tipo di cose sono i file /etc/passwd, /etc/group e /etc/shadow. Ci sono alcuni tool di
migrazione che trasformano :
cat /etc/passwd
...
simon:rF4x4xNEP1bA.:1000:1000:Simon
Tenant,Fish-bowl,x 245,:/home/simon:/usr/bin/zsh
...
in qualcosa del genere :
dn: uid=simon,ou=People,dc=linuxcare,dc=com
uid: simon
cn: Simon Tennant
objectClass: account
objectClass: posixAccount
objectClass: top
userPassword: {crypt}rF4x4xNEP1bA.
loginShell: /usr/bin/zsh
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/simon
gecos: Simon Tennant,Fishbowl,x 245
Questi tools sono disponibili al seguente indirizzo :
http://www.padl.com/download/MigrationTools.tgz. Vi sono una serie di script, il più importante è
migrate_passwd.pl che trasforma le entries di /etc/passwd nel formato LDIF.
Script
Migra
migrate_fstab.pl
/etc/fstab
migrate_group.pl
/etc/group
migrate_hosts.pl
/etc/hosts
migrate_networks.pl /etc/networks
migrate_passwd.pl /etc/passwd
migrate_protocols.pl /etc/protocols
migrate_rpc.pl
/etc/rpc
migrate_services.pl /etc/services
Tabella 1
Per il server LDAP occorre caricare le entries nel database LDAP.
/etc/init.d/openldapd stop
ldif2ldbm -i /tmp/converted_passwd.out -f /etc/openldap/slapd.conf
Questocomando dipende dal tipo di database che si sta utilizzando con il server
LDAP ( Nel caso della nostra guida il database è il Berkeley DB e quindi per
aggiungere le entries al DIT usiamo il comando
# ldapadd –d “cn=admin,dc=example,dc=com” –W –f passwd.ldif
/etc/init.d/openldapd start
37
e controllare che le entries aggiunte ci siano nel seguente modo :
ldapsearch -b dc=linuxcare,dc=com objectclass=posixaccount
Se invece non stiamo migrando un sistema ma costruendone uno nuovo possiamo
usare uno strumento grafico realizzato in Python chiamato LUMA che tra le varie
funzionalità ha quella di poter creare utenti in modo ‘massive’ consentendo una
popolazione iniziale del server LDAP.
Settare i moduli PAM
Linux usa PAM (Pluggable Authentication Modules) per l’autenticazione. Pam è facilmente
configurabile. I file di Pam si travano in /etc/pam.d. L’autenticazione con PAM funziona
sostituendo i moduli /etc/passwd e /etc/group con il modulo ldap.so
La configurazione di pam sshd è la seguente :
cat /etc/pam.d/ssh
#%PAM-1.0
auth
required
account
required
password
required
session
required
pam_unix.so
pam_unix.so
pam_unix.so
pam_unix.so
Per usare ladap authentication occorre scaricare un modulo che può essere sostituito per
"pam_unix.so" che controlla le passwords al server ldap.


source http://www.padl.com/download/pam_ldap.tgz
rpm at: http://rpmfind.net/linux/RPM/pam_ldap.so.html
I due file principali sono sono /lib/security/pam_ldap.so che comunicano con il server LDAP e
/etc/pam_ldap.conf che rappresenta il modulo con il quale il server ldap dovrebbe comunicare e al
quale vengono effettuate le query.
Il passo successivo consiste nel settare il file /etc/pam_ldap.conf a seconda dell’organizzazione
della struttura. Ad esempio :
cat /etc/pam_ldap.conf
# Your LDAP server.
host ldap.linuxcare.com
# The distinguished name of the search base.
base dc=linuxcare,dc=com
# Use the V3 protocol to optimize searches
ldap_version 2
# Hash password locally; required for University of
# Michigan LDAP server, and works with Netscape
# Directory Server if you're using the UNIX-Crypt
# hash mechanism and not using the NT Synchronization
# service.
pam_crypt local
Come è possibile vedere, tutte le queries vengono inviate a ldap.linuxcare.com e cercate da
dc=linuxcare,dc=com.
38
Per effettuare dei cambiamenti occorre modificare il file /etc/pam.d/ssh.
auth
auth
auth
account
account
password
password
session
umask=0022
session
required
sufficient
required
sufficient
required
required
required
required
/lib/security/pam_nologin.so
/lib/security/pam_ldap.so
/lib/security/pam_pwdb.so shadow nodelay
/lib/security/pam_ldap.so
/lib/security/pam_pwdb.so
/lib/security/pam_cracklib.so
/lib/security/pam_pwdb.so shadow nullok use_authtok
/lib/security/pam_mkhomedir.so skel=/etc/skel/
required
/lib/security/pam_pwdb.so
Settare le librerie nsswitch
Varie funzioni nella libreria C come login e passwd hanno bisogno di essere configurati per
lavorare con ldap. nsswitch permette appunto di fare questo. Un buon esempio è quando viene
effettuato un comando ls su una directory che contiene files che sono di proprietà di un utente ldap.
ls -l /home
drwxr-sr-x
drwxr-sr-x
drwxr-sr-x
drwxr-sr-x
drwxr-sr-x
drwxr-sr-x
drwxr-sr-x
3
5
2
5
3
85
2
redsteel
rob
robert
rslomkow
10002
10011
10301
users
users
users
users
users
users
users
1024
1024
1024
1024
1024
7168
1024
Feb
May
Sep
Jul
Jun
Jul
Jun
27
27
12
15
22
24
30
05:44
13:54
1999
19:40
1999
12:09
17:53
redsteel
rob
robert
rslomkow
sam
simon
stephane
Per fare questo ls ha bisogno di controllare gli uids e gids dei files nella directory. A questo
proosito si può usare nsswitch. E’ possibile istruire tutti i programmi che dipendoo dalla libreria C
di controllare per prima gli uids e gids in /etc/passwd e /etc/group e controllare il server ldap.
ls -l /home
drwxr-sr-x
drwxr-sr-x
drwxr-sr-x
drwxr-sr-x
drwxr-sr-x
drwxr-sr-x
drwxr-sr-x
3
5
2
5
3
85
2
redsteel
rob
robert
rslomkow
sam
simon
stephane
users
users
users
users
users
users
users
1024
1024
1024
1024
1024
7168
1024
Feb
May
Sep
Jul
Jun
Jul
Jun
27
27
12
15
22
24
30
05:44
13:54
1999
19:40
1999
12:09
17:53
redsteel
rob
robert
rslomkow
sam
simon
stephane
Con nsswitch installato è possibile chiamare ls al server ldap per gli uids che non possono essere
cercati localmente in /etc/passwd. Cosi l’uid 10002 è convertito in sam, 10011 in simon e così
via.
Settare nss_ldap
Sono disponibili dei file preconfigurati di nss per ldap sul sito http://www.padl.com


Sorgente: http://www.padl.com/download/nss_ldap.tgz
RPM: http://rpmfind.net/linux/RPM/pam_ldap.so.html
39
Dobbiamo dire a libnss-ldap da dove prendere le informazioni utente:
cat /etc/lib-nss-ldap.conf
Questo è quello che ci appare a schermo:
# Your LDAP server. Must be resolvable without using LDAP.
host ldap.linuxcare.com
# The distinguished name of the search base.
base dc=linuxcare,dc=com
# The distinguished name to bind to the server with.
# Optional: default is to bind anonymously.
#binddn cn=manager,dc=padl,dc=com
# The credentials to bind with.
# Optional: default is no credential.
#bindpw secret
# The hashing algorith your libc uses.
# Optional: default is des
#crypt md5
#crypt sha
#crypt des
C’è davvero poco da modificare rispetto alla configurazione di default. Sid eve
cambiare il server ldap al quale ci si intende connettere e a quale parte
dell’albero. Nell’esempio ci colleghiamo al ramo “dc=linuxcare,dc=com”.
Adesso dobbiamo dire a nsswitch di cercare gli uid e gid nell’albero ldap.
cat /etc/nsswitch.conf
# the following two lines obviate the "+" entry in /etc/passwd and /etc/group.
passwd:
files ldap
group:
files ldap
Questa configurazione dice a ldap di guardare prima nel file /etc/passwd e poi nel server ldap.
Per testare la configurazione ldap facciamo:
getent passwd
questo commando concatenerà il file /etc/passwd e gli utenti ldap che hanno un match positive per
la ricerca
ldapsearch -b dc=linuxcare,dc=com objectclass=posixaccount
e mostrerà l’output a schermo. Dovresti adesso vedere una lista di utenti locali e utenti presi dal
server LDAP.
stephane:nHBA0fvpJqzvk:1009:100::/home/stephane:/bin/bash
r3cgm:pCVsIxSgbsuNY:1011:1011:Christopher Mann,,,:/home/r3cgm:/usr/bin/tcsh
simon:x:15000:100:Simon Tennant (ldap test account):/home/simon:/bin/bash
Nota che adesso gli utenti ldap (in questo caso simon) non hanno una password criptata( solo una
‘x’). Questo perché la password è solo confrontata con il server, e mai inviata dal server al client.
Con questo si conclude la fase di setup del sistema e si può iniziare la fase di testing.
40
Per effettuare il testing abbiamo deciso di provare a configurare il webserver apache come client per
un server LDAP (Figura 14).
Architettura del server LDAP
L’architettura del server LDAP è strutturata nel seguente modo :

daemon LDAP chiamato slapd
o Scelta dei database
 SHELL : interfaccia db per comandi UNIX
 PASSWORD : semplice file di paswd
 SQL : che mappa sql a ldap
o Più instanza di database
o Controllo degli accessi
Figura 13
41
Apache basato su server WebDAV con LDAP
Figura 14
L’obiettivo che ci poniamo è quello di settare Apache + mySQL + PHP + WebDAV basato su
un Web Application Server che usa LDAP per l’autenticazione. WebDAV sta per Web enabled
Distributed Authoring and Versioning. Fornisce un ambiente collaborativo per utenti per gestire
file su un web-server. Tecnicamente DAV è un’estensione del protocollo http. In seguito vi è
una breve descrizione delle funzionalità fornite da DAV :





Overwrite Protection: meccanismo lock e unlock per prevenire il problema "lost update”
Properties: Metadata (titolo, argomento, creatore, etc)
Name-space management: copia, rinomina, e cancellazione di file
Access Control: limita l’accesso alle varie risorse
Versioning: controllo di revisione per i documenti . Questa funzionaliità ancora non è
implementata.
Installazione
Prerequisiti
L’applicazione server richiede le librerie SSL e le librerie LDAP
Mysql
42
Installare mySQL é abbastanza semplice. Occorre creare un user : group per il daemon mysql e
copiare i file nelle appropriate directories.
#
#
#
#
#
groupadd mysql
useradd -g mysql mysql
cd /usr/local
gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf ln -s full-path-to-mysql-VERSION-OS mysql
In seguito occorre eseguire lo script install_db e cambiare i permessi ai files
# cd mysql
# scripts/mysql_install_db
# chown -R mysql .
Avviare Mysql
Facciamo partire il server mySQL per verificare l’installazione
# bin/mysqld_safe --user=mysql &
Arrestare Mysql
Per stoppare il server MySQL seguire le instruzioni di seguito
# cd /usr/local/mysql
# ./bin/mysqladmin -u root -p shutdown
Localizzare la Directory dei dati
il daemon mysql memorizza le informazioni in una directory chiamata "Data Directory", che
dovrebbe trovarsi sotto /use/local/mysql/data.
Apache 2.0
Occorre settare alcuni FLAGS
# export LDFLAGS="-L/usr/local/iplanet-ldap-sdk.5/lib/ -R/usr/local/iplanetldap-sdk.5/lib/:/usr/local/lib"
# export CPPFLAGS="-I/usr/local/iplanet-ldap-sdk.5/include"
UNTAR il file sorgente apache 2.0 e eseguire lo script configure
# cd /tmp/download
# gzip -d httpd-2.0.46.tar.gz
# tar -xvf httpd-2.0.46.tar
# cd httpd-2.0.46
#./configure --enable-so --with-ssl --enable-ssl
dav
--enable-rewrite
--enable-
43
Eseguire il comando make
# make
# make install
Avviare Apache
# /usr/local/apache2/bin/apachectl start
Arrestare Apache
# /usr/local/apache2/bin/apachectl stop
mod-auth-ldap
Untar modauthldap_apache2.tar.gz
cd /tmp/download
# gzip -d modauthldap_apache2.tar.gz
# tar -xvf modauthldap_apache2.tar
# cd modauthldap_apache2
Ora occorre configurare e installare mod_auth_ldap
#
./configure
--with-apxs=/usr/local/apache2/bin/apxs
dir=/usr/local/iplanet-ldap-sdk.5/
# make
# make install
--with-ldap-
PHP
Unzippare il file sorgente PHP
gzip -d php-xxx.tar.gz
tar -xvf php-xxx.tar
Esueguire il comando
cd php-xxx
./configure --with-mysql --with-apxs=/usr/local/apache2/bin/apxs
e compilare
# make
# make install
Copiare il file php nella directory appropriata
cp php.ini-dist /usr/local/lib/php.ini
44
Configurare e settare WebDAV services
Modifiche a /usr/local/apache/conf/httpd.conf
Come prima cosa occorre verificare che le seguenti direttive di Apache appaiano in
/usr/local/apache/conf/httpd.conf :
Addmodule mod_dav.c
In seguito specifichiamo dove Apache dovrebbe memorizzare il file DAVLockDB.
DAVLockDB è un db per WebDA.
Memorizza il file DAVLock sotto
/usr/local/apache/var.
Aggiungi
la
seguente
linea
a
/usr/local/apache/conf/httpd.conf per specificare che il file DAVLockDB
dovrebbe trovarsi sotto /usr/local/apache/var :
DAVLockDB
/usr/local/apache/var/DAVLock
Creare una directory per DAVLockDB
Deve essere creata una directory che può essere scritta dal web server process. Di solito il web
server process è eseguito sotto l’user 'nobody'. Occorre verificarlo con il comando:
ps -ef | grep httpd
Sotto /usr/local/apache occorre
comando :
creare
la directory e settare i permessi usando il seguente
# cd /usr/local/apache
# mkdir var
# chmod -R 755 var/
# chown -R nobody var/
# chgrp -R nobody var/
Usare DAV
Per usare DAV per una direcotory sotto Apache root occorre aggiungere la seguente direttiva nel
conteiner per quella particolare directory :
DAV On
Viene mostrata una semplice configurazione che utilizza WebDAV e authentication LDAP su
/usr/local/apache/htdocs/DAVtest.
Occorre aggiungere il seguente frammento nel file /usr/local/apache/conf/httpd.conf
DavLockDB /tmp/DavLock
<Directory "/usr/local/apache2/htdocs/DAVtest">
Options Indexes FollowSymLinks
AllowOverride None
order allow,deny
45
allow from all
AuthName "SMA Development server"
AuthType Basic
LDAP_Debug On
#LDAP_Protocol_Version 3
#LDAP_Deref NEVER
#LDAP_StartTLS On
LDAP_Server you.ldap.server.com
#LDAP_Port 389
# If SSL is on, must specify the LDAP SSL port, usually 636
LDAP_Port 636
LDAP_CertDbDir /usr/local/apache2/sslcert
Base_DN "o=SDS"
UID_Attr uid
DAV On
#require valid-user
require valid-user
#require roomnumber "123 Center Building"
#require filter "(&(telephonenumber=1234)(roomnumber=123))"
#require group cn=rcs,ou=Groups
</Directory>
Creare una Directory chiamata DAVtest
Tutte le directory DAV devono essere scrivibili sul WebServer process. In questo esempio
assumiamo che WebServer lavori sotto l’username 'nobody'.
# ps -ef | grep httpd
Occorre creare una directory test chiamata ‘DAVtest' sotto /usr/local/apache2/htdocs :
# mkdir /usr/local/apache/htdocs/DAVtest
Occorre usare il seguente comando :
# cd /usr/local/apache/htdocs
# chmod -R 755 DAVtest/
# chown -R nobody DAVtest/
# chgrp -R nobody DAVtest/
Riavviare Apache
Eseguire
# /usr/local/apache/bin/apachectl configtest
Se il configtest è stato eseguito con successo avvia il apache web-server:
# /usr/local/apache/bin/apachectl restart
46
Gestione del server WebDAV
In questa sezione si discutono i vari task di gestione, ad esempio usare LDAP per controllare gli
accessi e lavorare con il metodo DAV su Apache. La maggior parte dei cambiamenti di
configurazione per DAV saranno fatti usando il file httpd.conf. Questo file si trova sotto
/usr/local/apache/conf/httpd.conf. Prima di rendere effettivi i cambiamenti e
riavviare
apache
occorre testare la validità di httpd.conf usando il comando
/usr/local/apache/bin/apachectl configtest .
Se il risultato del comando è Syntax OK allora possiamo riavviare apache usando il comando
# /usr/local/apache/bin/apachectl restart
Limitare l’accesso alle condivisioni DAV
Nella sezione precedente abbiamo creato il DAVtest condiviso, usiamo LDAP per l’autenticazione.
Comunque chiunque può auternticarsi usando il proprio LDAP useri/passwd che permette di
accedere alla cartella . Usando la direttiva require in file httpd.conf possiamo limitare l’accesso ad
alcune persone o ad un gruppo di persone. Se osserviamo la configurazione DAVtest della
precedente sezione
<Directory /usr/local/apache/htdocs/DAVtest>
Dav On
#Options Indexes FollowSymLinks
AllowOverride None
order allow,deny
allow from all
AuthName "LDAP_userid_password_required"
AuthType Basic
<Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require valid-user
</Limit>
LDAP_Server ldap.server.com
LDAP_Port 389
Base_DN "o=ROOT"
UID_Attr uid
</Directory>
osserviamo che require è settato a valid-user. Questo significa che ciascun utente autenticato ha
accesso a questa cartella .
Limitare l’accesso basato su UID
LDAP UID può essere usato per limitare l’accesso alla cartella DAV
la direttiva require valid-user può essere cambiata in require user 334455 445566
Questo limita l’accesso alla persona con UID 334455 e 445566. Tutti gli altri non hanno il
permesso di accedere alla cartella.
47
Limitare l’accesso a un gruppo di persone
require può essere usato per restringere l’accesso a un gruppo di persone. Questo può essere fatto
usando LDAP groups o LDAP filters.
Limitare l’accesso in scrittura alle cartelle condivise
A volte si richiede che l’editing per le risorse sulle cartelle DAv condivise sia limitato solo ad
alcuni utenti. Questo può essere fatto usando il tag <Limit> nel file httpd.conf
<Directory /usr/local/apache/htdocs/DAVtest>
Dav On
#Options Indexes FollowSymLinks
AllowOverride None
order allow,deny
allow from all
AuthName "LDAP_userid_password_required"
AuthType Basic
<Limit GET PUT POST DELETE PROPFIND PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require valid-user
</Limit>
LDAP_Server ldap.server.com
LDAP_Port 389
Base_DN "o=ROOT"
UID_Attr uid
</Directory>
Limitiamo l’accesso ad alcuni utenti cambiando <limit> con
<Limit PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
Require 334455
</Limit>
48
Appendice A: come richiedere e installare certificati
WebServer
SSL (secure Socket Layer) è un protocollo che permette l'invio di pacchetti criptati in Internet ed
possibile "abbinarlo" al normale HTTP per avere maggior sicurezza sul traffico prodotto dal server
e dal client.
Questa soluzione viene adottata in molti casi, soprattutto per siti che richiedono un elevato livello di
sicurezza come site e-commerce o siti che trattano informazioni personali. L'utilizzo del protocollo
HTTPS (HTTP Secure) non implica che il server in questione diventi invulnerabile a possibili
attacchi ma evita semplicemente (o rende molto più difficile) che il traffico possa essere
"sniffato" per dedurre informazioni come password o numeri delle carte di credito.
La procedura di criptazione dati è relativamente semplice, si basa su una chiave pubblica che il
server invia al client ad ogni connessione, per permettergli di inviare in modo sicuro la propria key.
Questi pacchetti criptati possono essere letti solo dal server che ha rilasciato la chiave pubblica
poiché sarà l'unico host a possedere la chiave privata, l'unica chiave che ha la possibilità di
decriptare le informazioni ricevute.
Il browser grazie alla chiave pubblica inviatagli dal server, e il seguente scambio di chiavi fra client
e server, permette di identificare entrambi in modo univoco per prevenire quel tipo di attacco
denominato come mimicking (man-in-the-middle attack).
Tipicamente il protocollo HTTP e HTTPS sono distinti anche per quanto rigurda le porte in cui il
servizio è tipicamente disponibile, il protocollo HTTP si usa sulla porta 80 e quello HTTPS sulla
porta 443, quindi il nostro browser quando dovrà accedere ad una risorsa con il protocollo HTTPS
la richiederà al server aprendo una connessione sulla porta 443.
Esistono molteplici soluzioni per l'implementazioni di SSL con Apache, come un progetto del core
team di Apache Apache-SSL o anche soluzioni commerciali, ma l'opzione più comune è l'uso del
modulo mod_ssl, poiché permette di astrarre le funzionalità di openssl in un modulo, e la sua
portabilità in tutti i sistemi Unix e windows lo rendono un oggetto universale.
Certificati per server Apache
Compilazione di mod_ssl
Mod_ssl è il modulo più comune per la gestione del protocollo HTTPS in Apache.
E' un progetto nato nel 1998 dalla mente di Ralf S. Engelschall, deriva da un progetto esistente
(Apache-SSL) e ormai si può definire la soluzione più utilizzata per implementare il protocollo
HTTPS in Apache.
Il progetto è stato rilasciato tramite una licenza BSD-style, quindi è utilizzabile gratuitamente sia
per scopi commerciali che non, oltre a poter essere riutilizzato autonomamente su progetti di terzi.
Semplificando, mod_ssl si può vedere come una patch del codice sorgente di Apache, e come
qualsiasi altra patch deve essere correlata alla versione corretta del package da patchare.
49
Anche in questo caso si ha una versione di mod_ssl specifica per una versione specifica di Apache.
Per esempio, se si deve patchare Apache 1.3.23, la versione di mod_ssl corretta è mod_ssl-2.8.61.3.23.
La procedura di massima per l'installazione di mod_ssl tramite sorgenti si limita al lancio dello
script configure con le opzioni per il patching dei sorgenti. Supponiamo di trovarci nella directory
scompattare del tar.gz ufficiale, parallela alla directory dei sorgenti di Apache.
[root@dido mod_ssl-2.8.6-1.3.23]# ./configure --with-apache=../apache_1.3.23/ --with
ssl=../openssl-0.9.6g
Configuring mod_ssl/2.8.6 for Apache/1.3.23
+ Apache location: ../apache_1.3.23/ (Version 1.0)
+ OpenSSL location: ../openssl-0.9.6g
+ Auxiliary patch tool: ./etc/patch/patch (local)
+ Applying packages to Apache source tree:
[...]
Now proceed with the following commands:
$ cd ../apache_1.3.23/
$ make
$ make certificate
$ make install
Infine successivamente eseguire la compilazione e l'installazione di Apache come meglio si crede.
Spostarsi nella directory in cui si trovano i suoi sorgenti e proseguire con il ./configure.
In questo caso viene abilitato il DSO mode per tutti i moduli disponibili compreso mod_ssl
[root@dido apache_1.3.23]# ./configure --with-layout=Apache --enable-module=most --enableshared=max
[root@dido apache_1.3.23]# make
[root@dido apache_1.3.23]# make certificate
[root@dido apache_1.3.23]# make install
Nel caso in cui si debba installare mod_ssl per un Apache già in esecuzione e con il supporto DSO e
EAPI abilitata bisogna appoggiarsi ad apxs.
[root@dido root]# cd /usr/src/mod_ssl-2.8.6-1.3.23/
[root@dido mod_ssl-2.8.6-1.3.23]# ./configure --with-ssl=../openssl-0.9.6g --withapxs=/usr/local/apache/bin/apxs
[...]
Installazione del modulo.
[root@dido mod_ssl-2.8.6-1.3.23]# /usr/local/apache/bin/apxs -i -a -n mod_ssl pkg.sslmod/libssl.so
Creazione e installazione certificato
Queste istruzioni sono relative alla richiesta di un certificato per l'attivazione del protocollo HTTPS
(HTTP su SSL) per un server Apache 1.3.
Prerequisiti:
1. installare il modulo mod_ssl (di solito già presente nelle distribuzioni classiche) o installare
la versione Apache-SSL.
50
2. generare la coppia di chiavi e la richiesta di certificato con OpenSSL:
Lanciate il comando:
openssl req -new -out server.csr -keyout server.pem
Verrà richiesta la PEM pass phrase; trascrivetela in un posto sicuro, perchè la chiave non è più
utilizzabile senza la pass phrase.
Alla richiesta del nome DNS del server, rispondete con il Fully Qualified Domain Name (cioé con
tutte le parti, es. www.ca.org) dell'host. Il nome DNS dev'essere quello che gli utenti usano per
collegarsi al server.
Se non potete utilizzare la configurazione fornita, i parametri sono:
server di strutture
IT
Country Name
State or Province Name <enter>
<enter>
Locality Name
caGroup
Organization Name
Organizational Unit Name <enter>
nome DNS completo del server o del virtual host
Common Name
il vostro indirizzo
Email Address
3. Per verificare il contenuto della richiesta, potete usare il comando:
openssl req -verify -noout -text -in server.csr
4. spostare il file con la chiave (server.pem) in una directory accessibile solo a root (es.
/etc/apache/keys/).
Installazione del certificato:
quando l'Autorità di Certificazione restituirà il certificato
1. salvare il file restituito (server.crt) nella directory di Apache (es. /etc/apache/);
2. poiché all'avvio di Apache viene richiesta la pass phrase, cosa che impedisce l'avvio
automatico, può essere utile decifrare la chiave privata, sempre considerando che deve
quindi essere maggiormente protetta dall'accesso degli utenti della macchina:
openssl rsa -in server.pem -out server.key
3. attivare per il virtual host il motore SSL:
- Verificare in httpd.conf se avviene il caricamento del modulo tramite le direttive
Addmodule e LoadModule.
LoadModule ssl_module
libexec/libssl.so
AddModule mod_ssl.c (Solo su Apache 1.3)
- Specificare le nuove porte a cui il servizio sarà in ascolto tramite le direttive Port o Listen:
Port 80
Listen 80
Listen 443
51
- Abilitazione del modulo mod_ssl. Occorrono tre direttive SSLEngine,
SSLCertificateKeyFile e SSLCertificateFile:
Attivazione del modulo mod_ssl
SSLEngine on
Path per la chiave privata
SSLCertificateKeyFile file.key
Path per il certificato
SSLCertificateFile cert.crt
Queste direttive possono essere specificate sia a livello di server configuration o per singolo
virtual-host, ma per redirezionare tutto il traffico della porta 80 sulla porta 443 occorre
specificare la direttiva SSLrequireSSL nel Directory container:
Redirige tutto il traffico sulla porta 443
<Directory />
SSLrequireSSL
</Directory>
Redirige sulla porta 443 le richieste che comprendono l'URL /private
<Directory /private/>
SSLrequireSSL
</Directory>
4. Riavviare Apache e verificare che tutto funzioni:
# apachectl stop
# apachectl start
# netstat -at | grep http
tcp
0
0 *:http
*:*
LISTEN
tcp
0
0 *:https
*:*
LISTEN
poi con il proprio browser richiedere pagine al server web, sia con il protocollo http e https.
Configurazione avanzata di mod_ssl - Server Level Configuration
Per avere un server funzionale non occorre una ricerca esasperata della configurazione ottimale di
mod_ssl, ma questo modulo ci mette a disposizione un insieme di direttive che ci permette di avere
un controllo totale sull'erogazione del servizio tramite il protocollo HTTPS.
Tutte le seguenti direttive dovranno essere inserite nel file di configurazione httpd.conf più
precisamente all'altezza del server level configuration, da escludere l'uso di queste direttive per i
singoli VirtualHosts.
SSLRandomSeed
La funzionalità random per SSL è fondamentale, poiché riduce al minimo la possibilità di
deduzione della "key session" scambiata tra il client e il server. Tramite questa direttiva è possibile
specificare la sorgente per questi dati casuali, la quale sarà interrogata o solo allo startup del server
o ad ogni nuova connessione, ovviamente la seconda risulta più sicura ma pregiudica un poco le
prestazioni del server. La configurazione minima per questa direttiva è:
SSLRandomSeed startup builtin
52
Questo specifica al modulo mod_ssl che ad ogni startup deve utilizzare uno pseudo-random number
generator all'interno del codice di mod_ssl, non è un vero e proprio generatore di dati casuali ma è
sempre meglio di niente.
E' possibile utilizzare sempre
SSLRandomSeed connect builtin
la
stessa
sorgente
per
ogni
nuova
connessione:
La soluzione migliore (in ambiente Unix) è quella di utilizzare i random device come /dev/random
e /dev/urandom e opzionalmente specificare il numero di bytes da estrarre, ovviamente piu sono
meglio è per quanto riguarda la sicurezza ma una richiesta potrebbe rivelarsi troppo onerosa in
ambito di risorse del sistema.
La possibilità di estrarre un numero esatto di bytes è funzionale solo per /dev/urandom:
SSLRandomSeed connect /dev/random
SSLRandomSeed connect /dev/urandom 512
Oppure si ha la possibilità di utiliizare package esterni all'OS ed al modulo mod_ssl come truerand
disponibile nella sottodirectory pkg.contrib di mod_ssl.
Più direttive SSLRandomSeed possono essere specificate di seguito per "aumentare la
randomizzazione" dei dati:
SSLRandomSeed startup builtin
SSLRandomSeed startup /dev/urandom 1024
SSLRandomSeed connect builtin
SSLRandomSeed connect /usr/local/apache/bin/truerand 32
SSLRandomSeed connect /dev/urandom 512
SSL session cache
Le sessioni SSL possono essere, opzionalmente, cacheate per una maggior performance del server
web. La direttiva che controlla il caching è SSLSessionCache con tre diverse possibilità:
Caching disabilitato, default configuration:
SSLSessionCache none
Caching tramite DBM db file:
SSLSessionCache dbm:path
Caching tramite shared memory segment stabilita da un file, con parametro opzionale per indicare
la dimensione:
SSLSessionCache shm:path[size]
Per avere un maggior controllo della cache ci si può appoggiare alle direttive
SSLSessiononCacheTimeout e SSLMutex. La prima identifica il timeout della cache e la seconda
si può vedere come un semaforo che gestisce il write lock della cache, questo per avitare che più
processi di Apache scrivino sulla stessa cache e quindi evitare sovrapposizioni e "scrambling" dei
contenuti:
Cache time out di 300 sec per ogni sessione
SSLSessiononCacheTimeout 300
Uso del semaforo per locking della cache
SSLMutex sem
Le opzioni disponibili per la direttiva SSLMutex sono:
Disabilita il mutex lock:
SSLMutex none
Usa un file per indicare cha la cache è in lock:
SSLMutex file:path
53
Usa i semafori di sistema:
SSLMutex sem
Configurazione avanzata di mod_ssl - Per Directory configuration
Lo switch on o off del modulo mod_ssl non è possibile per i singoli virtualhost o per specifiche
directory ma è possibile utilizzare due direttive SSLrequireSSL e SSLrequire per settare una
configurazione per ogni singolo virtual host o directory.
SSLrequireSSL
Direttiva che obbliga l'uso di SSL per quando si richiede una risorsa all'interno di una directory o
più semplicemnete per tutte le risorse di un virtual host. Ricordarsi che nel caso si voglia utilizzare
il file .htaccess occorre specificare AllowOverride AuthConfig.
In httpd.conf se si vuole obbligare l'uso di SSL per accedere a /private si deve avere qualcosa di
simile:
<Location /private>
SSLRequireSSL
</Location>
SSLRequire
Direttiva utilizzata per testare l'environment settato da mod_ssl ed Apache. I vari headers e variabili
possono essere estratti e si può eseguire un controllo per verificare che la sorgente possa accedere
alle risorse. La sintassi è complessa ma la sua estrema flessibilità permette di creare delle Access
List più che funzionali:
SSLRequire ( %{HTTPS}eq "on" and %{SSL_PROTOCOL}ne "SSLv2"
and %{SSL_CHIPER_USERKEYSIZE} >= 128) or %{REMOTE_ADDR}= ~ m/^192\.168/
In questo caso, si verifica che SSL venga utilizzato con il protocollo v2 e che la key utilizzata sia
almeno di 128 bit e solo se tutte le tre condizioni si sono verificate o se la sorgente abbia un IP con
indirizzo di rete 192.168 si potrà accedere alla risorsa
SSLProtocol e SSLCipherSuite
E' possibile tramite la direttiva SSLProtocol controllare il protocollo e tramite SSLCipherSuite
controllare il cipher utilizzati per la connessione.
Sono direttive che possono essere specificate anche al server level configuration.
I protocolli supportati sono:
- SSL v2 (l'implementazione originale di SSL)
- SSL v3 (di fatto lo standard odierno)
- TLS v1 (non del tutto supportato ancora).
Di default sono supportati tutti:
SSLProtocol all
ma è possibile restringere l'uso a uno o più protocolli:
SSLProtocol SSLv3
Anche in questo caso è possibile utillizzare il prefisso + e - per aggiungere o togliere protocolli
ereditati dalle direttive precedenti, per esempio:
54
SSLProtocol SSLv3 -TLSv1
Mentre per verificare i cipher supportati occorre interrogare openssl:
[neo@dido neo]$ openssl ciphers
EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DES-CBC3MD5:DHE-DSS-RC4-SHA:RC4-SHA:RC4-MD5:RC2-CBC-MD5:RC4-MD5:
RC4-64-MD5:EXP1024-DHE-DSS-RC4-SHA:EXP1024-RC4-SHA:EXP1024-DHE-DSS-DESCBC-SHA:EXP1024-DES-CBC-SHA:EXP1024-RC2-CBC-MD5:
EXP1024-RC4-MD5:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBCSHA:DES-CBC-MD5:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:
EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5:EXP-RC2-CBC-MD5:EXP-RC4MD5
Ci sono più di trenta possibilità, con ogni tipo di protocollo che può usare uno specifico Key
exchange algorithm, authentication method, encrypt method e digest type.
Ognuno di questi quattro componenti può essere rimosso or riordinato nella lista dei ciphers.
La direttiva SSLCipherSuite ha come argomento uno o piu componenti (separati dai ":") che
verranno aggiunti o modificati dalla lista a seconda del prefisso:
Accetta solo RSA key exchangee rifiuta l'export o la cryptazione nulla
SSLCiphersSuite RSA:!NULL:!EXP
Accetta tutti i ciphers ma da la precedenza a quelli che utilizzano SSLv2 e poi quelli SSLv3
SSLCiphersSuite ALL:+SSL2v2
Impostazione di default: accetta tutti i ciphers, tranne ADH(Diffle-Hellman Authentification), usa
rc4 encoding per la cryptazione e RSA per il key exchange dando la precedenza ai cipers con una
maggior cryptazione, con protocollo SSLv2 e l'export ciphers alla fine:
SSLCiphersSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP
SSL e VirtualHost
Ci sono due possibili vie per configurare dei virtualhost con il supporto HTTPS, entrambe però
richiedono virtualhost IP-based.
- Definire un singolo certificato e chiave privata nel main host, i quali verranno utilizzati da tutti i
virtualhost.
- Definire certificati e chiavi private per singoli virtual-host.
Evitare la rinegoziazione di protocollo fra server https e client
Ad ogni richiesta fatta da Apache tramite SSL dove è configurato un particolare protocollo o cipher
a seconda della risorsa richiesta, si obbliga il client che ha eseguito la richiesta ad una nuova
negoziazione sul protocollo secondo le direttive settate sul server a seconda della risorsa richiesta.
E' possibile evitare questa rinegoziazione (che porta via tempo e risorse) del protocollo tramite la
seguente
direttiva:
SSLOption +OptRenegotiate
55
Certificati per applicazioni Java
I certificati per le applicazioni Java sono memorizzati in un file detto keystore che può essere
manipolato con il programma keytool fornito con la distribuzione Java. Un'introduzione alla
sicurezza Java è disponibile come tutorial sul sito Sun Microsistems.
Queste istruzione si riferiscono alla creazione di un nuovo keystore; sono applicabili sia alle
piattaforme Microsoft Windows sia aquelle Unix/Linux, prestando attenzione ai separatori nei
percorsi di file (/ per sistemi Linux e \ per sistemi Windows).
1. inizializzare il keystore, generando la coppia di chiavi e la richiesta di certificato:
keytool -genkey -keyalg RSA -keystore <file keystore> -alias <nome convenzionale>
Il programma richiederà due password, una generale del keystore, che serve per tutte le
operazioni che ne richiedono l'accesso, e una specifica per cifrare la chiave privata generata.
Un keystore può contenere più chiavi, purché con alias diversi.
2. estrarre la richiesta di certificato (CSR Certificate Signing Request) dal keystore:
keytool -certreq -alias <nome convenzionale> -keystore <file keystore> -file server.csr
3. per usare il keystore in applicazioni TLS/SSL client o per poter importare il proprio
certificato, occorre prima installare i certificati radice.
keytool -import -keystore <file keystore> -alias ca -file ca.crt
Enter keystore password: *******
Owner: CN=CaGroup, O=CaGroup, C=IT
Issuer: CN=CaGroup, O=CaGroup, C=IT
Serial number: 0
Valid from: Tue Dec 16 16:57:33 MET 2006 until: Mon Dec 16 16:57:33 MET 207
Certificate fingerprints:
MD5: 80:C3:59:E2:EA:05:D5:B8:67:CF:55:F6:1C:7F:AE:F6
SHA1: 82:34:F8:A2:44:B2:A9:AB:BB:15:B0:0D:7B:17:4C:98:5A:27:B9:02
Trust this certificate? [no]: yes
Certificate was added to keystore
procedendo poi allo stesso modo per il certificato della sotto CA necessaria.
4. ricevuto il certificato firmato, occorre reimportarlo nel keystore:
keytool -import -keystore <file keystore> -alias <nome convenzionale> -file server.crt
56
Scarica