[ Home | Liste | F.A.Q. | Risorse | Cerca... ]


[ Data: precedente | successivo | indice ] [ Argomento: precedente | successivo | indice ]


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