Non ti serve una password per accedere a un truststore (fatta con il comando keytool Java)?
-
23-09-2019 - |
Domanda
Ho appena creato un truststore con il keytool Java (per l'autenticazione del server di un server che non dispone di un CERT CA). Tuttavia Ho appena notato qualcosa di strano. Sto iniziando il mio cliente in questo modo:
java -Djavax.net.ssl.trustStore=<PATHSTUFF>/client.keystore -classpath <STUFF> Client
(NOTA: non c'è una password specificata)
La chiamata sopra funziona.
Tuttavia quando provo questo:
java -classpath <STUFF> Client
Non funziona. (Ovviamente non funziona richiede la truststore).
Mi aspettavo di bisogno di passare a questa opzione (ma non l'ho fatto):
-Djavax.net.ssl.trustStorePassword=mypass
Domanda : Non ti serve una password per accedere a un truststore? È la password solo per la modifica? Che dire di un archivio chiavi?
Soluzione
La password viene utilizzata per proteggere l'integrità di un archivio di chiavi. se non si fornisce alcuna password dell'archivio, si può ancora leggere il contenuto del keystore. Il comando di keytool -list
illustrato questo comportamento (utilizzarlo con una password vuota).
Altri suggerimenti
Oltre alla risposta eccellente 's @ pascal-Thivent:
La password di archivio chiavi ha due scopi - se non in dotazione, keytool
rifiuta di lasciare che si sostituisce il contenuto del negozio con nuovi contenuti per esempio eliminando esistenti o l'aggiunta di nuove voci di certificato.
Naturalmente se si ha accesso in scrittura per aggiornare il file di archivio chiavi utilizzando keytool
(non è setuid), è possibile sostituire il contenuto utilizzando un altro strumento che non ha controllato la password. E sappiamo che il negozio e il suo formato è leggibile senza una password, quindi presumibilmente possiamo scrivere quello che vogliamo lì.
Ecco dove la password di verifica entra-in. Quando le voci dei negozi sono scritte-out, la password dell'archivio in dotazione consente di calcolare un digest dei magazzini contenuti, come salata dalla password. Si tratta di un one-way hash / digerire, quindi senza la password, non è possibile verificare se il contenuto del deposito sono stati manomessi o meno. Allo stesso modo, qualcuno malintenzionato che non conosce la password, inoltre, non può modificare il contenuto del negozio e produrre il digest-hash che sarebbe prodotta da quella password.
Ecco perché quando si fornisce senza una password, keytool
appena si avverte che non è possibile verificare che il negozio non è stato manomesso. Se si fornisce un non valida la password, o il negozio ha stato manomesso, si otterrà un messaggio diverso:
Enter keystore password:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
keytool
è stato in grado di ricreare l'hash esistente digerire in base al contenuto attuale del serbatoio e la password fornita, quindi o la password è errata, oppure il keystore è compromessa - keytool
non si può dire, ma si presuppone che voi o il software di lettura il negozio sa.
Si noti che mentre il termine chiavi è utilizzato generalmente, si riferisce anche ai di chiavi e truststore . Meno-in generale, un chiavi è più spesso un archivio di identità e contiene identità e il loro segreto, chiavi private, come usato per esempio da un server che esegue HTTPS. A truststore contiene il più delle volte solo chiavi pubbliche e senza le chiavi private, in modo che nessun segreto, ma è importante per determinare quali comando che identifica un client trust.
Se non si specifica un truststore, quella di default viene usato al posto. Presumo, si ottiene un errore, che è necessario specificare un truststore al fine di fiducia l'ospite si richiede? Il truststore predefinita risiede in $ JAVA_HOME / lib / security / jssecacerts.
Per impostazione predefinita, la password dell'archivio fiducia JRE è "changeit". Se si desidera cambiare il negozio di fiducia di default (cacerts) la password di programmazione utilizzando Java, quindi si prega di passare attraverso questo link .