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?

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top