Barra video

Loading...

mercoledì 25 luglio 2007

Secure Socket Layer (SSL)


SSL (Secure Sockets Layer) è il protocollo di sicurezza più diffuso sul web. Esso viene usato per fornire la sicurezza nelle comunicazioni client/server tramite l'autenticazione delle parti coinvolte e la crittografia dei dati scambiati durante il collegamento.

Autenticazione: garantisce l'identità delle parti coinvolte nella comunicazione tramite l'uso di chiavi asimmetriche (chiave pubblica/privata) usate sotto forma di certificati personali.
Lo scopo di un certificato personale è quello di informare la controparte sull'identità del proprietario e per assolvere a questo compito contiene, oltre alla sua chiave pubblica, anche i suoi dati identificativi e una firma digitale che ne attesta la validità.

Nella maggior parte dei casi i certificati personali usati da SSL vengono emessi dalle CA (Certification Authority), le quali garantiscono l'identità del proprietario firmando, con la propria chiave privata, la sua chiave pubblica.
Un certificato può essere prodotto anche dallo stesso proprietario della chiave pubblica che si assume ufficiosamente il ruolo di CA e lo firma usando la corrispondente chiave privata; in questo caso si parla di certificati autofirmati.
SSL supporta sia l'autenticazione lato server che quella lato client; nel primo caso, il più comune, controlla solo l'identità del server, mentre nel secondo caso controlla anche l'identità del client.
Il client controlla l'identità del server verificando che il certificato personale inviato dal server sia firmato da una CA che riconosce; per fare ciò deve disporre di un certificato autofirmato o di un certificato radice emesso dalla CA che ha firmato la chiave pubblica del server.
Nel caso di autenticazione lato client invece, è il server che controlla l'identità del client verificando che il certificato inviato da quest'ultimo sia firmato da una CA riconosciuta.
Pertanto nell'autenticazione lato server, il client deve possedere solo il certificato autofirmato o il certificato radice della CA del server, mentre nell'autenticazione lato client deve possedere, oltre al certificato autofirmato o al certificato radice della CA del server, anche il suo certificato personale da inviare al server.


Crittografia:
garantisce la riservatezza e l'integrità della comunicazione mediante la cifratura dei dati che vengono scambiati durante il collegamento. In questo caso, per motivi di efficenza, i dati vengono cifrati usando una chiave simmetrica temporanea che viene generata dal client dopo la fase di autenticazione, e inviata al server dopo essere stata crittografata con la chiave pubblica di quest'ultimo.

Le chiavi private e i cerificati sono contenuti in particolari file chiamti keystore e truststore; in particolare il keystore contiene le chiavi private con i corrispondenti certificati personali, mentre il truststore contiene i certificati autofirmati o i certificati radice delle CA.
Keystore e truststore sono gestiti tramite l'utility keytool del JDK.

JSSE (Java Secure Socket Extension) è l'implentazione Java di SSL e di HTTPS; il pacchetto java.security invece fornisce le API per la gestione delle chiavi e dei certificati.

Per chi vuole approfondire l'argomento:
1.Introduzione a SSL;
2.Secure Internet Programming with Java 2, Standard Edition (J2SE) 1.4 (1);
3.Secure Internet Programming with Java 2, Standard Edition (J2SE) 1.4 (2);

0 commenti: