Possiamo creare una Keystore a partire da un certificato .cer utilizzando il keytool fornito con le librerie Java
Ho provato a sintetizzare la guida il più possibile, ma più di questo non ho potuto.
Cos’è un Certificato SSL?
Il Certificato SSL è in pratica una chiave di criptaggio che intercorre tra te e il servizio che stai utilizzando o il sito che stai visualizzando. Serve da parte dell’utente per garantire sicurezza laddove c’è un interscambio di dati personali ed evitare che altri possano spiarle mentre le inserite, e da parte del servizio per assicurarsi che chi lo utilizza sia un soggetto materiale esistente, sia essa un’applicazione o una persona. In poche parole, quando andate ad utilizzare un sito https, lì c’è un certificato di criptaggio.
Finché ciò che state utilizzando è un sito internet, a memorizzare e gestire il certificato ci pensa in automatico il vostro browser, ma se quell’url è la destinazione di un servizio che serve a una qualche vostra applicazione che non è un browser, allora per poterlo utilizzare dovete ricorrere alla keystore.
Il Keystore è un contenitore di certificati
La Keystore è praticamente un contenitore di certificati. Ogni certificato, che è possibile salvare in un file in formato .crt o .cer, può essere inserito ed individuato all’interno della Keystore tramite un alias. Senza il keystore la vostra applicazione non riuscirà mai ad utilizzare il servizio interessato, a patto che non sia in grado di “assorbire” automaticamente un certificato come fa un browser web, e riceverete errori come questo
keytool error: java.lang.Exception: Input not an X.509 certificate
java.lang.Exception: Input not an X.509 certificate
at sun.security.tools.KeyTool.addTrustedCert(KeyTool.java:1913)
at sun.security.tools.KeyTool.doCommands(KeyTool.java:818)
at sun.security.tools.KeyTool.run(KeyTool.java:172)
at sun.security.tools.KeyTool.main(KeyTool.java:166)
nel caso state utilizzando un certificato che non va bene, oppure questo
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
Preciso che il procedimento è valido per chi utilizza Windows (io sto usando al momento Windows 8.1, ma penso che valga anche per le altre versioni), su altri sistemi operativi non ho ancora provato.
Procediamo.
Scarichiamo il certificato
La prima cosa che dobbiamo fare è procurarci il certificato che dobbiamo andare ad inserire nella nostra Keystore.
Esistono vari tool che permettono di scaricare velocemente certificati SSL, ma a me non piacciono né le strade semplici, né l’uso di applicativi esterni non necessari.
Apriamo, quindi, Internet Explorer e rechiamoci all’url https dove si trova il servizio che dobbiamo richiamare. Comparirà sulla destra della barra dell’url un lucchettino
dobbiamo cliccarci sopra, e selezionare il comando in basso Visualizza certificati
(non fate caso al contenuto delle informazioni del certificato, sto usando quelli di Google per mostrare gli screenshot guida)
Dopo aver cliccato su Visualizza certificati si aprirà una finestra, selezioneremo la scheda Percorso certificazione e andremo a leggere il nome preciso del certificato, e salviamocelo, perché ci servirà per riconoscerlo durante l’esportazione.
Andiamo a questo punto su Impostazioni > Opzioni Internet
e dalla finestra che si aprirà andremo a selezionare la scheda Contenuto quindi cliccheremo sul pulsante Certificati
dalla finestra che si aprirà dobbiamo andare a cercare il certificato che ci interessa tra le varie schede, e lo andremo ad identificare tramite il nome che abbiamo prima salvato, quindi lo andremo a selezionare e cliccheremo sul comando Esporta…
Si avvierà il procedimento di esportazione certificati, bisogna andare sempre avanti facendo attenzione a creare un certificato DEX x.509 in formato .cer, e salvatelo dove più può farvi comodo.
Creiamo la nostra Keystore
Possiamo crearne una nuova oppure inserire il certificato in una keystore esistente, bisogna solo utilizzare un alias non già utilizzato in precedenza. Questo serve nel caso il nostro applicativo abbia necessità di connettersi a più di un servizio.
Apriamo il prompt dei comandi, e andiamo a posizionarci nella cartella bin che si trova nella cartella del jdk che avete installato
in questa cartella si troverà il keytool.exe che ci servirà per creare o aggiornare la keystore. Andiamo quindi a scrivere questo comando
keytool -import -v -trustcacerts -alias [nome alias] -file [percorso file .cer] -keystore [percorso file .keystore]
andando ad inserire il nome dell’alias, il percorso del certificato e il percorso del keystore.
Fare solo attenzione alla password della keystore, perché se già esiste e dovete solo aggiornarla, dovrete conoscerla, se invece il file .keystore non esiste quella che andrete ad inserire sarà la password che verrà applicata.