Definizioni di Truststore e Keystore


Risposte:


268

Un keystore contiene chiavi private e i certificati con le rispettive chiavi pubbliche.

Un truststore contiene certificati di altre parti con cui prevedi di comunicare o delle autorità di certificazione di cui ti fidi per identificare altre parti.


12
Anche se questo dovrebbe essere vero in pratica, possono (e spesso lo sono) uno nella stessa. Puoi effettivamente importare una chiave privata e un certificato pubblico nel "truststore" predefinito [java home] / jre / lib / security / cacerts. L'utilità keytool non fa una distinzione nei due termini, ma solo nei tipi di negozi (es. - JKS vs. PKCS12). Del resto, Java fa la stessa cosa nel codice sorgente. Si crea un java.security.KeyStore e si utilizza un gestore fiducia per gestire i certificati al suo interno, ma non esiste una classe TrustStore.

4
Java non ha di TrustStore per sé . Oppure non sono riuscito a trovarlo nei documenti java (ad esempio java.security.TrustStore). Quando vogliamo fidarci di un'autorità di certificazione, questa viene considerata attendibile attraverso un KeyStore(e il KeyStoreviene passato a TrustManagerFactory).
JWW

5
Vale la pena ricordare che KeyStore.load(InputStream is, char[] password)( documenti ) può prendere una password null e quindi darà accesso a certificati pubblici. Cioè, il codice che vuole navigare in un truststore non ha bisogno di conoscerlo password (per ottime ragioni!)
xverges

83
  1. Un keystore contiene chiavi private. Questo è necessario solo se si è un server o se il server richiede l'autenticazione client.

  2. Un truststore contiene certificati CA affidabili. Se il certificato del tuo server è firmato da una CA riconosciuta, il truststore predefinito fornito con JRE si fiderà già di esso (perché si fida già di CA affidabili), quindi non è necessario crearne uno tuo o aggiungere qualcosa a quello dalla JRE.

fonte


73

In una stretta di mano SSL lo scopo di trustStore è verificare le credenziali e lo scopo di keyStore è fornire credenziali .

keyStore

keyStore in Java memorizza la chiave privata e i certificati corrispondenti alle loro chiavi pubbliche e richiede se si è SSL Server o SSL richiede l'autenticazione client.

TrustStore

TrustStore archivia certificati di terze parti, l'applicazione Java comunica o certificati firmati da CA (autorità di certificazione come Verisign, Thawte, Geotrust o GoDaddy) che possono essere utilizzati per identificare terze parti.

TrustManager

TrustManager determina se la connessione remota deve essere attendibile o meno, ovvero se la parte remota è chi rivendica e KeyManager decide quali credenziali di autenticazione devono essere inviate all'host remoto per l'autenticazione durante l'handshake SSL.

Se sei un server SSL, utilizzerai la chiave privata durante l'algoritmo di scambio delle chiavi e invierai i certificati corrispondenti alle tue chiavi pubbliche al client, questo certificato viene acquisito da keyStore. Sul lato client SSL, se è scritto in Java, utilizzerà i certificati archiviati in trustStore per verificare l'identità del server. I certificati SSL sono più comunemente disponibili come file .cer che viene aggiunto in keyStore o trustStore utilizzando qualsiasi utilità di gestione delle chiavi, ad esempio keytool .

Fonte: http://javarevisited.blogspot.ch


31

Potresti anche essere interessato a scrivere da Sun, come parte della documentazione standard JSSE:

http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores

In genere, il truststore viene utilizzato per archiviare solo le chiavi pubbliche, a scopo di verifica, ad esempio con l'autenticazione X.509. Ai fini della gestibilità, è abbastanza comune per amministratori o sviluppatori semplicemente confondere i due in un unico negozio.


1
Fa un 404 purtroppo
Chris Beach

@ChrisBeach - hanno aggiornato il collegamento a quello corretto sul sito Oracle.
Peter Mularien,

1
Il truststore viene utilizzato per archiviare certificati firmatari attendibili.
Marchese di Lorne,

9

In Java, qual è la differenza tra un keystore e un truststore?

Ecco la descrizione dai documenti Java nella Guida di riferimento di Java Secure Socket Extension (JSSE) . Non credo che ti dica qualcosa di diverso da quello che gli altri hanno detto. Ma fornisce il riferimento ufficiale.

keystore / truststore

Un keystore è un database di materiale chiave. Il materiale chiave viene utilizzato per vari scopi, tra cui l'autenticazione e l'integrità dei dati. Sono disponibili vari tipi di keystore, tra cui PKCS12 e Oracle JKS.

In generale, le informazioni sul keystore possono essere raggruppate in due categorie: voci chiave e voci di certificato attendibili. Una voce chiave è costituita dall'identità di un'entità e dalla sua chiave privata e può essere utilizzata per vari scopi crittografici. Al contrario, una voce di certificato attendibile contiene solo una chiave pubblica oltre all'identità dell'entità. Pertanto, non è possibile utilizzare una voce di certificato attendibile dove è richiesta una chiave privata, ad esempio in un javax.net.ssl.KeyManager. Nell'implementazione JDK di JKS, un keystore può contenere sia voci chiave che voci di certificato attendibili.

Un truststore è un keystore che viene utilizzato quando si prendono decisioni su cosa fidarsi. Se ricevi dati da un'entità di cui ti fidi già e se riesci a verificare che l'entità sia quella che afferma di essere, allora puoi presumere che i dati provengano realmente da quell'entità.

Una voce deve essere aggiunta a un truststore solo se l'utente si fida di quell'entità. Generando una coppia di chiavi o importando un certificato, l'utente dà fiducia a quella voce. Qualsiasi voce nel truststore è considerata una voce attendibile.

Potrebbe essere utile disporre di due diversi file di archivio chiavi: uno contenente solo le voci della chiave e l'altro contenente le voci del certificato attendibile, inclusi i certificati CA. Il primo contiene informazioni private, mentre il secondo no. L'uso di due file invece di un singolo file keystore fornisce una separazione più chiara della distinzione logica tra i propri certificati (e le corrispondenti chiavi private) e i certificati degli altri. Per fornire maggiore protezione alle chiavi private, archiviarle in un keystore con accesso limitato e, se necessario, fornire i certificati attendibili in un keystore più accessibile al pubblico.


4
  1. La prima e principale differenza tra trustStore e keyStore è che TrustStore viene utilizzato da TrustManager per determinare se la connessione remota deve essere attendibile, keyStore viene utilizzato da KeyManager decidendo quali credenziali di autenticazione devono essere inviate all'host remoto per l'autenticazione durante l'handshake SSL.

  2. Un'altra differenza è che keyStore contiene teoricamente chiavi private richieste solo se si esegue un server in connessione SSL o se è stata abilitata l'autenticazione client sul lato server e d'altra parte trustStore archivia chiave pubblica o certificati da CA (Autorità di certificazione) che vengono utilizzati per fidati della connessione remota o SSL.

    Infatti puoi archiviare nello stesso file sia le chiavi private che quelle pubbliche, dato che lo strumento per gestire quei file è lo stesso (keytool), quindi potresti usare un singolo file per entrambi gli scopi, ma probabilmente non dovresti .

  3. Almeno sul mio Mac OSX è il keyStore predefinito ${user.home}/.keystoree il trustStore predefinito è /System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts.

    Se si desidera sovrascriverli, è necessario aggiungere i parametri JVM -Djavax.net.ssl.keyStore /path/to/keyStoreo -Djavax.net.ssl.trustStore /path/to/trustStore. Potrebbe anche essere necessario impostare la password keyStore in caso di java.security.UnrecoverableKeyException: Password must not be null, utilizzando il parametro -Djavax.net.ssl.trustStorePassword=passwordo-Djavax.net.ssl.trustStorePassword=password

Fonte principale:

http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.