Definiciones de almacén de confianza y almacén de claves

Respuestas:

268

Un almacén de claves 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 otras partes.

Darron
fuente
12
Aunque esto debería ser cierto en la práctica, pueden (y a menudo lo son) uno en el mismo. En realidad, puede importar una clave privada y un certificado público en el [java home] / jre / lib / security / cacerts predeterminado "truststore". 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 usa un administrador de confianza para administrar los certificados, pero no hay una clase TrustStore.
44
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 a través de un KeyStore(y KeyStorese pasa al TrustManagerFactory).
jww
55
Vale la pena mencionar que 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!)
xverges
83
  1. Un almacén de claves 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 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

ha9u63ar
fuente
73

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

Aniket Thakur
fuente
31

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.

Peter Mularien
fuente
1
Desafortunadamente da un 404
Chris Beach
@ChrisBeach: he actualizado el enlace al correcto en el sitio de Oracle.
Peter Mularien
1
El almacén de confianza
Marqués de Lorne
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 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.

almacén de claves / almacén de confianza

Un almacén de claves es una base de datos de material clave. 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 términos generales, 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 de clave consiste en la identidad de una entidad y su clave privada, y puede usarse 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, una entrada de certificado de confianza no se puede usar donde se requiere una clave privada, como en javax.net.ssl.KeyManager. En la implementación JDK de JKS, un almacén de claves puede contener entradas de clave y entradas de certificado de confianza.

Un almacén de confianza es un almacén de claves que se utiliza al 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, puede suponer que los datos realmente provienen de esa entidad.

Una entrada solo debe agregarse a un almacén de confianza si el usuario confía en esa entidad. Al generar un par de claves o al importar un certificado, el usuario confía en 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 primero contiene información privada, mientras que el segundo no. El uso de dos archivos en lugar de un solo 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, almacénelas en un almacén de claves con acceso restringido y proporcione los certificados de confianza en un almacén de claves más accesible al público si es necesario.

jww
fuente
4
  1. 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.

  2. 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 .

  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 anularlos, debe agregar los parámetros JVM -Djavax.net.ssl.keyStore /path/to/keyStoreo -Djavax.net.ssl.trustStore /path/to/trustStore. Es posible que también deba establecer la contraseña de keyStore en caso de que java.security.UnrecoverableKeyException: Password must not be nulluse el parámetro -Djavax.net.ssl.trustStorePassword=passwordo-Djavax.net.ssl.trustStorePassword=password

Fuente principal:

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

alessiop86
fuente