Utilizzo dei certificati in Java

Introduzione

Nell’articolo Crittografia in Java abbiamo introdotto alcuni concetti base per la gestione della crittografia in java. Vediamo ora come sia possibile con il framework JCA gestire ed utilizzare i certificati digitali.

Keystore e Trustore

Un keystore è un repository di certificati digitali utilizzato in java genericamente indicato come JKS (Java Key Store). Da un punto di vista tecnologico non c’è differenza tra un keystore ed un truststore, entrambe sono repository. Ciò che li differenzia è il contenuto e soprattutto l’utilizzo. In generale il keystore contiene un certificato digitale in cui è inclusa una coppia di chiavi pubblica/privata. Diversamente il truststore include i certificati delle entità di cui ci fidiamo e, ovviamente, tali certificati comprendono esclusivamente la chiave pubblica di tali entità. Ovviamente nulla impedisce di utilizzare lo stesso repository sia come keystore che come truststore.

Per i nostri scopi abbiamo bisogno sia di un keystore che di un truststore. Fortunatamente il jdk ci mette a disposizione un keytool per la gestione dei keystore e la generazione di certificati digitali. Per generare i due repository seguiamo i seguenti passi.

L’istruzione seguente consente di generare un keystore e salvarlo nel file javaboss-keystore.jks. Per il certificato, identificato con l’alias javaboss.it, è utilizzato l’algoritmo RSA con chiavi di lunghezza 2048. Sia il certificato che il keystore sono protetti con la password javaboss.

Dal keystore estraiamo il certificato da distribuire ai nostri interlocutori. naturalmente il certificato conterrà esclusivamente la chiave pubblica.

A questo punto dobbiamo generare un truststore dove inserire il certificato appena esportato. Per farlo dobbiamo prima generare un keystore come fatto prima e poi eliminare il certificato che il keytool ha inserito nel repository. Otteniamo così un keystore vuoto conservato nel file javaboss-truststore.jks.

Infine inseriamo il certificato estratto dal keystore nel truststore vuoto.

Per maggiore chiarezza la situazione in cui ci troviamo è quella mostrata nella figura seguente.

keystore truststore

Gestione del Keystore

Dopo aver creato il keystore ed il truststore vediamo come accedervi. Per farlo è sufficiente caricare il keystore dal filesystem ma è necessario conoscerne la password di protezione:

Supponendo di voler inviare un messaggio ad un destinatario del quale abbiamo il certificato nel truststore, dobbiamo innanzitutto estrarne la chiave pubblica conoscendo l’alias del certificato:

Analogamente il destinatario dovrà estrarre la propria chiave privata dal certificato contenuto nel keystore. Per farlo deve ovviamente conoscerne la password:

Utilizzando la classe CryptoHelper introdotta nel post Crittografia in Java implementiamo una classe KeystoreManager per gestire un keystore (o truststore) ed eseguire le operazioni di cifratura e decifratura. Riportiamo uno stralcio della classe che sarà comunque disponibile per il download.

In conclusione utilizzando la classe KeystoreManager l’invio del messaggio cifrato avverrà secondo lo schema mostrato dal seguente codice:

La quale, una volta eseguita, produce l’output:

Codice Sorgente

Il codice sorgente è scaricabile qui Cryptography.

© 2018 Java Boss - Theme by HappyThemes