Proprietà di Sicurezza I



Documenti analoghi
Lezione 5: Socket SSL/ TLS. Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno

SSL (cenni) Problema con socket standard

Sicurezza Informatica

Comunicazioni sicure su Internet: https e SSL. Fisica dell Informazione

SSL: applicazioni telematiche SSL SSL SSL. E-commerce Trading on-line Internet banking... Secure Socket Layer

Protezione delle informazioni in SMart esolutions

Sicurezza: necessità. Roberto Cecchini Ottobre

Problematiche correlate alla sicurezza informatica nel commercio elettronico

La sicurezza nel Web

Approfondimento di Marco Mulas

Informatica per la comunicazione" - lezione 13 -

Corso di Sicurezza Informatica. Sicurezza Web. Ing. Gianluca Caminiti

Sicurezza in Internet

Sicurezza nelle applicazioni multimediali: lezione 7, sicurezza dei protocolli. Sicurezza dei protocolli (https, pop3s, imaps, esmtp )

Sicurezza in Internet. Criteri di sicurezza. Firewall

Applicazioni per l autenticazione Sicurezza nelle reti di TLC - Prof. Marco Listanti - A.A. 2008/2009

NETASQ V9: PKI & Controllo accessi. Presentation Marco Genovese Presales engineer marco.genovese@netasq.com

La sicurezza nelle reti di calcolatori

Meccanismi di autenticazione sicura. Paolo Amendola GARR-CERT

Eclipse. Avviare un progetto e compilare un semplice programma

Protezione della posta elettronica mediante crittografia

Firma digitale Definizione

Sommario. Introduzione alla Sicurezza Web

PROCEDURA AGGIORNAMENTO LISTE MEDIANTE L INTERFACCIA WEB

Introduzione ai certificati S/MIME e alla posta elettronica certificata...2 Procedura di installazione del certificato personale S/MIME rilasciato

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Corso di Laurea in Informatica Reti e Sicurezza Informatica

RETI DI CALCOLATORI. Crittografia. La crittografia

Sicurezza dei sistemi informatici Firma elettronica E-commerce

Sommario. Modellazione di Kerberos mediante DASM. Kerberos (1) Descrizione Kerberos. Descrizione Kerberos Modellazione Analisi di Correttezza

Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Crittografia. Crittografia Definizione. Sicurezza e qualità dei servizi su internet Università degli Studi di Pavia, C.

Elementi di Sicurezza e Privatezza Laboratorio 10 Uso di OpenSSL per generare certificati X.509. Chiara Braghin chiara.braghin@unimi.it!

La sicurezza nelle reti di calcolatori

Introduzione alla crittografia con OpenPGP

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Crittografia e sicurezza informatica. Sistema di voto elettronico

Certificati digitali con CAcert Un'autorità di certificazione no-profit

Overview su Online Certificate Status Protocol (OCSP)

Sicurezza dei calcolatori e delle reti. Le protezioni cripto in rete Lez. 10

La firma digitale CHE COSA E'?

Sicurezza nei Sistemi Distribuiti

Sicurezza nei Sistemi Distribuiti

PRINCIPI DI COMPUTER SECURITY. Andrea Paoloni

12/12/11 Data ultimo aggiornamento

Sicurezza nelle reti

Programmazione in Rete

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

SETEFI. Marco Cantarini, Daniele Maccauro, Domenico Marzolla. 19 Aprile 2012

Capitolo 8 La sicurezza nelle reti

La Sicurezza delle Reti. La Sicurezza delle Reti. Il software delle reti. Sistemi e tecnologie per la multimedialità e telematica.

Sicurezza dei sistemi e delle reti 1. Lezione VI: IPsec. IPsec. La suite TCP/IP. Mattia Monga. a.a. 2014/15

Sicurezza dei dati. Xml Encryption e Digital Signature. Sicurezza dei dati. XML Encryption. Svantaggio di SSL. SSL (Secure Socket Layer)

SICUREZZA. Sistemi Operativi. Sicurezza

Sistemi Operativi SICUREZZA. Sistemi Operativi. D. Talia - UNICAL 14.1

Corso di ARCHITETTURA DEI SISTEMI INFORMATIVI - Prof. Crescenzio Gallo. 114 Sistemi informativi in rete e sicurezza 4.6

Pretty Good Privacy. PGP fornisce crittografia ed autenticazione. creato da Phil Zimmermann nel in origine è un'applicazione per

API e socket per lo sviluppo di applicazioni Web Based

Sicurezza a livello IP: IPsec e le reti private virtuali

Corso sul linguaggio Java

Sicurezza digitale. requisiti: confidenzialità, integrità, autenticazione, autorizzazione, assicurazione, riservatezza. soddisfatti mediante

Esercitazione 2 Certificati

Documenti cartacei e digitali. Autenticità. Cosa si vuole garantire? Riservatezza. Integrità 11/12/2012. PA digitale: documenti e firme (I.

Il glossario della Posta Elettronica Certificata (PEC) Diamo una definizione ai termini tecnici relativi al mondo della PEC.

E-business sicuro. Tecnologie per la gestione delle transazioni su Internet 05/06/06

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

PEC. La posta elettronica certificata

Esercitazione 02. Sommario. Un po di background (1) Un certificato digitale in breve. Andrea Nuzzolese

Principi di crittografia Integrità dei messaggi Protocolli di autenticazione Sicurezza nella pila di protocolli di Internet: PGP, SSL, IPSec

Windows Web Server 2008 R2 64bit 1x Processore Intel Atom Dual (2x core 1.80 GHz) Dispositivo di memorizzazione flash esterno 32GB

10.1. Un indirizzo IP viene rappresentato in Java come un'istanza della classe InetAddress.

Android. Deploy di una App.

Crittografia in Java

Software di crittografia per GNOME. Nicola VITUCCI POuL Politecnico Open unix Labs

Testi del Syllabus. Docente VELTRI LUCA Matricola:

10 - Programmare con gli Array

appunti delle lezioni Architetture client/server: applicazioni client

Sicurezza delle reti wireless. Alberto Gianoli

Oggetti Lezione 3. aspetti generali e definizione di classi I

metodi crittografici maurizio pizzonia sicurezza dei sistemi informatici e delle reti

Petra VPN 3.1. Guida Utente

MANUALE UTENTE FORMULA PEC

INFN Sezione di Perugia Servizio di Calcolo e Reti Fabrizio Gentile Enrico Becchetti

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Come creare un certificato SSL per IIS utilizzando la CA Privata di W indow s Server

Lezione 7 Sicurezza delle informazioni

Sistema di gestione Certificato MANUALE PER L'UTENTE

La sicurezza nelle comunicazioni Internet

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

OpenVPN: un po di teoria e di configurazione

Crittografia. Appunti a cura del prof. Ing. Mario Catalano

Quasar Sistemi S.r.l.

Indice. 1 Introduzione Introduzione Cos è un impianto informatico enterprise... 8

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

PKI PUBLIC KEY INFRASTRUCTURES

Gli strumenti necessari al PcT. Firma Digitale, PEC e Marca Temporale

OpenVPN: un po di teoria e di configurazione

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

PkBox Client Smart API

azienda, i dipendenti che lavorano fuori sede devono semplicemente collegarsi ad un sito Web specifico e immettere una password.

Transcript:

Java Security

Proprietà di Sicurezza I Confidenzialità Le informazioni possono essere lette solo dai soggetti che ne hanno diritto Integrità Le informazioni possono essere modificate solo dai soggetti che ne hanno diritto Disponibilità Le informazioni devono poter essere lette/scritte quando necessario Le risorse devono poter essere usate dai soggetti che ne hanno diritto

Proprietà di Sicurezza II Identificazione Ogni soggetto ha una propria identità unica Autenticazione Verifica dell identità di ogni soggetto Non ripudiabilità L affermazione fatta da un soggetto NON può essere negata in un secondo tempo

Proprietà di Sicurezza III Tracciabilità Individuazione del soggetto che ha effettuato una operazione Accountability Correlazione tra uso della risorsa e soggetto che l ha usata

Vulnerabilità Punto debole di un componente del sistema Sfruttando la vulnerabilità si genera un comportamento anomalo nel sistema Il comportamento anomalo può violare la sicurezza del sistema (Attacco) Soluzione: Robustezza & Contromisure

Attacco Un attacco è una sequenza di azioni eseguite per ottenere il controllo di un host L exploit è il programma che esegue l attacco sfruttando una vulnerabilità dell host Quando si ottiene il controllo di un host si può accedere alle informazioni modificare informazioni impedire ad altri di accedere alle informazioni utilizzare l host come base per eseguire un attacco ad un altro host

Contromisure Definizione di una politica di sicurezza Definizione della criticità di ogni risorsa Regole per il controllo degli accessi... Crittografia Firma Digitale Certificati Firewall Intrusion Detection Systems (Rete/Host)

Java Security Platform Security: Built-in language security features enforced by the Java compiler and virtual machine Strong data typing Automatic memory management Bytecode verification Secure class loading Cryptography digital signatures, message digests, ciphers (symmetric, asymmetric, stream & block), message authentication codes, key generators and key factories Support for a wide range of standard algorithms including RSA, DSA, AES, Triple DES, SHA, PKCS#5, RC2, and RC4. http://java.sun.com/security/

Java Security Authentication and Access Control login mechanisms policy and permissions for fine-grained access control of resources Secure Communications: authenticates peers over an untrusted network and protects the integrity and privacy of data transmitted between them. Public Key Infrastructure (PKI): Tools for managing keys and certificates Certificates and Certificate Revocation Lists (CRLs): X.509 Certification Path Validators and Builders: PKIX (RFC 3280), On-line Certificate Status Protocol (OCSP) KeyStores: PKCS#11, PKCS#12 Certificate Stores (Repositories): LDAP, java.util.collection http://java.sun.com/security/

Comunicazioni Sicure Java Secure Socket Extension (JSSE)

Rischi nella Comunicazione Il tuo partner di comunicazione è chi dice di essere? (autenticazione) I dati possono essere intercettati quando viaggiano sulla rete (confidenzialità) I dati possono essere intercettati e modificati quando viaggiano sulla rete (integrità)

Esempio: man in the middle violazione della confidenzialità e dell integrità del messaggio B A versa 100 sul conto di A

Esempio: man in the middle violazione della confidenzialità e dell integrità del messaggio A versa 100 sul conto di A B versa 10000 sul conto di B

Java Secure Socket Extension Fornisce Autenticazione Server e Client Confidenzialità messaggi Integrità messaggi E un nuovo layer dello stack TCP/IP

Modello TCP/IP Nuovo layer per la sicurezza delle comunicazioni applicazione send( questo e il messaggio ) questo e il messaggio ssl Messaggio criptato gfhromgb wpwncpmrd trasporto rete fisico gfhromgb wpwncpmrd network Sulla rete viaggia il messaggio criptato

Concetti alla base di JSSE Crittografia Certificati Digitali Trust

Crittografia Trasformazione dei dati in un formato nascosto per proteggerne la confidenzialità Dati originali = dati in chiaro (plain text) Dati trasformati = crittogramma (cipher text) Cifratura (encryption) = plaint text chiper text Decifratura (decryption) = cipher text plain text Esistono vari algoritmi di crittografia basati su concetti matematici (ad es.: numeri primi)

Crittografia Algoritmi a chiave segreta (simmetrici) Unica chiave per criptare e decriptare Chiave segreta Problemi per lo scambio sicuro della chiave tra i partner di comunicazione Computazionalmente leggeri Ad es.: DES (e sue variazioni), IDEA, SAFER, RC2-4- 5, FEAL, SKIPJACK, BLOWFISH, SEAL,...

Crittografia Algoritmi a chiave pubblica (asimmetrici) Una chiave per criptare (pubblica) Un altra chiave per descriptare: segreta (privata) La chiave pubblica può essere divulgata ai partner di comunicazione senza problemi di confidenzialità (ma di integrità si!!!!) Computazionalmente più pesanti Ad es.: RSA, Diffie-Hellman, DSA, LUC,...

Algoritmi di Crittografia Supportati Algoritmo chiave (bits) RSA (auth. and key exchange) AES (bulk encryption) 128-256 RC4 (bulk encryption) 2048 (auth.) 2048 (key exchange) 512 (key exchange) 128-128 (40 effective) DES (bulk encryption) 64 (56 effective) - 64 (40 effective) Triple DES (bulk encryption) 192 (112 effective) Diffie-Hellman (key agreement) 1024-512 DSA (authentication) 1024 http://java.sun.com/security/

Certificati Digitali Documenti di identità in formato digitale Rilasciati da appositi enti, Certification Authorities Ad es. Verisign, Thatwe, IIT-CNR A pagamento!!!!!!! (circa 15 quelli di Verisign) Standard X.509 Contengono almeno: Identità del proprietario Chiave pubblica del proprietario Scadenza del certificato Firma digitale (basata sulla crittografia) della certification authority che ne garantisce l autenticità

KeyStore File locale che contiene i certificati digitali che attestano la MIA identità (sia server che client) NON possiamo ora andare a comprare dei certificati, quindi usiamo keytool per crearli Vanno bene per le nostre prove NON sicuri per utilizzo serio

Creazione KeyStore con keytool $ keytool -genkey -keystore certs -alias paolok Enter keystore password: paoloks What is your first and last name? [Unknown]: paolo mori What is the name of your organizational unit? [Unknown]: iit What is the name of your organization? [Unknown]: cnr What is the name of your City or Locality? [Unknown]: pisa What is the name of your State or Province? [Unknown]: pisa What is the two-letter country code for this unit? [Unknown]: it Is CN=paolo mori, OU=iit, O=cnr, L=pisa, ST=pisa, C=it correct? [no]: yes Enter key password for <paolok> (RETURN if same as keystore password): paolokp $

Estrazione certificato dal KeyStore KeyStore $ keytool -keystore certs -export -alias paolok -file paolocertfile.cer Immettere la password del keystore: paoloks Il certificato è memorizzato nel file <paolocertfile.cer> Se fosse un certificato vero qui ci sarebbe la Certification Authority $ keytool -printcert -file paolocertfile.cer Proprietario: CN=paolo mori, OU=iit, O=cnr, L=pisa, ST=pisa, C=it Organismo di emissione: CN=paolo mori, OU=iit, O=cnr, L=pisa, ST=pisa, C=it Numero di serie: 439c9b50 Valido da Sun Nov 20 22:34:08 CET 2005 a Sat Feb 18 22:34:08 CET 2006 Impronte digitali certificato: MD5: 26:D7:33:8D:0D:5D:17:B3:C4:5F:F9:BC:4E:38:53:7C SHA1: 26:1E:5D:5A:DD:B5:AF:AF:5F:1B:24:AE:78:13:9F:61:78:06:51:78

TrustStore Contiene i certificati dei partner di comunicazione di cui mi fido I certificati dovrei ottenerli dai partner, dalla loro CA, oppure da altre fonti Anche in questo caso simuliamo un TrustStore con keytool Va bene per le nostre prove NON sicuro per utilizzo serio

Inserimento Certificato nel TrustStore TrustStore $ keytool -import -keystore cacerts -alias paoloc -file paolocertfile.cer Immettere la password del keystore: altrapass Proprietario: CN=paolo mori, OU=iit, O=cnr, L=pisa, ST=pisa, C=it Organismo di emissione: CN=paolo mori, OU=iit, O=cnr, L=pisa, ST=pisa, C=it Numero di serie: 439c9b50 Valido da Sun Dec 11 22:34:08 CET 2005 a Sat Mar 11 22:34:08 CET 2006 Impronte digitali certificato: MD5: 26:D7:33:8D:0D:5D:17:B3:C4:5F:F9:BC:4E:38:53:7C SHA1: 26:1E:5D:5A:DD:B5:AF:AF:5F:1B:24:AE:78:13:9F:61:78:06:51:78 Considerare attendibile questo certificato? [no]: si Il certificato è stato aggiunto al keystore

Mutua Autenticazione Server - Client Server Java application Key paolo JVM Autenticazione di laura sul server Client Java application Key laura JVM KeyStore TrustStore Autenticazione di paolo sul client KeyStore TrustStore paolo laura laura paolo

Lato Server

Configurazione Ambiente per Server SSL Creazione SSLContext Creazione TrustManagerFactory Creazione KeyManagerFactory Creazione KeyStore Carico certificati nel KeyStore Inizializzazione del KeyManagerFactory con il KeyStore e la password Inizializzazione del SSLContext con il KeyManager ed il TrustManager

Creazione SSLContext Package javax.net.ssl Non esiste un costruttore per SSLContext, bisogna utilizzare il metodo statico: public static SSLContext getinstance(string protocol) throws NoSuchAlgorithmException protocol è SSL NoSuchAlgorithmException viene sollevato se protocol non è supportato

Creazione SSLContext import javax.net.ssl.sslcontext;... public class ProvaSSLServer { public static void main(string[] args) { SSLContext c; try { c = SSLContext.getInstance("SSL"); } catch(nosuchalgorithmexception e) { System.out.println("SSL non supportato"); }...

Creazione KeyManagerFactory Package javax.net.ssl Non esiste un costruttore per KeyManagerFactory, bisogna utilizzare il metodo statico: public static final KeyManagerFactory getinstance(string algorithm) throws NoSuchAlgorithmException algorithm è SunX509, lo standard dei certificati digitali NoSuchAlgorithmException viene sollevato se algorithm non è supportato

Creazione KeyManagerFactory import javax.net.ssl.keymanagerfactory;... public static void main(string[] args) {... KeyManagerFactory km; try { km = KeyManagerFactory.getInstance("SunX509"); } catch(nosuchalgorithmexception e) { System.out.println("SunX509 non supp."); }...

Creazione KeyStore Package java.security Non esiste un costruttore per KeyStore, bisogna utilizzare il metodo statico: public static KeyStore getinstance(string type) throws KeyStoreException type è JKS, il tipo di KeyStore supportato da JSSE KeyStoreException viene sollevato se type non è supportato

import java.security.keystore;... public static void main(string[] args) {... KeyStore ks; try { ks = KeyStore.getInstance("JKS"); } catch(nosuchalgorithmexception e) { System.out.println("SunX509 non supp."); }... Creazione KeyStore

Carico Certificati nel KeyStore Metodo di java.security.keystore public final void load(inputstream stream, char[] password) throws IOException, NoSuchAlgorithmException, CertificateException stream è un Inputstream aperto sul file che contiene il KeyStore IOException viene sollevata se non è possibile aprire o leggere da stream; viene sollevata anche se la password è errata NoSuchAlgorithmException viene sollevata se non viene trovato l algoritmo per verificare l integrità del KeyStore CertificateException viene sollevata se si verificano errori nel caricare un certificato

Carico Certificati nel KeyStore Questo è solo un esempio: NON mettere mai la password cablata nel programma!!!! char[] passwd = "paoloks".tochararray(); ks.load(new FileInputStream("certs"), passwd);

Inizializzazione del KeyManagerFactory Metodo di javax.net.ssl.keymanagerfactory public final void init(keystore ks, char[] password) throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException ks è il KeyStore creato precedentemente password è la password del KeyStore KeyStoreException viene sollevata se non viene inizializzato il KeyManagerFactory NoSuchAlgorithmException viene sollevata se non viene trovato l algoritmo per verificare l integrità del KeyStore UnrecoverableKeyException viene sollevata se non è possibile accedere al KeyStore, per esempio perchè la password è errata

Inizializzazione del KeyManagerFactory char[] kpasswd = "paolokp".tochararray(); km.init(ks, kpasswd);

Creazione TrustManagerFactory Package javax.net.ssl Non esiste un costruttore per TrustManagerFactory, bisogna utilizzare il metodo statico: public static final TrustManagerFactory getinstance(string algorithm) throws NoSuchAlgorithmException algorithm è SunX509, lo standard dei certificati digitali NoSuchAlgorithmException viene sollevato se algorithm non è supportato

Creazione TrustManagerFactory import javax.net.ssl.trustmanagerfactory;... public static void main(string[] args) {... TrustManagerFactory tm; try { tm = TrustManagerFactory.getInstance("SunX509"); } catch(nosuchalgorithmexception e) { System.out.println("SunX509 non supp."); }...

Inizializzazione del TrustManagerFactory Metodo di javax.net.ssl.trustmanagerfactory public final void init(keystore ks) throws KeyStoreException, ks è il KeyStore creato precedentemente, anche se si può usare lo stesso creato per il KeyManager, è meglio avere due KeyStores diversi: uno per i propri certificati uno per i certificati dei partners KeyStoreException viene sollevata se non viene inizializzato il KeyManagerFactory

Inizializzazione del TrustManagerFactory tm.init(ks);

Inizializzazione del SSLContext Metodo di javax.net.ssl.sslcontext public final void init(keymanager[] km, TrustManager[] tm, SecureRandom random) throws KeyManagementException km il KeyManager creato precedentemente tm il TrustManager, se tm=null viene preso il TrustManager di default KeyManagementException viene sollevata se non è possibile inizilizzare SSLContext

Inizializzazione del SSLContext c.init(km.getkeymanagers(), tm.gettrustmanagers(), null);

Creazione Server Socket con SSL Metodo di javax.net.ssl.sslcontext Non esiste un costruttore per SSLServerSocketFactory, bisogna utilizzare un metodo di SSLContext: public final SSLServerSocketFactory getserversocketfactory() ritorna una SSLServerSocketFactory dalla quale creare l SSLServerSocket

Creazione Server Socket con SSL Metodo di javax.net.ssl.sslserversocketfactory Non esiste un costruttore per SSLServerSocket, bisogna utilizzare un metodo di ServerSocketFactory, che è una superclasse di SSLServerSocketFactory: public abstract ServerSocket createserversocket(int port) throws IOException ritorna un SSLServerSocket

Creazione Server Socket con SSL import javax.net.ssl.sslserversocket; import javax.net.ssl.sslserversocketfactory;... int porta = 4000; SSLServerSocketFactory f = c.getserversocketfactory(); SSLServerSocket ss = (SSLServerSocket) f.createserversocket(porta); // adesso ss si tratta come un normale ServeSocket

Algoritmi di Crittografia Metodi di javax.net.ssl.sslserversocket public abstract String[] getsupportedciphersuites() restituisce l elenco degli algoritmi crittografici supportati che possono essere attivati public abstract String[] getenabledciphersuites() restituisce l elenco degli algoritmi crittografici attivati public abstract void setenabledciphersuites(string[] suites) modifica l elenco degli algoritmi crittografici attivati

Algoritmi di Crittografia Supportati String[] scs = ss.getsupportedciphersuites(); for (int i=0; i<scs.length; i++) System.out.println(scs[i])

Algoritmi di Crittografia Supportati SSL_RSA_WITH_RC4_128_MD5 SSL_RSA_WITH_RC4_128_SHA TLS_RSA_WITH_AES_128_CBC_SHA TLS_DHE_RSA_WITH_AES_128_CBC_SHA TLS_DHE_DSS_WITH_AES_128_CBC_SHA SSL_RSA_WITH_3DES_EDE_CBC_SHA SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA SSL_RSA_WITH_DES_CBC_SHA SSL_DHE_RSA_WITH_DES_CBC_SHA SSL_DHE_DSS_WITH_DES_CBC_SHA SSL_RSA_EXPORT_WITH_RC4_40_MD5 SSL_RSA_EXPORT_WITH_DES40_CBC_SHA SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA SSL_RSA_WITH_NULL_MD5 SSL_RSA_WITH_NULL_SHA SSL_DH_anon_WITH_RC4_128_MD5 TLS_DH_anon_WITH_AES_128_CBC_SHA SSL_DH_anon_WITH_3DES_EDE_CBC_SHA SSL_DH_anon_WITH_DES_CBC_SHA SSL_DH_anon_EXPORT_WITH_RC4_40_MD5 SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA TLS_KRB5_WITH_RC4_128_SHA TLS_KRB5_WITH_RC4_128_MD5 TLS_KRB5_WITH_3DES_EDE_CBC_SHA TLS_KRB5_WITH_3DES_EDE_CBC_MD5 TLS_KRB5_WITH_DES_CBC_SHA TLS_KRB5_WITH_DES_CBC_MD5 TLS_KRB5_EXPORT_WITH_RC4_40_SHA TLS_KRB5_EXPORT_WITH_RC4_40_MD5 TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5 Gli algoritmi che contengono _anon_ non richiedono autenticazione Il Server ed il Client devono attivare almeno un algoritmo in comune

Attivazione Algoritmi di Crittografia String[] ascs = new String[scs.length]; int ascsl = 0; for (int i=0; i<scs.length; i++) { if (scs[i].indexof("_anon_") > 0) ascs[ascsl++] = scs[i]; } String[] oecs = ss.getenabledciphersuites(); String[] necs = new String[oecs.length + ascsl]; System.arraycopy(oecs, 0, necs, 0, oecs.length); System.arraycopy(ascs, 0, necs, oecs.length, ascsl); ss.setenabledciphersuites(necs);

Autenticazione del Client Il server sceglie se richiedere l autenticazione del client Metodi di javax.net.ssl.sslserversocket public abstract void setneedclientauth(boolean need) need vale false se non si vuole l autenticazione del client, true altrimenti

Autenticazione del Client ss.setneedclientauth(false);

Riassumendo KeyStore KeyStore ks = KeyStore.getInstance("JKS"); ks.load(new FileInputStream("certs"), passwd); KeyManager KeyManagerFactory km = KeyManagerFactory.getInstance("SunX509"); km.init(ks, kpasswd); TrustStore KeyStore ts = KeyStore.getInstance("JKS"); ts.load(new FileInputStream("cacerts"), tpasswd); TrustManager TrustManagerFactory tm = TrustManagerFactory.getInstance("SunX509"); tm.init(ts); SSLContext c = SSLContext.getInstance("SSL"); c.init(km.getkeymanagers(), tm.gettrustmanagers(), null); SSLServerSocketFactory SSLServerSocketFactory f = c.getserversocketfactory(); SSLServerSocket SSLServerSocket ss = (SSLServerSocket) f.createserversocket(4000);

Lato Client

Impostazione TrustStore import javax.net.ssl.sslexception; import javax.net.ssl.sslsocket; import javax.net.ssl.sslsocketfactory; public static void main(string[] args) { System.setProperty("javax.net.ssl.trustStore", "cacerts"); System.setProperty("javax.net.ssl.trustStorePassword", "altrapass");...

Creazione Socket con SSL Metodo di javax.net.ssl.sslsocketfactory Non esiste un costruttore per SSLSocketFactory, bisogna utilizzare un metodo statico di SSLSocketFactory public static ServerSocketFactory getdefault()

Creazione Socket con SSL Metodi di javax.net.ssl.sslsocketfactory Non esiste un costruttore per SSLSocket, bisogna utilizzare i metodi di SocketFactory, che è una superclasse di SSLSocketFactory: public abstract Socket createsocket(inetaddress host, int port) throws IOException public abstract Socket createsocket(string host, int port) throws IOException, UnknownHostException

Creazione Socket con SSL import javax.net.ssl.sslexception; import javax.net.ssl.sslsocket; import javax.net.ssl.sslsocketfactory; public static void main(string[] args) {... SSLSocketFactory f = (SSLSocketFactory) SSLSocketFactory.getDefault(); try { SSLSocket s = (SSLSocket) f.createsocket("fujih1",4000); } // s viene utilizzato come un normale socket

Algoritmi di Crittografia Supportati, attivi, attivazione: Identico al caso server Il Client ed il Server devono attivare almeno un algortimo in comune

Prof. Fabrizio Baiardi Credits