2008-11-25 12 views

Respuesta

233

Un keystore contiene claves privadas y los certificados con sus claves públicas correspondientes.

Un almacén de confianza contiene certificados de otras partes con las que espera comunicarse o de autoridades de certificación en las que confía para identificar a terceros.

+10

aunque esto debe ser cierto en la práctica, pueden (y a menudo son) uno en la misma. De hecho, puede importar una clave privada y un certificado público en el "almacén de confianza" de [java home]/jre/lib/cacerts. La utilidad keytool no hace una distinción en los dos términos, solo en los tipos de tienda (es decir, JKS vs. PKCS12). Para el caso, Java hace lo mismo en el código fuente. Crea un java.security.KeyStore y utiliza un administrador de confianza para administrar los certificados en él, pero no hay una clase TrustStore. –

+4

Java no tiene un '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 en ella a través de 'KeyStore' (y' KeyStore' se pasa a 'TrustManagerFactory'). – jww

+5

Vale la pena mencionar que 'KeyStore.load (InputStream es, char [] contraseña)' ([docs] (http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html # load% 28java.io.InputStream,% 20char []% 29)) puede tomar una contraseña nula y luego dará acceso a los certificados públicos. Es decir, el código que desea explorar un almacén de confianza no necesita saberlo (por muy buenas razones) – xverges

70
  1. Un keystore contiene claves privadas. Solo necesita esto si es un servidor, o si el servidor requiere autenticación de cliente.

  2. Un almacén de confianza contiene certificados de CA de confianza. 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 CA confiables), por lo que no necesita construir el suyo, o agregar cualquier cosa a la del JRE.

Source

25

Usted también puede estar interesado en el relato de Sun, como parte de la documentación estándar JSSE:

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

Típicamente, el almacén de confianza se utiliza para almacenar solo claves públicas, para 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.

+1

Da un 404 desafortunadamente –

+0

@ChrisBeach - ha actualizado el enlace al correcto en el sitio de Oracle. –

+0

El almacén de confianza se utiliza para almacenar * certificados de firmante de confianza. * – EJP

60

En un apretón de manos SSL con el propósito de trustStore es verificar las credenciales y el propósito de keyStore es proporcionar credenciales.

keyStore

keyStore en las tiendas de Java claves privadas y certificados correspondientes a sus claves públicas y requieren si usted es servidor SSL o SSL requiere autenticación de cliente.

TrustStore

tiendas de almacén de confianza certificados de terceros, la aplicación Java se comunican o certificados firmados por CA (autoridades de certificación como Verisign, Thawte, GeoTrust o GoDaddy) que pueden utilizarse para identificar terceros.

TrustManager

TrustManager determina si la conexión remota debe ser de confianza o no, es decir si la parte remota es quien dice KeyManager y decide qué credenciales de autenticación deben ser enviados al host remoto para la autenticación durante el protocolo de enlace SSL.

Si usted es un servidor SSL, utilizará la 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, usará certificados almacenados en trustStore para verificar la identidad del servidor.Los certificados SSL se presentan más comúnmente como .cer archivo que se agrega a keyStore o trustStore utilizando cualquier utilidad de administración de claves, p. keytool.

Fuente: http://javarevisited.blogspot.ch

+3

Esta respuesta aborda el propósito de cada uno de los cuales creo que responde la pregunta de manera más completa. –

+0

Esto realmente aclara muchas terminologías. –

9

En Java, ¿cuál es la diferencia entre un almacén de claves y un almacén de confianza?

Aquí está la descripción de los documentos de Java en Java Secure Socket Extension (JSSE) Reference Guide. No creo que te diga nada diferente de lo que otros han dicho. Pero proporciona la referencia oficial.

almacén de claves/truststore

Un almacén de claves es una base de datos de material de claves. El material clave se utiliza para una variedad de propósitos, incluida la autenticación y la integridad de los datos. Hay varios tipos de almacenes de claves disponibles, incluidos PKCS12 y JKS de Oracle.

En general, la información del almacén de claves se puede agrupar en dos categorías: entradas de clave y entradas de certificado de confianza. Una entrada clave consiste en la identidad de una entidad y su clave privada, y se puede usar para una variedad de propósitos criptográficos. Por el contrario, una entrada de certificado de confianza contiene solo una clave pública además de la identidad de la entidad . Por lo tanto, no se puede usar una entrada de certificado de confianza donde se requiera una clave privada, como en un javax.net.ssl.KeyManager. En la implementación JDK de JKS, un almacén de claves puede contener entradas de claves y entradas de certificados de confianza.

Un almacén de confianza es un almacén de claves que se usa para tomar decisiones sobre en qué confiar. Si recibe datos de una entidad en la que ya confía, y si puede verificar que la entidad es la que dice ser, entonces puede suponer que los datos realmente provienen de esa entidad.

Una entrada solo se debe agregar a un almacén de confianza si el usuario confía en esa entidad. Generando un par de claves o importando un certificado , el usuario otorga confianza a esa entrada. Cualquier entrada en el almacén de confianza se considera una entrada de confianza.

Puede ser útil tener dos archivos de almacén de claves diferentes: uno que contenga solo sus entradas de clave y el otro que contenga sus entradas de certificado de confianza , incluidos los certificados de CA. El anterior contiene información privada, mientras que el segundo no. El uso de dos archivos en lugar de un único archivo de almacén de claves proporciona una separación más clara de la distinción lógica entre sus propios certificados (y las claves privadas correspondientes ) y los certificados de los demás. Para proporcionar más protección para sus claves privadas, guárdelas en un almacén de claves con acceso restringido , y proporcione los certificados confiables en un almacén de claves de acceso público más si es necesario.

3
  1. Primero y principal diferencia entre trustStore y keyStore es que trustStore es utilizado por TrustManager para determinar si la conexión remota debe ser de confianza, keyStore se utiliza desde KeyManager decidir qué credenciales de autenticación deben ser enviados al host remoto para autenticación durante el protocolo de enlace SSL.

  2. Otra diferencia es que KeyStore teóricamente contiene claves privadas necesarias solo si está ejecutando un Servidor en conexión SSL o ha habilitado la autenticación de cliente en el 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 se puede almacenar en el mismo archivo ambas claves privadas y públicas, dado que el la herramienta para gestionar los archivos es el mismo (herramienta de claves), por lo que podría utilizar un solo archivo, tanto para los propósitos , pero usted probablemente no debería.

  3. 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 anular les debe añadir la JVM parámetros de -Djavax.net.ssl.keyStore /path/to/keyStore o -Djavax.net.ssl.trustStore /path/to/trustStore. Es posible que también necesario ajustar la contraseña del almacén en caso de java.security.UnrecoverableKeyException: Password must not be null, utilizando el parámetro -Djavax.net.ssl.trustStorePassword=password o -Djavax.net.ssl.trustStorePassword=password

Fuente principal:

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

Cuestiones relacionadas