Definizioni di Truststore e Keystore
-
11-07-2019 - |
Domanda
Qual è la differenza tra un keystore e un truststore?
Soluzione
Un keystore contiene chiavi private e i certificati con le corrispondenti chiavi pubbliche.
Un truststore contiene certificati di altre parti con cui prevedi di comunicare o di autorità di certificazione di cui ti fidi per identificare altre parti.
Altri suggerimenti
-
Un keystore contiene chiavi private. Ne hai bisogno solo se lo sei un server o se il server richiede l'autenticazione client.
-
Un truststore contiene certificati CA affidabili. Se il tuo server & # 8217; s il certificato è firmato da una CA riconosciuta, il truststore predefinito che viene fornito con JRE si fiderà già di esso (perché già si fida di CA affidabili), quindi non è necessario crearne una tua, o per aggiungere qualcosa a quello di 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 chiave privata e certificati corrispondenti alle loro chiavi pubbliche e richiede se si è SSL Server o SSL richiede l'autenticazione client.
TrustStore
TrustStore memorizza 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 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 es. 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 dei documenti Java su Java Secure Socket Extension (JSSE) Guida di riferimento . 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 è costituito dall'identità di un'entità e dalla sua chiave privata e può essere utilizzato per una varietà di scopi crittografici. Al contrario, un affidabile la voce del certificato contiene solo una chiave pubblica oltre a identità dell'entità. Pertanto, non è possibile utilizzare una voce di certificato attendibile dove è richiesta una chiave privata, come in a 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à che tu già fiducia, e se è possibile verificare che l'entità sia quella afferma di essere, quindi puoi presumere che i dati provengano davvero 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 a certificato, l'utente dà fiducia a quella voce. Qualsiasi voce nel truststore è considerato una voce attendibile.
Potrebbe essere utile avere due diversi file di archivio chiavi: uno contenente solo le voci della chiave e l'altro contenente la tua voci di certificato attendibili, inclusi i certificati CA. L'ex contiene informazioni private, mentre quest'ultima no. Usando due file invece di un singolo file keystore fornisce una separazione più pulita della distinzione logica tra i propri certificati (e corrispondenti chiavi private) e altri certificati. Per fornire di più protezione per le tue chiavi private, memorizzale in un keystore con accesso limitato e fornire i certificati attendibili in più keystore accessibile al pubblico, se necessario.
-
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 SSL stretta di mano.
-
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 (certificato Autorità) utilizzate per fidarsi della connessione remota o SSL.
In effetti puoi archiviare nello stesso file sia chiavi private che pubbliche, dato che lo strumento per gestire quei file è lo stesso (keytool), quindi potresti usare un singolo file per entrambi gli scopi, ma tu probabilmente non dovrebbe .
-
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
. Potresti anche è necessario impostare la password keyStore in caso dijava.security.UnrecoverableKeyException: la password non deve essere null
, usando il parametro-Djavax.net.ssl.trustStorePassword = password
o-Djavax.net.ssl.trustStorePassword=password
Fonte principale: