
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
Archivio: Ottobre 2006 ml@sikurezza.org Soggetto: Re: [ml] Apache e autenticazione con smartcard Mittente: Claudio Data: Sat, 21 Oct 2006 14:16:09 +0200 (CEST)
>> Ciao. Lato client il problema non si pone; lato server c'è un mondo. Ti > > Il lato client, al momento non mi interessa Allora partiamo dall'ipotesi che i client hanno il loro bravo lettore di smarcard perfettamente funzionante e l'utente abbia la sua ancor più brava smartcard con sopra tante cose, tra cui il suo PKCS#12. >> devi usare una sola CA? (ovvero, le SmartCard hanno certificati >> emessi da una sola authority? > > Solo una, la nostra Ottimo. Allora ti risparmierai il 95% del lavoro. :-) >> - devi usare e onorare le CRL? > > Non so molto sull'argomento... in pratica è la gestione delle chiavi > revocate? Mi può dare problemi con il fatto che la CA è una nostra e non > una riconosciuta (tipo verisign, ecc...)? No, la CA può essere sconosciuta da tutto il mondo fuorché dai due "nodi" che stabiliscono la comunicazione: la CA deve essere colei che fornisce il trust tra le parti; le parti devono solo avere il certificato pubblico della CA e bisogna dirgli "di questa CA (di cui "questa" è la chiave pubblica) ti puoi fidare". Questo è il motivo per cui è importantissimo, ai fini della sicurezza, fare in modo che i client/server ottengano la chiave pubblica della CA in modo assolutamente fidato. La CRL (Certificate Revocation List) è invece una specie di altro certificato (firmato sempre con la chiave della CA) che contiene i seriali di tutti i certificati revocati. Per fare un esempio, se un utente smarrisce la smartcard, avvisa l'help-desk e quest'ultimo "revoca" il certificato di quell'utente il che implica che il seriale di quel certificato va a finire nelle CRL non appena queste vengono riemesse (tipicamente ogni 4-12 ore). In questo modo con un minimo ritardo è possibile sapere se quel certificato - oltre ad essere in corso di validità - è leggittimamente posseduto dal proprietario. >> - deve entrare _chiunque_ ha una SmartCard o solo un sottoinsieme? > > Chiunque abbia una SC con certificato prodotto da noi (per quel sito) Ok. Anche se sul certificato non puoi dire per quale sito è valido e per quale no. Puoi, al limite, specificarne lo scopo (cfr. "usage", "extended usage"). >> - possono entrare _solo_ con la smartcard? > > _solo_ con il certificato in esso contenuta. Tanto immagino che apache se > ne sbatta se il certificato non sta sulla SC :) Apache non gliele importa nulla di dove sta il certificato, basta che gli arriva (appunto dicevo che lato client conta poco). Intendevo dire se per caso dovessero entrare anche con altri sistemi d'utenticazione, tipo userid/password, oltre che con i certificati. La pratica, in base alle considerazioni che abbiamo fatto, richiede pochi passi: 1) creare una directory per il certificato della CA e per il certificato+chiave_privata del web-server. * Occhio ai permessi, soprattutto per la chiave privata del web-server! 2) creare una directory in cui riporre le CRL. * Occhio1: queste vengono aggiornate molto spesso, quindi - visto che la CA è la vostra e saprai sicuramente dove stanno le CRL - ti consiglio di farti uno script con wget/curl/rsync (o simili) che facciano l'operazione automaticamente ogni tot ore. * Occhio2: una volta messe le CRL (in formato PEM-encoded) nella directory, ricordati di rinominarle/relinkarle come si aspetta apache. Per questo ti consiglio di usare lo script c_rehash che viene in bundle con le installazioni di Apache/openSSL (cfr. la pagina man per maggiori informazioni) 3) configurare un virtual-host secondo le tue esigenze, in modo da tirar fuori - se ti occorre - qualcosa dai certificati. Ad esempio potresti dover ottenere un REMOTE_USER da confrontare con un entri in un LDAP o con un file di "utenti autorizzati"... insomma su questo punto i margini di manovra sono una pluralità non indifferente, quindi non tento di indovinare qual'è la tua situazione! ;-) 4) riavviare Apache e guardare i log. Ti consiglio di fare delle prove con vari tipi di certificato "client side", per vedere l'effetto che hai con uno "buono", con uno "scaduto", con uno "revocato" e così via. I log di apache parleranno molto chiaramente. Vedrai che qualora mod_ssl "decida" di troncare la connessione, sul client si avrà una pessima gestione del fenomeno: nessuna pagina caricata e messaggio d'errore orribile. Se vuoi fare una cosa più carina, fa' in modo che per i file nella documentroot del virtual-host si richieda la modalità "optiona_no_ca" per autenticarsi; lì metti una pagina PHP che verifica l'eventuale presenza del certificato e la sua validità è dica qualcosa tipo "OK, il certificato è valido, puoi entrare" e lì ti mandi ad una <Location> del virtual-host in cui il certificato è richiesto con modalità "require". Almeno gestisci meglio l'errore e puoi notificare il problema al client con qualche messaggio di help! -- Claudio
[ Home | Liste | F.A.Q. |
Risorse | Cerca... ]
www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005