KeyStore, HttpClient, e HTTPS: qualcuno può spiegare questo codice per me?
-
02-10-2019 - |
Domanda
Sto cercando di capire cosa sta succedendo nel questo codice .
KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
FileInputStream instream = new FileInputStream(new File("my.keystore"));
try {
trustStore.load(instream, "nopassword".toCharArray());
} finally {
instream.close();
}
SSLSocketFactory socketFactory = new SSLSocketFactory(trustStore);
Scheme sch = new Scheme("https", socketFactory, 443);
httpclient.getConnectionManager().getSchemeRegistry().register(sch);
Le mie domande:
trustStore.load(instream, "nopassword".toCharArray());
sta facendo che cosa esattamente? Dalla lettura della documentazione di load()
caricherà KeyStore dati da un flusso di input (che è solo un file vuoto che abbiamo appena creato), utilizzando alcuni arbitrario "NOPASSWORD". Perché non basta caricarlo con null
come parametro InputStream e una stringa vuota come il campo password?
E poi che cosa sta accadendo quando questo KeyStore vuota viene passata al costruttore SSLSocketFactory? Qual è il risultato di una tale operazione?
O -? È questo semplicemente un esempio in cui in una vera e propria applicazione che si avrebbe dovuto mettere in realtà un riferimento a un file di archivio chiavi / password esistente
Soluzione
O -? È questo semplicemente un esempio in cui in una vera e propria applicazione che si avrebbe dovuto mettere in realtà un riferimento a un file di archivio chiavi / password esistente
Sembra davvero in quel modo. Non v'è alcun file "my.keystore"
distribuito in entrambi i distribuzioni binarie o fonte del HttpClient 4.0.1. Per questo per funzionare è necessario creare un archivio chiavi reale. Si potrebbe utilizzare keytool o Portecle .
Questo esempio mostra come utilizzare un negozio di fiducia diverso da quello che gli usi JVM di default ($ JAVA_HOME / jre / lib / security / cacerts) per questa istanza di DefaultHttpClient
. Questo è utile quando un sito SSL utilizza un certificato firmato da loro in-house certificato di autorità . verrà stabilita solo la connessione SSL quando viene riconosciuto il firmatario del certificato del server. La voce di Wikipedia su TLS è un'introduzione decente se non si ha familiarità con il concept.
Altri suggerimenti
Questo esempio cerca di mostrare come caricare il proprio negozio di fiducia. Per ottenere questo esempio di lavoro, è necessario disporre di un file chiamato "my.keystore" nella directory corrente e la password per l'archivio di chiavi è "NOPASSWORD".
Si prega di nota new File("my.keystore")
non necessariamente creare un nuovo file. Esso crea semplicemente un oggetto File che punta al percorso.