¿Cuál es la diferencia entre un almacén de claves y un almacén de confianza?
keystore
encryption-asymmetric
truststore
Rob Wright
fuente
fuente
TrustStore
per se . O no pude encontrarlo en los documentos de Java (por ejemplo,java.security.TrustStore
). Cuando queremos confiar en una Autoridad de certificación, se confía a través de unKeyStore
(yKeyStore
se pasa alTrustManagerFactory
).KeyStore.load(InputStream is, char[] password)
( docs ) puede tomar una contraseña nula y luego le dará acceso a certificados públicos. Es decir, el código que quiere ver un almacén de confianza no necesita saber que la contraseña (por muy buenas razones!)Un almacén de claves contiene claves privadas. Solo necesita esto si es un servidor o si el servidor requiere autenticación de cliente.
Un almacén de confianza contiene certificados de CA para confiar. Si el certificado de su servidor está firmado por una CA reconocida, el almacén de confianza predeterminado que se envía con el JRE ya confiará en él (porque ya confía en las CA confiables), por lo que no necesita construir el suyo propio ni agregar nada al mismo. del JRE.
Fuente
fuente
En un protocolo de enlace SSL, el propósito de trustStore es verificar las credenciales y el propósito de keyStore es proporcionar credenciales .
keyStore
keyStore en Java almacena la clave privada y los certificados correspondientes a sus claves públicas y requiere si es un servidor SSL o SSL requiere autenticación del cliente.
TrustStore
TrustStore almacena certificados de terceros, su aplicación Java se comunica o certificados firmados por CA (autoridades de certificación como Verisign, Thawte, Geotrust o GoDaddy) que pueden usarse para identificar a terceros.
TrustManager
TrustManager determina si la conexión remota debe ser de confianza o no, es decir, si la parte remota es a quién dice y KeyManager decide qué credenciales de autenticación se deben enviar al host remoto para la autenticación durante el protocolo de enlace SSL.
Si es un servidor SSL, usará una clave privada durante el algoritmo de intercambio de claves y enviará los certificados correspondientes a sus claves públicas al cliente, este certificado se adquiere de keyStore. En el lado del cliente SSL, si está escrito en Java, utilizará certificados almacenados en trustStore para verificar la identidad del servidor. Los certificados SSL generalmente se presentan como un archivo .cer que se agrega a keyStore o trustStore mediante el uso de cualquier utilidad de administración de claves, por ejemplo, keytool .
Fuente: http://javarevisited.blogspot.ch
fuente
También puede estar interesado en la redacción de Sun, como parte de la documentación estándar de JSSE:
http://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#Stores
Normalmente, el almacén de confianza se utiliza para almacenar solo claves públicas, con fines de verificación, como con la autenticación X.509. Para fines de administración, es bastante común que los administradores o desarrolladores simplemente combinen los dos en una sola tienda.
fuente
Aquí está la descripción de los documentos de Java en la Guía de referencia de Java Secure Socket Extension (JSSE) . No creo que te diga nada diferente de lo que otros han dicho. Pero sí proporciona la referencia oficial.
fuente
La primera y principal diferencia entre trustStore y keyStore es que TrustManager usa trustStore para determinar si se debe confiar en la conexión remota, keyStore se usa desde KeyManager para decidir qué credenciales de autenticación se deben enviar al host remoto para la autenticación durante el protocolo de enlace SSL.
Otra diferencia es que keyStore teóricamente contiene claves privadas necesarias solo si está ejecutando un servidor en conexión SSL o si ha habilitado la autenticación del cliente en el lado del servidor y, por otro lado, trustStore almacena claves públicas o certificados de CA (autoridades de certificación) que se utilizan para confiar en la parte remota o la conexión SSL.
De hecho, puede almacenar en el mismo archivo claves privadas y públicas, dado que la herramienta para administrar esos archivos es la misma (keytool), por lo que podría usar un solo archivo para ambos fines, pero probablemente no debería .
Al menos en mi Mac OSX, el almacén de claves predeterminado es
${user.home}/.keystore
, y el almacén de confianza predeterminado es/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security/cacerts
.Si desea anularlos, debe agregar los parámetros JVM
-Djavax.net.ssl.keyStore /path/to/keyStore
o-Djavax.net.ssl.trustStore /path/to/trustStore
. Es posible que también deba establecer la contraseña de keyStore en caso de quejava.security.UnrecoverableKeyException: Password must not be null
use el parámetro-Djavax.net.ssl.trustStorePassword=password
o-Djavax.net.ssl.trustStorePassword=password
Fuente principal:
fuente