Qual è la differenza tra un keystore e un truststore?
Qual è la differenza tra un keystore e un truststore?
Risposte:
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.
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 KeyStore
viene passato a TrustManagerFactory
).
Un keystore contiene chiavi private. Questo è necessario solo se si è un server o se il server richiede l'autenticazione client.
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.
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 .
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.
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.
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.
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 .
Almeno sul mio Mac OSX è il keyStore predefinito ${user.home}/.keystore
e 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/keyStore
o
-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=password
o-Djavax.net.ssl.trustStorePassword=password
Fonte principale:
http://javarevisited.blogspot.co.uk/2012/09/difference-between-truststore-vs-keyStore-Java-SSL.html